1classdef SolverJMT < NetworkSolver
2 % SolverJMT Java Modelling Tools
interface for simulation analysis
4 % SolverJMT provides an
interface to the Java Modelling Tools (JMT) suite
5 %
for discrete
event simulation of queueing networks. It handles model
6 % translation, simulation execution, and results parsing
for both JMVA
7 % (analytical) and JSIM (simulation) engines within JMT.
9 % @brief Interface to Java Modelling Tools
for simulation and analysis
13 % solver = SolverJMT(model,
'samples', 10000,
'seed', 1);
14 % solver.getAvg(); % Run simulation via JMT
17 % Copyright (c) 2012-2026, Imperial College London
18 % All rights reserved.
21 properties %(GetAccess = 'private', SetAccess='private')
31 xmlParser; % JMTIO instance
for XML generation
36 xsiNoNamespaceSchemaLocation =
'Archive.xsd';
45 function self = SolverJMT(model, varargin)
46 % SOLVERJMT Create a JMT solver instance
48 % @brief Creates a Java Modelling Tools solver
for the given model
49 % @param model Network model to be analyzed via JMT
50 % @param varargin Optional parameters (samples, seed, maxSimulatedTime, etc.)
51 % @
return self SolverJMT instance configured
for JMT simulation
53 self@NetworkSolver(model, mfilename);
54 self.setOptions(Solver.parseOptions(varargin, self.defaultOptions));
56 if ~Solver.isJavaAvailable
57 line_error(mfilename,
'SolverJMT requires the java command to be available on the system path.\n');
59 if ~SolverJMT.isAvailable
60 line_warning(mfilename,
'SolverJMT cannot locate JMT.jar in the common folder.\n');
62 % Set confidence interval from options (
default: 0.99 for 99% confidence)
63 [confintEnabled, confintLevel] = Solver.parseConfInt(self.options.confint);
65 self.simConfInt = confintLevel;
67 self.simConfInt = 0.99; %
default when disabled
69 self.simMaxRelErr = 0.03;
71 self.setJMTJarPath(jmtGetPath);
72 % Initialize XML parser
for model serialization
73 self.xmlParser = JMTIO(model, self.options);
76 % XML generation delegated to JMTIO (see @JMTIO/)
77 % Use self.xmlParser.writeJSIM()
for JSIM model generation
79 fileName = getFileName(self)
82 self = setJMTJarPath(self, path)
85 out = getJMTJarPath(self)
87 out = getFilePath(self)
88 jsimwView(self, options)
89 jsimgView(self, options)
92 [outputFileName] = writeJSIM(self, sn, outputFileName)
93 [result, parsed] = getResults(self)
94 [result, parsed] = getResultsJSIM(self)
95 [result, parsed] = getResultsJMVA(self)
97 function sn = getStruct(self)
100 % Get data structure summarizing the model
101 sn = self.model.getStruct(
true);
106 methods (Access =
'private')
107 out = getJSIMTempPath(self)
108 out = getJMVATempPath(self)
112 methods (Access = 'protected')
113 bool = hasAvgResults(self)
117 methods (Access = 'public')
118 getProbNormConstAggr(self); % jmva
120 Pr = getProbAggr(self, node, state_a);
121 [Pi_t, SSnode_a] = getTranProbAggr(self, node);
122 probSysStateAggr = getProbSysAggr(self);
123 tranNodeStateAggr = sampleAggr(self, node, numSamples, markActivePassive);
124 tranSysStateAggr = sampleSysAggr(self, numSamples, markActivePassive);
127 [
RD,log] = getCdfRespT(self, R);
128 RD = getTranCdfRespT(self, R);
129 RD = getTranCdfPassT(self, R);
131 function [allMethods] = listValidMethods(self)
132 % allMethods = LISTVALIDMETHODS()
133 % List valid methods for this solver
134 sn = self.model.getStruct();
135 allMethods = {
'default',
'jsim',
'replication',
'jmva',
'jmva.amva',
'jmva.mva',
'jmva.recal',...
136 'jmva.comom',
'jmva.chow',
'jmva.bs',
'jmva.aql',...
137 'jmva.lin',
'jmva.dmlin'};
143 function
bool = isAvailable()
144 % BOOL = ISAVAILABLE()
148 jmt_path = jmtGetPath();
149 jmt_jar = fullfile(jmt_path, 'JMT.jar');
150 if ~exist(jmt_jar, 'file')
158 function featSupported = getFeatureSet()
159 % FEATSUPPORTED = GETFEATURESET()
161 featSupported = SolverFeatureSet;
162 featSupported.setTrue({
'Sink',...
191 'StatelessClassSwitcher',...
209 'SchedStrategy_INF',...
210 'SchedStrategy_PS',...
211 'SchedStrategy_DPS',...
212 'SchedStrategy_FCFS',...
213 'SchedStrategy_GPS',...
214 'SchedStrategy_SIRO',...
215 'SchedStrategy_HOL',...
216 'SchedStrategy_LCFS',...
217 'SchedStrategy_LCFSPR',...
218 'SchedStrategy_SEPT',...
219 'SchedStrategy_SRPT',...
220 'SchedStrategy_LEPT',...
221 'SchedStrategy_SJF',...
222 'SchedStrategy_LJF',...
223 'SchedStrategy_LPS',...
224 'SchedStrategy_POLLING',...
225 'RoutingStrategy_PROB',...
226 'RoutingStrategy_RAND',...
227 'RoutingStrategy_RROBIN',...
228 'RoutingStrategy_WRROBIN',...
229 'RoutingStrategy_KCHOICES',...
230 'SchedStrategy_EXT',...
231 'ClosedClass',
'SelfLoopingClass',...
233 'Cache',
'CacheClassSwitcher', ...
234 'ReplacementStrategy_RR',
'ReplacementStrategy_FIFO', ...
235 'ReplacementStrategy_SFIFO',
'ReplacementStrategy_LRU'});
238 function [bool, featSupported] = supports(model)
239 % [BOOL, FEATSUPPORTED] = SUPPORTS(MODEL)
241 featUsed = model.getUsedLangFeatures();
242 featSupported = SolverJMT.getFeatureSet();
243 bool = SolverFeatureSet.supports(featSupported, featUsed);
246 function jsimgOpen(filename)
247 % JSIMGOPEN(FILENAME)
249 [path] = fileparts(filename);
251 filename=[pwd,filesep,filename];
253 runtime = java.lang.Runtime.getRuntime();
254 cmd = ['java -cp "',jmtGetPath,filesep,'JMT.jar" jmt.commandline.Jmt jsimg "',filename,'"'];
259 function jsimwOpen(filename)
260 % JSIMWOPEN(FILENAME)
262 runtime = java.lang.Runtime.getRuntime();