LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
runAnalyzer.m
1function runtime = runAnalyzer(self, options)
2% RUNTIME = RUN()
3% Run the solver
4
5T0=tic;
6if nargin<2
7 options = self.getOptions;
8end
9
10if self.enableChecks && ~self.supports(self.model)
11 line_error(mfilename,'This model contains features not supported by the solver.\n');
12end
13
14self.runAnalyzerChecks(options);
15Solver.resetRandomGeneratorSeed(options.seed);
16
17% Show library attribution if verbose and not yet shown
18if options.verbose ~= VerboseLevel.SILENT && ~GlobalConstants.isLibraryAttributionShown()
19 sn = self.getStruct();
20 libs = SolverMAM.getLibrariesUsed(sn, options);
21 if ~isempty(libs)
22 line_printf('The solver will leverage %s.\n', strjoin(libs, ', '));
23 GlobalConstants.setLibraryAttributionShown(true);
24 end
25end
26
27% Check if the model is mixed (has both open and closed classes)
28hasOpen = self.model.hasOpenClasses();
29hasClosed = self.model.hasClosedClasses();
30isMixed = hasOpen && hasClosed;
31
32if isMixed
33 line_error(mfilename,'SolverMAM does not support mixed models with both open and closed classes.\n');
34 return;
35end
36
37%options.lang = 'java';
38
39switch options.lang
40 case 'java'
41 jmodel = LINE2JLINE(self.model);
42 %M = jmodel.getNumberOfStatefulNodes;
43 M = jmodel.getNumberOfStations;
44 R = jmodel.getNumberOfClasses;
45 jsolver = JLINE.SolverMAM(jmodel, options);
46 [QN,UN,RN,WN,AN,TN] = JLINE.arrayListToResults(jsolver.getAvgTable);
47 runtime = toc(T0);
48 CN = [];
49 XN = [];
50 QN = reshape(QN',R,M)';
51 UN = reshape(UN',R,M)';
52 RN = reshape(RN',R,M)';
53 WN = reshape(WN',R,M)';
54 AN = reshape(AN',R,M)';
55 TN = reshape(TN',R,M)';
56 lG = NaN;
57 lastiter = NaN;
58 self.setAvgResults(QN,UN,RN,TN,AN,WN,CN,XN,runtime,options.method,lastiter);
59 self.result.Prob.logNormConstAggr = lG;
60 return
61 case 'matlab'
62 sn = getStruct(self);
63 if true%~snHasMultipleClosedClasses(sn)
64 % Call solver_mam_analyzer - percResults is optional 10th output
65 [QN,UN,RN,TN,CN,XN,~,actualmethod,iter,percResults] = solver_mam_analyzer(sn, options);
66 T = getAvgTputHandles(self);
67 AN=sn_get_arvr_from_tput(sn, TN, T);
68
69 runtime=toc(T0);
70 if strcmp(options.method,'default')
71 self.setAvgResults(QN,UN,RN,TN,AN,[],CN,XN,runtime,['default/' actualmethod],iter);
72 else
73 self.setAvgResults(QN,UN,RN,TN,AN,[],CN,XN,runtime,options.method,iter);
74 end
75
76 % Store percentile results if FJ_codes was used
77 if ~isempty(percResults)
78 self.result.Percentile = percResults;
79 end
80 else
81 line_warning(mfilename,'SolverMAM supports at most a single closed class.\n');
82 runtime=toc(T0);
83 self.setAvgResults([],[],[],[],[],[],[],[],runtime,options.method,0);
84 end
85end
86end