LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
chooseSolverHeur.m
1function solver = chooseSolverHeur(self, method)
2% SOLVER = CHOOSESOLVERHEUR(METHOD)
3%
4switch 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', ...
22 'update_solver'}
23 % LayeredNetwork/EnsembleSolver methods - use first available LayeredNetwork solver
24 this_model = self.model;
25 switch class(this_model)
26 case 'LayeredNetwork'
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};
38 else
39 line_error(mfilename,'No LayeredNetwork solver available');
40 end
41 case 'Network'
42 line_error(mfilename,'Method %s is only available for LayeredNetwork models', method);
43 end
44 case {'getTranAvg'}
45 this_model = self.model;
46 switch class(this_model)
47 case 'Network'
48 if SolverFluid.supports(this_model)
49 solver = self.solvers{self.CANDIDATE_FLUID};
50 else
51 solver = self.solvers{self.CANDIDATE_JMT};
52 end
53 case 'LayeredNetwork'
54 line_error(mfilename,'Method not yet supported with LayeredNetworks');
55 end
56 case {'getCdfRespT'}
57 this_model = self.model;
58 switch class(this_model)
59 case 'Network'
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};
64 else
65 solver = self.solvers{self.CANDIDATE_JMT};
66 end
67 case 'LayeredNetwork'
68 line_error(mfilename,'Method not yet supported with LayeredNetworks');
69 end
70 case {'getTranCdfPassT','getTranCdfRespT'}
71 this_model = self.model;
72 switch class(this_model)
73 case 'Network'
74 if SolverFluid.supports(this_model)
75 solver = self.solvers{self.CANDIDATE_FLUID};
76 else
77 solver = self.solvers{self.CANDIDATE_JMT};
78 end
79 case 'LayeredNetwork'
80 line_error(mfilename,'Method not yet supported with LayeredNetworks');
81 end
82 case {'getTranProb','getTranProbSys','getTranProbAggr','getTranProbSysAggr'}
83 this_model = self.model;
84 switch class(this_model)
85 case 'Network'
86 solver = self.solvers{self.CANDIDATE_CTMC};
87 case 'LayeredNetwork'
88 line_error(mfilename,'Method not yet supported with LayeredNetworks');
89 end
90 case {'sample','sampleSys'}
91 this_model = self.model;
92 switch class(this_model)
93 case 'Network'
94 solver = self.solvers{self.CANDIDATE_SSA};
95 case 'LayeredNetwork'
96 line_error(mfilename,'Method not yet supported with LayeredNetworks');
97 end
98 case {'sampleAggr','sampleSysAggr'}
99 this_model = self.model;
100 switch class(this_model)
101 case 'Network'
102 solver = self.solvers{self.CANDIDATE_JMT};
103 case 'LayeredNetwork'
104 line_error(mfilename,'Method not yet supported with LayeredNetworks');
105 end
106 case {'getProb','getProbAggr','getProbSys','getProbSysAggr','getProbNormConstAggr'}
107 this_model = self.model;
108 switch class(this_model)
109 case 'Network'
110 if SolverNC.supports(this_model) && this_model.hasProductFormSolution()
111 solver = self.solvers{self.CANDIDATE_NC};
112 else
113 solver = self.solvers{self.CANDIDATE_JMT};
114 end
115 case 'LayeredNetwork'
116 line_error(mfilename,'Method not yet supported with LayeredNetworks');
117 end
118end
119end