LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
getAvgHandles.m
1function [Q,U,R,T,A,W] = getAvgHandles(self)
2% [Q,U,R,T,A,W] = GETAVGHANDLES()
3% Get handles for mean performance metrics.
4%
5% Q(i,r): mean queue-length of class r at node i
6% U(i,r): mean utilization of class r at node i
7% R(i,r): mean response time of class r at node i (summed across visits)
8% T(i,r): mean throughput of class r at node i
9% A(i,r): mean arrival rate of class r at node i
10% W(i,r): mean residence time of class r at node i
11%
12% For tardiness metrics, use getAvgTrdnHandles() and getAvgSysTrdnHandles()
13
14% Copyright (c) 2012-2026, Imperial College London
15% All rights reserved.
16% Q = self.getAvgQLenHandles;
17% U = self.getAvgUtilHandles;
18% R = self.getAvgRespTHandles;
19% T = self.getAvgTputHandles;
20% A = self.getAvgArvRHandles;
21% W = self.getAvgResidTHandles;
22
23M = getNumberOfStations(self);
24K = getNumberOfClasses(self);
25classes = self.classes;
26stations = self.stations;
27
28isSource = false(M,1);
29isSink = false(M,1);
30hasServiceTunnel = false(M,1);
31isServiceDefined = true(M,K);
32for ist=1:M
33 isSource(ist) = isa(stations{ist},'Source');
34 isSink(ist) = isa(stations{ist},'Sink');
35 hasServiceTunnel(ist) = strcmpi(class(stations{ist}.server),'ServiceTunnel');
36 if ~hasServiceTunnel(ist)
37 for r=1:K
38 if isempty(stations{ist}.server.serviceProcess{r}) || stations{ist}.server.serviceProcess{r}{end}.isDisabled()
39 isServiceDefined(ist,r) = false;
40 end
41 end
42 end
43end
44
45if isempty(self.handles) || ~isfield(self.handles,'Q')
46 Q = cell(M,K); % queue-length
47 for ist=1:M
48 for r=1:K
49 Qir = Metric(MetricType.QLen, classes{r}, stations{ist});
50 if isSource(ist)
51 Qir.disabled = true;
52 end
53 if isSink(ist)
54 Qir.disabled = true;
55 end
56 if ~hasServiceTunnel(ist)
57 if ~isServiceDefined(ist,r)
58 Qir.disabled = true;
59 end
60 end
61 Q{ist,r} = Qir;
62 end
63 end
64 self.handles.Q = Q;
65else
66 Q = self.handles.Q;
67end
68
69if isempty(self.handles) || ~isfield(self.handles,'U')
70 M = getNumberOfStations(self);
71 K = getNumberOfClasses(self);
72
73 U = cell(M,1); % utilizations
74 for ist=1:M
75 for r=1:K
76 Uir = Metric(MetricType.Util, classes{r}, stations{ist});
77 if isSource(ist)
78 Uir.disabled = true;
79 end
80 if isSink(ist)
81 Uir.disabled = true;
82 end
83 if isa(stations{ist},'Join') || isa(stations{ist},'Fork')
84 Uir.disabled = true;
85 end
86 if ~hasServiceTunnel(ist)
87 if ~isServiceDefined(ist,r)
88 Uir.disabled = true;
89 end
90 end
91 U{ist,r} = Uir;
92 end
93 end
94 self.handles.U = U;
95else
96 U = self.handles.U;
97end
98
99if isempty(self.handles) || ~isfield(self.handles,'R')
100 M = getNumberOfStations(self);
101 K = getNumberOfClasses(self);
102
103 R = cell(M,K); % response times
104 for ist=1:M
105 for r=1:K
106 Rir = Metric(MetricType.RespT, classes{r}, stations{ist});
107 if isSource(ist)
108 Rir.disabled = true;
109 end
110 if isSink(ist)
111 Rir.disabled = true;
112 end
113 if ~hasServiceTunnel(ist)
114 if ~isServiceDefined(ist,r)
115 Rir.disabled = true;
116 end
117 end
118 R{ist,r} = Rir;
119 end
120 end
121 self.handles.R = R;
122else
123 R = self.handles.R;
124end
125
126if isempty(self.handles) || ~isfield(self.handles,'W')
127 M = getNumberOfStations(self);
128 K = getNumberOfClasses(self);
129
130 W = cell(M,K); % response times
131 for ist=1:M
132 for r=1:K
133 Wir = Metric(MetricType.ResidT, classes{r}, stations{ist});
134 if isSource(ist)
135 Wir.disabled = true;
136 end
137 if isSink(ist)
138 Wir.disabled = true;
139 end
140 if ~hasServiceTunnel(ist)
141 if ~isServiceDefined(ist,r)
142 Wir.disabled = true;
143 end
144 end
145 W{ist,r} = Wir;
146 end
147 end
148 self.handles.W = W;
149else
150 W = self.handles.W;
151end
152
153
154if isempty(self.handles) || ~isfield(self.handles,'T')
155 M = getNumberOfStations(self);
156 K = getNumberOfClasses(self);
157
158 T = cell(1,K); % throughputs
159 for ist=1:M
160 for r=1:K
161 Tir = Metric(MetricType.Tput, classes{r}, stations{ist});
162 if ~hasServiceTunnel(ist)
163 if ~isServiceDefined(ist,r)
164 Tir.disabled = true;
165 end
166 end
167 T{ist,r} = Tir;
168 end
169 end
170 self.handles.T = T;
171else
172 T = self.handles.T;
173end
174
175if isempty(self.handles) || ~isfield(self.handles,'A')
176 M = getNumberOfStations(self);
177 K = getNumberOfClasses(self);
178
179 A = cell(1,K); % arrival rate
180 for ist=1:M
181 for r=1:K
182 Air = Metric(MetricType.ArvR, classes{r}, stations{ist});
183 if ~hasServiceTunnel(ist)
184 if ~isServiceDefined(ist,r)
185 Air.disabled = true;
186 end
187 end
188 A{ist,r} = Air;
189 end
190 end
191 self.handles.A = A;
192else
193 A = self.handles.A;
194end
195
196if isempty(self.handles) || ~isfield(self.handles,'Trdn')
197 M = getNumberOfStations(self);
198 K = getNumberOfClasses(self);
199
200 Trdn = cell(M,K); % tardiness
201 for ist=1:M
202 for r=1:K
203 Trdnir = Metric(MetricType.Trdn, classes{r}, stations{ist});
204 if isSource(ist)
205 Trdnir.disabled = true;
206 end
207 if ~hasServiceTunnel(ist)
208 if ~isServiceDefined(ist,r)
209 Trdnir.disabled = true;
210 end
211 end
212 Trdn{ist,r} = Trdnir;
213 end
214 end
215 self.handles.Trdn = Trdn;
216else
217 Trdn = self.handles.Trdn;
218end
219
220if isempty(self.handles) || ~isfield(self.handles,'SysTrdn')
221 M = getNumberOfStations(self);
222 K = getNumberOfClasses(self);
223
224 SysTrdn = cell(1,K); % system tardiness
225 for r=1:K
226 SysTrdnr = Metric(MetricType.SysTrdn, classes{r}, []);
227 SysTrdn{1,r} = SysTrdnr;
228 end
229 self.handles.SysTrdn = SysTrdn;
230else
231 SysTrdn = self.handles.SysTrdn;
232end
233
234end