LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
saveArrivalStrategy.m
1function [simDoc, section] = saveArrivalStrategy(self, simDoc, section, ind)
2% [SIMDOC, SECTION] = SAVEARRIVALSTRATEGY(SIMDOC, SECTION, CURRENTNODE)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6strategyNode = simDoc.createElement('parameter');
7strategyNode.setAttribute('array', 'true');
8strategyNode.setAttribute('classPath', 'jmt.engine.NetStrategies.ServiceStrategy');
9strategyNode.setAttribute('name', 'ServiceStrategy');
10
11sn = self.getStruct;
12
13% Get exportable classes (handles cache classes and class-switching)
14exportClasses = self.getExportableClasses();
15
16numOfClasses = sn.nclasses;
17i = sn.nodeToStation(ind);
18for r=1:numOfClasses
19 % Skip classes that should not be exported to JMT
20 if ~exportClasses(r)
21 continue;
22 end
23
24 if isfinite(sn.njobs(r)) %closed
25 refClassNode2 = simDoc.createElement('refClass');
26 refClassNode2.appendChild(simDoc.createTextNode(sn.classnames{r}));
27 strategyNode.appendChild(refClassNode2);
28 serviceTimeStrategyNode = simDoc.createElement('subParameter');
29 serviceTimeStrategyNode.setAttribute('classPath', 'jmt.engine.NetStrategies.ServiceStrategies.ServiceTimeStrategy');
30 serviceTimeStrategyNode.setAttribute('name', 'ServiceTimeStrategy');
31 subParValue = simDoc.createElement('value');
32 subParValue.appendChild(simDoc.createTextNode('null'));
33 serviceTimeStrategyNode.appendChild(subParValue);
34 strategyNode.appendChild(serviceTimeStrategyNode);
35 section.appendChild(strategyNode);
36 else % open
37 refClassNode2 = simDoc.createElement('refClass');
38 refClassNode2.appendChild(simDoc.createTextNode(sn.classnames{r}));
39 strategyNode.appendChild(refClassNode2);
40 serviceTimeStrategyNode = simDoc.createElement('subParameter');
41 serviceTimeStrategyNode.setAttribute('classPath', 'jmt.engine.NetStrategies.ServiceStrategies.ServiceTimeStrategy');
42 serviceTimeStrategyNode.setAttribute('name', 'ServiceTimeStrategy');
43 if sn.procid(i,r) == ProcessType.DISABLED
44 subParValue = simDoc.createElement('value');
45 subParValue.appendChild(simDoc.createTextNode('null'));
46 serviceTimeStrategyNode.appendChild(subParValue);
47 elseif sn.procid(i,r) == ProcessType.IMMEDIATE
48 serviceTimeStrategyNode.setAttribute('classPath', 'jmt.engine.NetStrategies.ServiceStrategies.ZeroServiceTimeStrategy');
49 serviceTimeStrategyNode.setAttribute('name', 'ZeroServiceTimeStrategy');
50 elseif sn.procid(i,r) == ProcessType.PH || sn.procid(i,r) == ProcessType.APH || sn.procid(i,r) == ProcessType.COXIAN || (sn.phases(i,r)>2 && sn.procid(i,r) == ProcessType.HYPEREXP) %|| (sn.phases(i,r)>2 && sn.procid(i,r) == ProcessType.COXIAN) || (sn.phases(i,r)>2 && sn.procid(i,r) == ProcessType.HYPEREXP)
51 distributionNode = simDoc.createElement('subParameter');
52 distributionNode.setAttribute('classPath', 'jmt.engine.random.PhaseTypeDistr');
53 distributionNode.setAttribute('name', 'Phase-Type');
54 distrParNode = simDoc.createElement('subParameter');
55 distrParNode.setAttribute('classPath', 'jmt.engine.random.PhaseTypePar');
56 distrParNode.setAttribute('name', 'distrPar');
57
58 subParNodeAlpha = simDoc.createElement('subParameter');
59 subParNodeAlpha.setAttribute('array', 'true');
60 subParNodeAlpha.setAttribute('classPath', 'java.lang.Object');
61 subParNodeAlpha.setAttribute('name', 'alpha');
62 subParNodeAlphaVec = simDoc.createElement('subParameter');
63 subParNodeAlphaVec.setAttribute('array', 'true');
64 subParNodeAlphaVec.setAttribute('classPath', 'java.lang.Object');
65 subParNodeAlphaVec.setAttribute('name', 'vector');
66 PH = sn.proc{i}{r};
67 alpha = abs(sn.pie{i}{r});
68 for k=1:sn.phases(i,r)
69 subParNodeAlphaElem = simDoc.createElement('subParameter');
70 subParNodeAlphaElem.setAttribute('classPath', 'java.lang.Double');
71 subParNodeAlphaElem.setAttribute('name', 'entry');
72 subParValue = simDoc.createElement('value');
73 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',alpha(k))));
74 subParNodeAlphaElem.appendChild(subParValue);
75 subParNodeAlphaVec.appendChild(subParNodeAlphaElem);
76 end
77
78 subParNodeT = simDoc.createElement('subParameter');
79 subParNodeT.setAttribute('array', 'true');
80 subParNodeT.setAttribute('classPath', 'java.lang.Object');
81 subParNodeT.setAttribute('name', 'T');
82 T = PH{1};
83 for k=1:sn.phases(i,r)
84 subParNodeTvec = simDoc.createElement('subParameter');
85 subParNodeTvec.setAttribute('array', 'true');
86 subParNodeTvec.setAttribute('classPath', 'java.lang.Object');
87 subParNodeTvec.setAttribute('name', 'vector');
88 for j=1:sn.phases(i,r)
89 subParNodeTElem = simDoc.createElement('subParameter');
90 subParNodeTElem.setAttribute('classPath', 'java.lang.Double');
91 subParNodeTElem.setAttribute('name', 'entry');
92 subParValue = simDoc.createElement('value');
93 if k==j
94 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',-abs(T(k,j)))));
95 else
96 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',abs(T(k,j)))));
97 end
98 subParNodeTElem.appendChild(subParValue);
99 subParNodeTvec.appendChild(subParNodeTElem);
100 end
101 subParNodeT.appendChild(subParNodeTvec);
102 end
103
104 subParNodeAlpha.appendChild(subParNodeAlphaVec);
105 distrParNode.appendChild(subParNodeAlpha);
106 distrParNode.appendChild(subParNodeT);
107 serviceTimeStrategyNode.appendChild(distributionNode);
108 serviceTimeStrategyNode.appendChild(distrParNode);
109 elseif sn.procid(i,r) == ProcessType.MAP || sn.procid(i,r) == ProcessType.MMPP2
110 distributionNode = simDoc.createElement('subParameter');
111 distributionNode.setAttribute('classPath', 'jmt.engine.random.MAPDistr');
112 distributionNode.setAttribute('name', 'Burst (MAP)');
113 distrParNode = simDoc.createElement('subParameter');
114 distrParNode.setAttribute('classPath', 'jmt.engine.random.MAPPar');
115 distrParNode.setAttribute('name', 'distrPar');
116
117 MAP = sn.proc{i}{r};
118
119 subParNodeD0 = simDoc.createElement('subParameter');
120 subParNodeD0.setAttribute('array', 'true');
121 subParNodeD0.setAttribute('classPath', 'java.lang.Object');
122 subParNodeD0.setAttribute('name', 'D0');
123 D0 = MAP{1};
124 for k=1:sn.phases(i,r)
125 subParNodeD0vec = simDoc.createElement('subParameter');
126 subParNodeD0vec.setAttribute('array', 'true');
127 subParNodeD0vec.setAttribute('classPath', 'java.lang.Object');
128 subParNodeD0vec.setAttribute('name', 'vector');
129 for j=1:sn.phases(i,r)
130 subParNodeD0Elem = simDoc.createElement('subParameter');
131 subParNodeD0Elem.setAttribute('classPath', 'java.lang.Double');
132 subParNodeD0Elem.setAttribute('name', 'entry');
133 subParValue = simDoc.createElement('value');
134 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',D0(k,j))));
135 subParNodeD0Elem.appendChild(subParValue);
136 subParNodeD0vec.appendChild(subParNodeD0Elem);
137 end
138 subParNodeD0.appendChild(subParNodeD0vec);
139 end
140 distrParNode.appendChild(subParNodeD0);
141
142 subParNodeD1 = simDoc.createElement('subParameter');
143 subParNodeD1.setAttribute('array', 'true');
144 subParNodeD1.setAttribute('classPath', 'java.lang.Object');
145 subParNodeD1.setAttribute('name', 'D1');
146 D1 = MAP{2};
147 for k=1:sn.phases(i,r)
148 subParNodeD1vec = simDoc.createElement('subParameter');
149 subParNodeD1vec.setAttribute('array', 'true');
150 subParNodeD1vec.setAttribute('classPath', 'java.lang.Object');
151 subParNodeD1vec.setAttribute('name', 'vector');
152 for j=1:sn.phases(i,r)
153 subParNodeD1Elem = simDoc.createElement('subParameter');
154 subParNodeD1Elem.setAttribute('classPath', 'java.lang.Double');
155 subParNodeD1Elem.setAttribute('name', 'entry');
156 subParValue = simDoc.createElement('value');
157 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',D1(k,j))));
158 subParNodeD1Elem.appendChild(subParValue);
159 subParNodeD1vec.appendChild(subParNodeD1Elem);
160 end
161 subParNodeD1.appendChild(subParNodeD1vec);
162 end
163 distrParNode.appendChild(subParNodeD1);
164 serviceTimeStrategyNode.appendChild(distributionNode);
165 serviceTimeStrategyNode.appendChild(distrParNode);
166 else
167 distributionNode = simDoc.createElement('subParameter');
168 switch sn.procid(i,r)
169 case ProcessType.DET
170 javaClass = 'jmt.engine.random.DeterministicDistr';
171 javaParClass = 'jmt.engine.random.DeterministicDistrPar';
172 case ProcessType.COXIAN
173 javaClass = 'jmt.engine.random.CoxianDistr';
174 javaParClass = 'jmt.engine.random.CoxianPar';
175 case ProcessType.ERLANG
176 javaClass = 'jmt.engine.random.Erlang';
177 javaParClass = 'jmt.engine.random.ErlangPar';
178 case ProcessType.EXP
179 javaClass = 'jmt.engine.random.Exponential';
180 javaParClass = 'jmt.engine.random.ExponentialPar';
181 case ProcessType.GAMMA
182 javaClass = 'jmt.engine.random.GammaDistr';
183 javaParClass = 'jmt.engine.random.GammaDistrPar';
184 case ProcessType.HYPEREXP
185 javaClass = 'jmt.engine.random.HyperExp';
186 javaParClass = 'jmt.engine.random.HyperExpPar';
187 case ProcessType.PARETO
188 javaClass = 'jmt.engine.random.Pareto';
189 javaParClass = 'jmt.engine.random.ParetoPar';
190 case ProcessType.WEIBULL
191 javaClass = 'jmt.engine.random.Weibull';
192 javaParClass = 'jmt.engine.random.WeibullPar';
193 case ProcessType.LOGNORMAL
194 javaClass = 'jmt.engine.random.Lognormal';
195 javaParClass = 'jmt.engine.random.LognormalPar';
196 case ProcessType.UNIFORM
197 javaClass = 'jmt.engine.random.Uniform';
198 javaParClass = 'jmt.engine.random.UniformPar';
199 case ProcessType.MMPP2
200 javaClass = 'jmt.engine.random.MMPP2Distr';
201 javaParClass = 'jmt.engine.random.MMPP2Par';
202 case {ProcessType.REPLAYER, ProcessType.TRACE}
203 javaClass = 'jmt.engine.random.Replayer';
204 javaParClass = 'jmt.engine.random.ReplayerPar';
205 end
206 distributionNode.setAttribute('classPath', javaClass);
207 switch sn.procid(i,r)
208 case {ProcessType.REPLAYER, ProcessType.TRACE}
209 distributionNode.setAttribute('name', 'Replayer');
210 case ProcessType.EXP
211 distributionNode.setAttribute('name', 'Exponential');
212 case ProcessType.HYPEREXP
213 distributionNode.setAttribute('name', 'Hyperexponential');
214 otherwise
215 distributionNode.setAttribute('name', ProcessType.toText(ProcessType.fromId(sn.procid(i,r))));
216 end
217 serviceTimeStrategyNode.appendChild(distributionNode);
218
219 distrParNode = simDoc.createElement('subParameter');
220 distrParNode.setAttribute('classPath', javaParClass);
221 distrParNode.setAttribute('name', 'distrPar');
222
223 switch sn.procid(i,r)
224 case ProcessType.DET
225 subParNodeAlpha = simDoc.createElement('subParameter');
226 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
227 subParNodeAlpha.setAttribute('name', 't');
228 subParValue = simDoc.createElement('value');
229 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',1/sn.rates(i,r))));
230 subParNodeAlpha.appendChild(subParValue);
231 distrParNode.appendChild(subParNodeAlpha);
232 case ProcessType.EXP
233 subParNodeAlpha = simDoc.createElement('subParameter');
234 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
235 subParNodeAlpha.setAttribute('name', 'lambda');
236 subParValue = simDoc.createElement('value');
237 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',sn.rates(i,r))));
238 subParNodeAlpha.appendChild(subParValue);
239 distrParNode.appendChild(subParNodeAlpha);
240 case ProcessType.HYPEREXP
241 subParNodeAlpha = simDoc.createElement('subParameter');
242 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
243 subParNodeAlpha.setAttribute('name', 'p');
244 subParValue = simDoc.createElement('value');
245 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',sn.pie{i}{r}(1))));
246 subParNodeAlpha.appendChild(subParValue);
247 distrParNode.appendChild(subParNodeAlpha);
248 subParNodeAlpha = simDoc.createElement('subParameter');
249 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
250 subParNodeAlpha.setAttribute('name', 'lambda1');
251 subParValue = simDoc.createElement('value');
252 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',-sn.proc{i}{r}{1}(1,1))));
253 subParNodeAlpha.appendChild(subParValue);
254 distrParNode.appendChild(subParNodeAlpha);
255 subParNodeAlpha = simDoc.createElement('subParameter');
256 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
257 subParNodeAlpha.setAttribute('name', 'lambda2');
258 subParValue = simDoc.createElement('value');
259 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',-sn.proc{i}{r}{1}(2,2))));
260 subParNodeAlpha.appendChild(subParValue);
261 distrParNode.appendChild(subParNodeAlpha);
262 case ProcessType.ERLANG
263 subParNodeAlpha = simDoc.createElement('subParameter');
264 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
265 subParNodeAlpha.setAttribute('name', 'alpha');
266 subParValue = simDoc.createElement('value');
267 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',sn.rates(i,r)*sn.phases(i,r))));
268 subParNodeAlpha.appendChild(subParValue);
269 distrParNode.appendChild(subParNodeAlpha);
270 subParNodeAlpha = simDoc.createElement('subParameter');
271 subParNodeAlpha.setAttribute('classPath', 'java.lang.Long');
272 subParNodeAlpha.setAttribute('name', 'r');
273 subParValue = simDoc.createElement('value');
274 subParValue.appendChild(simDoc.createTextNode(sprintf('%d',sn.phases(i,r))));
275 subParNodeAlpha.appendChild(subParValue);
276 distrParNode.appendChild(subParNodeAlpha);
277 case ProcessType.GAMMA
278 subParNodeAlpha = simDoc.createElement('subParameter');
279 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
280 subParNodeAlpha.setAttribute('name', 'alpha');
281 subParValue = simDoc.createElement('value');
282 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',1/sn.scv(i,r))));
283 subParNodeAlpha.appendChild(subParValue);
284 distrParNode.appendChild(subParNodeAlpha);
285 subParNodeAlpha = simDoc.createElement('subParameter');
286 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
287 subParNodeAlpha.setAttribute('name', 'beta');
288 subParValue = simDoc.createElement('value');
289 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',sn.scv(i,r)/sn.rates(i,r))));
290 subParNodeAlpha.appendChild(subParValue);
291 distrParNode.appendChild(subParNodeAlpha);
292 case ProcessType.PARETO
293 shape = sqrt(1+1/sn.scv(i,r))+1;
294 scale = 1/sn.rates(i,r) * (shape - 1) / shape;
295 subParNodeAlpha = simDoc.createElement('subParameter');
296 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
297 subParNodeAlpha.setAttribute('name', 'alpha'); % shape
298 subParValue = simDoc.createElement('value');
299 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',shape)));
300 subParNodeAlpha.appendChild(subParValue);
301 distrParNode.appendChild(subParNodeAlpha);
302 subParNodeAlpha = simDoc.createElement('subParameter');
303 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
304 subParNodeAlpha.setAttribute('name', 'k'); % scale
305 subParValue = simDoc.createElement('value');
306 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',scale)));
307 subParNodeAlpha.appendChild(subParValue);
308 distrParNode.appendChild(subParNodeAlpha);
309 case ProcessType.WEIBULL
310 c = sqrt(sn.scv(i,r));
311 rval = c^(-1.086); % Justus approximation (1976)
312 alpha = 1/sn.rates(i,r) / gamma(1+1/rval);
313 subParNodeAlpha = simDoc.createElement('subParameter');
314 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
315 subParNodeAlpha.setAttribute('name', 'alpha'); % shape
316 subParValue = simDoc.createElement('value');
317 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',alpha)));
318 subParNodeAlpha.appendChild(subParValue);
319 distrParNode.appendChild(subParNodeAlpha);
320 subParNodeAlpha = simDoc.createElement('subParameter');
321 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
322 subParNodeAlpha.setAttribute('name', 'r'); % scale
323 subParValue = simDoc.createElement('value');
324 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',rval)));
325 subParNodeAlpha.appendChild(subParValue);
326 distrParNode.appendChild(subParNodeAlpha);
327 case ProcessType.LOGNORMAL
328 c = sqrt(sn.scv(i,r));
329 mu = log(1/sn.rates(i,r) / sqrt(c*c + 1));
330 sigma = sqrt(log(c*c + 1));
331 subParNodeAlpha = simDoc.createElement('subParameter');
332 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
333 subParNodeAlpha.setAttribute('name', 'mu'); % shape
334 subParValue = simDoc.createElement('value');
335 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',mu)));
336 subParNodeAlpha.appendChild(subParValue);
337 distrParNode.appendChild(subParNodeAlpha);
338 subParNodeAlpha = simDoc.createElement('subParameter');
339 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
340 subParNodeAlpha.setAttribute('name', 'sigma'); % scale
341 subParValue = simDoc.createElement('value');
342 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',sigma)));
343 subParNodeAlpha.appendChild(subParValue);
344 distrParNode.appendChild(subParNodeAlpha);
345 case ProcessType.UNIFORM
346 maxVal = ((sqrt(12*sn.scv(i,r)/sn.rates(i,r)^2))+2/sn.rates(i,r))/2;
347 minVal = 2/sn.rates(i,r)-maxVal;
348 subParNodeAlpha = simDoc.createElement('subParameter');
349 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
350 subParNodeAlpha.setAttribute('name', 'min'); % shape
351 subParValue = simDoc.createElement('value');
352 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',minVal)));
353 subParNodeAlpha.appendChild(subParValue);
354 distrParNode.appendChild(subParNodeAlpha);
355 subParNodeAlpha = simDoc.createElement('subParameter');
356 subParNodeAlpha.setAttribute('classPath', 'java.lang.Double');
357 subParNodeAlpha.setAttribute('name', 'max'); % scale
358 subParValue = simDoc.createElement('value');
359 subParValue.appendChild(simDoc.createTextNode(sprintf('%.12f',maxVal)));
360 subParNodeAlpha.appendChild(subParValue);
361 distrParNode.appendChild(subParNodeAlpha);
362 case {ProcessType.REPLAYER, ProcessType.TRACE}
363 subParNodeAlpha = simDoc.createElement('subParameter');
364 subParNodeAlpha.setAttribute('classPath', 'java.lang.String');
365 subParNodeAlpha.setAttribute('name', 'fileName');
366 subParValue = simDoc.createElement('value');
367 subParValue.appendChild(simDoc.createTextNode(sn.nodeparam{ind}{r}.fileName));
368 subParNodeAlpha.appendChild(subParValue);
369 distrParNode.appendChild(subParNodeAlpha);
370 end
371 serviceTimeStrategyNode.appendChild(distrParNode);
372 end
373 strategyNode.appendChild(serviceTimeStrategyNode);
374 section.appendChild(strategyNode);
375 end
376end
377end