1classdef SolverSSA < NetworkSolver
2 % Stochastic Simulation Analysis solver
4 % Implements discrete-
event stochastic simulation
for queueing network analysis.
6 % Copyright (c) 2012-2026, Imperial College London
9 function self = SolverSSA(model,varargin)
10 % SOLVERSSA Create an SSA solver instance
12 % @brief Creates a Stochastic Simulation Analysis solver
13 % @param model Network model to be analyzed via simulation
14 % @param varargin Optional parameters (method, samples, seed, etc.)
15 % @
return self SolverSSA instance configured
for simulation
17 % An auxiliary solver passed as first optional argument requests a
18 % warm start: its steady-state solution decides the initial state
19 % of the simulated trajectory (see NetworkSolver.initFromSolver).
21 if ~isempty(varargin) && isa(varargin{1},
'NetworkSolver')
22 initSolver = varargin{1};
25 self@NetworkSolver(model, mfilename);
26 self.setOptions(Solver.parseOptions(varargin, self.defaultOptions));
28 if ~isempty(initSolver)
29 self.initFromSolver(initSolver);
33 function sn = getStruct(self)
36 % Get data structure summarizing the model
37 sn = self.model.getStruct(
true);
40 [runtime, tranSysState, tranSync] = run(self, options);
41 Prob = getProb(self, node, state);
42 ProbAggr = getProbAggr(self, node, state);
43 ProbSys = getProbSys(self);
44 ProbSysAggr = getProbSysAggr(self);
45 tranNodeState = sample(self, node, numEvents, markActivePassive);
46 tranNodeStateAggr = sampleAggr(self, node, numEvents, markActivePassive);
47 tranSysStateAggr = sampleSysAggr(self, numEvents, markActivePassive);
48 tranSysState = sampleSys(self, numEvents, markActivePassive);
50 function [allMethods] = listValidMethods(self)
51 % allMethods = LISTVALIDMETHODS()
52 % List valid methods
for this solver
54 %sn = self.model.getStruct();
55 allMethods = {
'default',
'ssa',
'serial',
'para',
'parallel',
'nrm'};
58 function
bool = isStochasticMethod(self, method) %#ok<INUSD>
59 % BOOL = ISSTOCHASTICMETHOD(METHOD)
60 % All SSA methods are stochastic simulation.
67 function featSupported = getFeatureSet()
68 % FEATSUPPORTED = GETFEATURESET()
70 featSupported = SolverFeatureSet;
71 featSupported.setTrue({
'Sink',
'Source',
'Router',...
72 'ClassSwitch',
'Delay',
'DelayStation',
'Queue',...
73 'Cache',
'CacheClassSwitcher',...
75 'MAP',
'MMPP2',
'MMAP',
'APH',
'PH',
'Replayer',...
76 'Coxian',
'Erlang',
'Exp',
'HyperExp',...
77 'Det',
'Gamma',
'Lognormal',
'Pareto',
'Uniform',
'Weibull',...
78 'StatelessClassSwitcher',
'InfiniteServer',...
79 'SharedServer',
'Buffer',
'Dispatcher',...
80 ... % Finite capacity regions: the NRM sample path honours them.
82 'Server',
'JobSink',
'RandomSource',
'ServiceTunnel',...
83 'SchedStrategy_INF',
'SchedStrategy_PS',...
84 'SchedStrategy_DPS',
'SchedStrategy_FCFS',...
85 'SchedStrategy_GPS',
'SchedStrategy_LPS',
'SchedStrategy_SIRO',...
86 'SchedStrategy_HOL',
'SchedStrategy_LCFS',...
87 'SchedStrategy_SEPT',
'SchedStrategy_LEPT',...
88 'SchedStrategy_LCFSPR',...
89 'SchedStrategy_PSPRIO',
'SchedStrategy_DPSPRIO',
'SchedStrategy_GPSPRIO',...
90 'SchedStrategy_LCFSPRPRIO',
'SchedStrategy_FCFSPRPRIO',...
91 'SchedStrategy_PAS',...
92 'SchedStrategy_OI',...
93 'SchedStrategy_POLLING',...
94 'RoutingStrategy_RROBIN',...
95 'RoutingStrategy_WRROBIN',...
96 'RoutingStrategy_JSQ',...
97 'RoutingStrategy_SQ',...
98 'RoutingStrategy_RL',...
99 'RoutingStrategy_PROB',
'RoutingStrategy_RAND',...
100 'ReplacementStrategy_RR',
'ReplacementStrategy_FIFO',
'ReplacementStrategy_SFIFO',
'ReplacementStrategy_LRU',...
101 'ReplacementStrategy_HLRU',
'ReplacementStrategy_CLIMB',
'ReplacementStrategy_QLRU',...
102 'SchedStrategy_EXT',
'ClosedClass',
'SelfLoopingClass',
'OpenClass',...
103 'OpenSignal',
'ClosedSignal',...
104 'SignalType_NEGATIVE',
'SignalType_CATASTROPHE',...
105 'SignalBatchRemoval',
'SignalRemovalPolicy',...
106 'Fork',
'Join',
'Forker',
'Joiner',...
107 'Place',
'Transition',
'Linkage',
'Enabling',
'Inhibiting',
'Timing',
'Firing',
'Storage',...
108 'Balking',
'Reneging',
'Retrial',...
109 'LoadDependence',
'ClassDependence',
'JointDependence'});
112 function [bool, featSupported] = supports(model)
113 % [BOOL, FEATSUPPORTED] = SUPPORTS(MODEL)
115 featUsed = model.getUsedLangFeatures();
116 featSupported = SolverSSA.getFeatureSet();
117 bool = SolverFeatureSet.supports(featSupported, featUsed);
120 function options = defaultOptions()
121 % OPTIONS = DEFAULTOPTIONS()
123 options = SolverOptions('SSA');
126 function libs = getLibrariesUsed(sn, options)
127 % GETLIBRARIESUSED Get list of external libraries used by SSA solver
128 % SSA uses internal simulation, no external libraries needed