LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
saveDelayOffStrategy.m
1function [simDoc, section] = saveDelayOffStrategy(self, simDoc, section, ind)
2% [SIMDOC, SECTION] = SAVEDELAYOFFSTRATEGY(SIMDOC, SECTION, NODEIDX)
3%
4% Saves delay-off and setup time strategies for Queue nodes.
5% This exports the delayOffTime and setUpTime parameters to JMT XML format
6% when the queue has delay-off times enabled.
7
8% Copyright (c) 2012-2026, Imperial College London
9% All rights reserved.
10
11sn = self.getStruct;
12K = sn.nclasses;
13currentNode = self.model.getNodes{ind};
14
15% Check if this node has delay-off enabled
16if ~isa(currentNode, 'Queue') || isempty(currentNode.setupTime) || isempty(currentNode.delayoffTime)
17 return;
18end
19
20% Check if any class has delay-off configured
21hasDelayOff = false;
22for r = 1:K
23 if r <= length(currentNode.setupTime) && ~isempty(currentNode.setupTime{r})
24 hasDelayOff = true;
25 break;
26 end
27end
28
29if ~hasDelayOff
30 return;
31end
32
33% Export delayOffTime parameter
34delayOffParamNode = simDoc.createElement('parameter');
35delayOffParamNode.setAttribute('array', 'true');
36delayOffParamNode.setAttribute('classPath', 'java.lang.Object');
37delayOffParamNode.setAttribute('name', 'delayOffTime');
38
39for r = 1:K
40 refClassNode = simDoc.createElement('refClass');
41 refClassNode.appendChild(simDoc.createTextNode(sn.classnames{r}));
42 delayOffParamNode.appendChild(refClassNode);
43
44 subParamNode = simDoc.createElement('subParameter');
45 subParamNode.setAttribute('classPath', 'jmt.engine.NetStrategies.ServiceStrategies.ServiceTimeStrategy');
46 subParamNode.setAttribute('name', 'delayOffTime');
47
48 if r <= length(currentNode.delayoffTime) && ~isempty(currentNode.delayoffTime{r})
49 dist = currentNode.delayoffTime{r};
50 subParamNode = appendDistributionXml(simDoc, subParamNode, dist);
51 else
52 % Zero time (Immediate)
53 subParamNode = appendZeroTimeXml(simDoc, subParamNode);
54 end
55
56 delayOffParamNode.appendChild(subParamNode);
57end
58section.appendChild(delayOffParamNode);
59
60% Export setUpTime parameter
61setupParamNode = simDoc.createElement('parameter');
62setupParamNode.setAttribute('array', 'true');
63setupParamNode.setAttribute('classPath', 'java.lang.Object');
64setupParamNode.setAttribute('name', 'setUpTime');
65
66for r = 1:K
67 refClassNode = simDoc.createElement('refClass');
68 refClassNode.appendChild(simDoc.createTextNode(sn.classnames{r}));
69 setupParamNode.appendChild(refClassNode);
70
71 subParamNode = simDoc.createElement('subParameter');
72 subParamNode.setAttribute('classPath', 'jmt.engine.NetStrategies.ServiceStrategies.ServiceTimeStrategy');
73 subParamNode.setAttribute('name', 'setUpTime');
74
75 if r <= length(currentNode.setupTime) && ~isempty(currentNode.setupTime{r})
76 dist = currentNode.setupTime{r};
77 subParamNode = appendDistributionXml(simDoc, subParamNode, dist);
78 else
79 % Zero time (Immediate)
80 subParamNode = appendZeroTimeXml(simDoc, subParamNode);
81 end
82
83 setupParamNode.appendChild(subParamNode);
84end
85section.appendChild(setupParamNode);
86
87end
88
89function parentNode = appendZeroTimeXml(simDoc, parentNode)
90% Append zero/immediate service time XML
91
92distributionNode = simDoc.createElement('subParameter');
93distributionNode.setAttribute('classPath', 'jmt.engine.random.DeterministicDistr');
94distributionNode.setAttribute('name', 'Deterministic');
95parentNode.appendChild(distributionNode);
96
97distrParNode = simDoc.createElement('subParameter');
98distrParNode.setAttribute('classPath', 'jmt.engine.random.DeterministicDistrPar');
99distrParNode.setAttribute('name', 'distrPar');
100
101tNode = simDoc.createElement('subParameter');
102tNode.setAttribute('classPath', 'java.lang.Double');
103tNode.setAttribute('name', 't');
104tValue = simDoc.createElement('value');
105tValue.appendChild(simDoc.createTextNode('0.0'));
106tNode.appendChild(tValue);
107distrParNode.appendChild(tNode);
108parentNode.appendChild(distrParNode);
109
110end
111
112function parentNode = appendDistributionXml(simDoc, parentNode, dist)
113% Append distribution XML elements to a parent node for JMT export
114% Supports Exp, Erlang, Det, and Immediate distributions
115
116if isa(dist, 'Immediate')
117 % Zero/Immediate service time
118 parentNode = appendZeroTimeXml(simDoc, parentNode);
119
120elseif isa(dist, 'Exp')
121 distributionNode = simDoc.createElement('subParameter');
122 distributionNode.setAttribute('classPath', 'jmt.engine.random.Exponential');
123 distributionNode.setAttribute('name', 'Exponential');
124 parentNode.appendChild(distributionNode);
125
126 distrParNode = simDoc.createElement('subParameter');
127 distrParNode.setAttribute('classPath', 'jmt.engine.random.ExponentialPar');
128 distrParNode.setAttribute('name', 'distrPar');
129
130 lambdaNode = simDoc.createElement('subParameter');
131 lambdaNode.setAttribute('classPath', 'java.lang.Double');
132 lambdaNode.setAttribute('name', 'lambda');
133 lambdaValue = simDoc.createElement('value');
134 lambdaValue.appendChild(simDoc.createTextNode(sprintf('%.12f', dist.getRate())));
135 lambdaNode.appendChild(lambdaValue);
136 distrParNode.appendChild(lambdaNode);
137 parentNode.appendChild(distrParNode);
138
139elseif isa(dist, 'Erlang')
140 distributionNode = simDoc.createElement('subParameter');
141 distributionNode.setAttribute('classPath', 'jmt.engine.random.Erlang');
142 distributionNode.setAttribute('name', 'Erlang');
143 parentNode.appendChild(distributionNode);
144
145 distrParNode = simDoc.createElement('subParameter');
146 distrParNode.setAttribute('classPath', 'jmt.engine.random.ErlangPar');
147 distrParNode.setAttribute('name', 'distrPar');
148
149 alphaNode = simDoc.createElement('subParameter');
150 alphaNode.setAttribute('classPath', 'java.lang.Double');
151 alphaNode.setAttribute('name', 'alpha');
152 alphaValue = simDoc.createElement('value');
153 meanVal = dist.getMean();
154 phases = dist.getNumberOfPhases();
155 alpha = phases / meanVal;
156 alphaValue.appendChild(simDoc.createTextNode(sprintf('%.12f', alpha)));
157 alphaNode.appendChild(alphaValue);
158 distrParNode.appendChild(alphaNode);
159
160 rNode = simDoc.createElement('subParameter');
161 rNode.setAttribute('classPath', 'java.lang.Long');
162 rNode.setAttribute('name', 'r');
163 rValue = simDoc.createElement('value');
164 rValue.appendChild(simDoc.createTextNode(sprintf('%d', phases)));
165 rNode.appendChild(rValue);
166 distrParNode.appendChild(rNode);
167 parentNode.appendChild(distrParNode);
168
169elseif isa(dist, 'Det')
170 distributionNode = simDoc.createElement('subParameter');
171 distributionNode.setAttribute('classPath', 'jmt.engine.random.DeterministicDistr');
172 distributionNode.setAttribute('name', 'Deterministic');
173 parentNode.appendChild(distributionNode);
174
175 distrParNode = simDoc.createElement('subParameter');
176 distrParNode.setAttribute('classPath', 'jmt.engine.random.DeterministicDistrPar');
177 distrParNode.setAttribute('name', 'distrPar');
178
179 tNode = simDoc.createElement('subParameter');
180 tNode.setAttribute('classPath', 'java.lang.Double');
181 tNode.setAttribute('name', 't');
182 tValue = simDoc.createElement('value');
183 tValue.appendChild(simDoc.createTextNode(sprintf('%.12f', dist.getMean())));
184 tNode.appendChild(tValue);
185 distrParNode.appendChild(tNode);
186 parentNode.appendChild(distrParNode);
187
188else
189 % Default fallback: use mean as deterministic value
190 distributionNode = simDoc.createElement('subParameter');
191 distributionNode.setAttribute('classPath', 'jmt.engine.random.DeterministicDistr');
192 distributionNode.setAttribute('name', 'Deterministic');
193 parentNode.appendChild(distributionNode);
194
195 distrParNode = simDoc.createElement('subParameter');
196 distrParNode.setAttribute('classPath', 'jmt.engine.random.DeterministicDistrPar');
197 distrParNode.setAttribute('name', 'distrPar');
198
199 tNode = simDoc.createElement('subParameter');
200 tNode.setAttribute('classPath', 'java.lang.Double');
201 tNode.setAttribute('name', 't');
202 tValue = simDoc.createElement('value');
203 tValue.appendChild(simDoc.createTextNode(sprintf('%.12f', dist.getMean())));
204 tNode.appendChild(tValue);
205 distrParNode.appendChild(tNode);
206 parentNode.appendChild(distrParNode);
207end
208
209end
Definition mmt.m:92