1function runtime = runAnalyzer(self, options)
7 options = self.getOptions;
10if self.enableChecks && ~self.supports(self.model)
11 line_error(mfilename,
'This model contains features not supported by the solver.\n');
14self.runAnalyzerChecks(options);
15Solver.resetRandomGeneratorSeed(options.seed);
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);
22 line_printf(
'The solver will leverage %s.\n', strjoin(libs,
', '));
23 GlobalConstants.setLibraryAttributionShown(
true);
27%options.lang =
'java';
31 line_debug(options,
'MAM: using lang=java, delegating to JLINE');
32 jmodel = LINE2JLINE(self.model);
33 %M = jmodel.getNumberOfStatefulNodes;
34 M = jmodel.getNumberOfStations;
35 R = jmodel.getNumberOfClasses;
36 jsolver = JLINE.SolverMAM(jmodel, options);
37 [QN,UN,RN,WN,AN,TN] = JLINE.arrayListToResults(jsolver.getAvgTable);
41 QN = reshape(QN
',R,M)';
42 UN = reshape(UN
',R,M)';
43 RN = reshape(RN
',R,M)';
44 WN = reshape(WN
',R,M)';
45 AN = reshape(AN
',R,M)';
46 TN = reshape(TN
',R,M)';
49 self.setAvgResults(QN,UN,RN,TN,AN,WN,CN,XN,runtime,options.method,lastiter);
50 self.result.Prob.logNormConstAggr = lG;
53 line_debug(options,
'MAM: using lang=matlab');
56 % Check
if transient analysis
is requested
57 isTran = length(options.timespan) >= 2 && ~isinf(options.timespan(2));
59 if isTran && strcmp(options.method,
'ldqbd')
60 line_debug(options, 'MAM: transient analysis via standard QBD');
61 sn = sn_nonmarkov_toph(sn, options);
62 [Qt, Ut, Tt] = solver_mam_ldqbd_transient(sn, options);
64 Xt = cell(1, sn.nclasses);
65 Ct = cell(1, sn.nclasses);
67 self.setTranAvgResults(Qt, Ut, Rt, Tt, Ct, Xt, runtime);
68 elseif true%~snHasMultipleClosedClasses(sn)
69 line_debug(options, 'MAM: calling solver_mam_analyzer (method=%s)', options.method);
70 % Call solver_mam_analyzer - percResults
is optional 10th output
71 [QN,UN,RN,TN,CN,XN,~,actualmethod,iter,percResults] = solver_mam_analyzer(sn, options);
72 T = getAvgTputHandles(self);
73 AN=sn_get_arvr_from_tput(sn, TN, T);
76 if strcmp(options.method,'default')
77 self.setAvgResults(QN,UN,RN,TN,AN,[],CN,XN,runtime,['default/' actualmethod],iter);
79 self.setAvgResults(QN,UN,RN,TN,AN,[],CN,XN,runtime,options.method,iter);
82 % Store percentile results if FJ_codes was used
83 if ~isempty(percResults)
84 self.result.Percentile = percResults;
87 line_warning(mfilename,'SolverMAM supports at most a single closed class.\n');
89 self.setAvgResults([],[],[],[],[],[],[],[],runtime,options.method,0);