LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
SolverMVA.m
1classdef SolverMVA < NetworkSolver
2 % Mean Value Analysis solver for queueing networks
3 %
4 % Implements MVA algorithms for analyzing closed and open queueing networks.
5 %
6 % Copyright (c) 2012-2026, Imperial College London
7 % All rights reserved.
8
9 methods
10 function self = SolverMVA(model,varargin)
11 % SOLVERMVA Create an MVA solver instance
12 %
13 % @brief Creates a Mean Value Analysis solver for the given model
14 % @param model Network model to be analyzed
15 % @param varargin Optional solver options (method, tolerance, etc.)
16 % @return self SolverMVA instance configured with specified options
17
18 self@NetworkSolver(model, mfilename);
19 self.setOptions(Solver.parseOptions(varargin, SolverMVA.defaultOptions));
20 self.setLang();
21 end
22
23 function sn = getStruct(self)
24 % GETSTRUCT Get model data structure for analysis
25 %
26 % @brief Returns the internal data structure representing the model
27 % @return sn Structured data representing the queueing network
28 sn = self.model.getStruct(false);
29 end
30
31 [runtime, analyzer] = runAnalyzer(self, options);
32 [lNormConst] = getProbNormConstAggr(self);
33 [Pnir,logPnir] = getProbAggr(self, ist);
34 [Pnir,logPn] = getProbSysAggr(self);
35
36 function [allMethods] = listValidMethods(self)
37 % LISTVALIDMETHODS Get all valid MVA solution methods
38 %
39 % @brief Returns cell array of valid MVA methods for the current model
40 % @return allMethods Cell array of method names available for this model
41
42 sn = self.model.getStruct;
43 % base set of methods
44 allMethods = {'default',...
45 'mva','exact','amva','qna', ...
46 'qdlin','amva.qdlin', ...
47 'bs','amva.bs', ...
48 'sqni', ...
49 'qd','amva.qd', ...
50 'qli','amva.qli', ...
51 'fli','amva.fli', ...
52 'ab','amva.ab', ...
53 'schmidt','amva.schmidt', ...
54 'schmidt-ext','amva.schmidt-ext', ...
55 'lin','egflin','gflin','amva.lin'};
56
57 if ~sn_is_open_model(sn) && sn.nclasses == 1
58 bounds = {'aba.upper','aba.lower','bjb.upper','bjb.lower', ...
59 'gb.upper','gb.lower','pb.upper','pb.lower','sb.upper','sb.lower'};
60 allMethods = {allMethods{:}, bounds{:}}; %#ok<CCAT>
61 end
62
63 if sn_is_open_model(sn) && sn.nstations == 2 && sn.nclasses == 1
64 % methods to add for queueing systems
65 qsys = {'mm1','mmk','mg1','mgi1','gm1','gig1','gim1','gig1.kingman', ...
66 'gigk','gigk.kingman_approx', ...
67 'gig1.gelenbe','gig1.heyman','gig1.kimura','gig1.allen', ...
68 'gig1.kobayashi','gig1.klb','gig1.marchal'};
69 % append, keeping original order and avoiding duplicates
70 allMethods = {allMethods{:}, qsys{:}}; %#ok<CCAT>
71 end
72 end
73
74 end
75
76 methods(Static)
77 function featSupported = getFeatureSet()
78 % FEATSUPPORTED = GETFEATURESET()
79
80 featSupported = SolverFeatureSet;
81 featSupported.setTrue({'Sink','Source',...
82 'ClassSwitch','Delay','DelayStation','Queue',...
83 'APH','Coxian','Erlang','Exp','HyperExp',...
84 'Pareto','Weibull','Lognormal','Uniform','Det', ...
85 'StatelessClassSwitcher','InfiniteServer','SharedServer','Buffer','Dispatcher',...
86 'CacheClassSwitcher','Cache', ...
87 'Server','JobSink','RandomSource','ServiceTunnel',...
88 'SchedStrategy_INF','SchedStrategy_PS',...
89 'SchedStrategy_DPS','SchedStrategy_FCFS','SchedStrategy_SIRO','SchedStrategy_HOL',...
90 'SchedStrategy_LCFS','SchedStrategy_LCFSPR','SchedStrategy_POLLING',...
91 'Fork','Forker','Join','Joiner',...
92 'RoutingStrategy_PROB','RoutingStrategy_RAND',...
93 'ReplacementStrategy_RR', 'ReplacementStrategy_FIFO', 'ReplacementStrategy_LRU',...
94 'ClosedClass','SelfLoopingClass','OpenClass','Replayer'});
95 end
96
97 function [bool, featSupported] = supports(model)
98 % [BOOL, FEATSUPPORTED] = SUPPORTS(MODEL)
99
100 featUsed = model.getUsedLangFeatures();
101 featSupported = SolverMVA.getFeatureSet();
102 bool = SolverFeatureSet.supports(featSupported, featUsed);
103 end
104
105 function options = defaultOptions
106 % OPTIONS = DEFAULTOPTIONS()
107
108 options = SolverOptions('MVA');
109 end
110
111 function libs = getLibrariesUsed(sn, options)
112 % GETLIBRARIESUSED Get list of external libraries used by MVA solver
113 % MVA uses internal algorithms, no external library attribution needed
114 libs = {};
115 end
116
117 end
118end