1function solver = chooseSolverHeur(self, method)
2% SOLVER = CHOOSESOLVERHEUR(METHOD)
5 case {
'getAvgChainTable',
'getAvgTputTable',
'getAvgRespTTable', ...
6 'getAvgUtilTable',
'getAvgSysTable',
'getAvgNodeTable', ...
7 'getAvgTable',
'getAvg',
'getAvgChain',
'getAvgSys', ...
8 'getAvgNode',
'getAvgArvRChain',
'getAvgQLenChain', ...
9 'getAvgUtilChain',
'getAvgRespTChain',
'getAvgTputChain', ...
10 'getAvgSysRespT',
'getAvgSysTput', ...
11 'getAvgQLen',
'getAvgUtil',
'getAvgRespT',
'getAvgResidT', ...
12 'getAvgWaitT',
'getAvgTput',
'getAvgArvR',
'getAvgQLenTable', ...
13 'getAvgResidTChain',
'getAvgNodeQLenChain',
'getAvgNodeUtilChain', ...
14 'getAvgNodeRespTChain',
'getAvgNodeResidTChain',
'getAvgNodeTputChain', ...
15 'getAvgNodeArvRChain',
'getAvgNodeChainTable',
'getPerctRespT', ...
16 'getResults',
'hasResults',
'getAvgHandles',
'getTranHandles', ...
17 'getAvgQLenHandles',
'getAvgUtilHandles',
'getAvgRespTHandles', ...
18 'getAvgTputHandles',
'getAvgArvRHandles',
'getAvgResidTHandles'}
19 solver = chooseAvgSolverHeur(self);
20 case {
'getEnsembleAvg',
'getEnsembleAvgTables',
'getSolver',
'setSolver', ...
21 'getNumberOfModels',
'getIteration',
'get_state',
'set_state', ...
23 % LayeredNetwork/EnsembleSolver methods - use first available LayeredNetwork solver
24 this_model = self.model;
25 switch class(this_model)
27 % Try SolverLN with MVA first (fastest), then others
28 if ~isempty(self.solvers{self.CANDIDATE_LN_MVA})
29 solver = self.solvers{self.CANDIDATE_LN_MVA};
30 elseif ~isempty(self.solvers{self.CANDIDATE_LN_NC})
31 solver = self.solvers{self.CANDIDATE_LN_NC};
32 elseif ~isempty(self.solvers{self.CANDIDATE_LN_MAM})
33 solver = self.solvers{self.CANDIDATE_LN_MAM};
34 elseif ~isempty(self.solvers{self.CANDIDATE_LN_FLUID})
35 solver = self.solvers{self.CANDIDATE_LN_FLUID};
36 elseif ~isempty(self.solvers{self.CANDIDATE_LQNS})
37 solver = self.solvers{self.CANDIDATE_LQNS};
39 line_error(mfilename,
'No LayeredNetwork solver available');
42 line_error(mfilename,
'Method %s is only available for LayeredNetwork models', method);
45 this_model = self.model;
46 switch class(this_model)
48 if SolverFluid.supports(this_model)
49 solver = self.solvers{self.CANDIDATE_FLUID};
51 solver = self.solvers{self.CANDIDATE_JMT};
54 line_error(mfilename,
'Method not yet supported with LayeredNetworks');
57 this_model = self.model;
58 switch class(this_model)
60 if this_model.hasHomogeneousScheduling(SchedStrategy.FCFS) && SolverNC.supports(this_model) && this_model.hasProductFormSolution()
61 solver = self.solvers{self.CANDIDATE_NC};
62 elseif SolverFluid.supports(this_model)
63 solver = self.solvers{self.CANDIDATE_FLUID};
65 solver = self.solvers{self.CANDIDATE_JMT};
68 line_error(mfilename,
'Method not yet supported with LayeredNetworks');
70 case {
'getTranCdfPassT',
'getTranCdfRespT'}
71 this_model = self.model;
72 switch class(this_model)
74 if SolverFluid.supports(this_model)
75 solver = self.solvers{self.CANDIDATE_FLUID};
77 solver = self.solvers{self.CANDIDATE_JMT};
80 line_error(mfilename,
'Method not yet supported with LayeredNetworks');
82 case {
'getTranProb',
'getTranProbSys',
'getTranProbAggr',
'getTranProbSysAggr'}
83 this_model = self.model;
84 switch class(this_model)
86 solver = self.solvers{self.CANDIDATE_CTMC};
88 line_error(mfilename,
'Method not yet supported with LayeredNetworks');
90 case {
'sample',
'sampleSys'}
91 this_model = self.model;
92 switch class(this_model)
94 solver = self.solvers{self.CANDIDATE_SSA};
96 line_error(mfilename,
'Method not yet supported with LayeredNetworks');
98 case {
'sampleAggr',
'sampleSysAggr'}
99 this_model = self.model;
100 switch class(this_model)
102 solver = self.solvers{self.CANDIDATE_JMT};
103 case 'LayeredNetwork'
104 line_error(mfilename,
'Method not yet supported with LayeredNetworks');
106 case {
'getProb',
'getProbAggr',
'getProbSys',
'getProbSysAggr',
'getProbNormConstAggr'}
107 this_model = self.model;
108 switch class(this_model)
110 if SolverNC.supports(this_model) && this_model.hasProductFormSolution()
111 solver = self.solvers{self.CANDIDATE_NC};
113 solver = self.solvers{self.CANDIDATE_JMT};
115 case 'LayeredNetwork'
116 line_error(mfilename,
'Method not yet supported with LayeredNetworks');