LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
chooseAvgSolverHeur.m
1function solver = chooseAvgSolverHeur(self)
2% SOLVER = CHOOSEAVGSOLVER()
3
4this_model = self.model;
5switch class(this_model)
6 case 'Network'
7 if this_model.hasSingleChain
8 solver = self.solvers{self.CANDIDATE_NC}; % exact O(1) solution
9 else % MultiChain
10 if this_model.hasHomogeneousScheduling(SchedStrategy.INF)
11 solver = self.solvers{self.CANDIDATE_MVA}; % all infinite servers
12 elseif this_model.hasProductFormSolution() && ~this_model.hasMultiServer
13 solver = self.solvers{self.CANDIDATE_NC};
14 elseif this_model.hasHomogeneousScheduling(SchedStrategy.FCFS) && ~this_model.hasMultiServer
15 if sum(this_model.getNumberOfJobs) / sum(this_model.getNumberOfChains) > 30 % likely fluid regime
16 solver = self.solvers{self.CANDIDATE_FLUID};
17 elseif sum(this_model.getNumberOfJobs) / sum(this_model.getNumberOfChains) > 10 % mid/heavy load
18 solver = self.solvers{self.CANDIDATE_MVA};
19 elseif sum(this_model.getNumberOfJobs) < 5 % light load, avoid errors of AMVA in low populations
20 solver = self.solvers{self.CANDIDATE_NC};
21 end
22 elseif (this_model.hasHomogeneousScheduling(SchedStrategy.PS)||this_model.hasHomogeneousScheduling(SchedStrategy.PSPRIO)) && this_model.hasMultiServer
23 solver = self.solvers{self.CANDIDATE_MVA};
24 elseif this_model.hasHomogeneousScheduling(SchedStrategy.FCFS) && this_model.hasMultiServer
25 if sum(this_model.getNumberOfJobs) < 5 % light load, avoid errors of AMVA in low populations
26 solver = self.solvers{self.CANDIDATE_NC};
27 else
28 solver = self.solvers{self.CANDIDATE_MVA};
29 end
30 else
31 solver = self.solvers{self.CANDIDATE_MVA};
32 end
33 end
34 case 'LayeredNetwork'
35 % if the LQN has caches use LN
36 for t=1:length(self.model.tasks)
37 if isa(self.model.tasks{t},'CacheTask')
38 solver = self.solvers{self.CANDIDATE_LN_NC};
39 return
40 end
41 end
42 % Try LQNS first if available, otherwise fall back to SolverLN variants
43 if ~isempty(self.solvers{self.CANDIDATE_LQNS}) && SolverLQNS.isAvailable()
44 solver = self.solvers{self.CANDIDATE_LQNS};
45 elseif ~isempty(self.solvers{self.CANDIDATE_LN_MVA})
46 solver = self.solvers{self.CANDIDATE_LN_MVA};
47 elseif ~isempty(self.solvers{self.CANDIDATE_LN_NC})
48 solver = self.solvers{self.CANDIDATE_LN_NC};
49 elseif ~isempty(self.solvers{self.CANDIDATE_LN_MAM})
50 solver = self.solvers{self.CANDIDATE_LN_MAM};
51 elseif ~isempty(self.solvers{self.CANDIDATE_LN_FLUID})
52 solver = self.solvers{self.CANDIDATE_LN_FLUID};
53 else
54 line_error(mfilename,'No LayeredNetwork solver available');
55 end
56end
57end