LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
refreshRates.m
1function [rates, scv, hasRateChanged, hasSCVChanged] = refreshRates(self, statSet, classSet)
2% [RATES, SCV] = REFRESHRATES()
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7hasRateChanged = false;
8hasSCVChanged = false;
9M = getNumberOfStations(self);
10K = getNumberOfClasses(self);
11if nargin<2
12 statSet = 1:M;
13 classSet = 1:K;
14 rates = zeros(M,K);
15 scv = nan(M,K);
16 hasRateChanged = true;
17 hasSCVChanged = true;
18elseif nargin==2
19 classSet = 1:K;
20 if isempty(self.sn) || isempty(self.sn.rates)
21 rates = zeros(M,K);
22 scv = nan(M,K);
23 hasRateChanged = true;
24 hasSCVChanged = true;
25 else
26 rates = self.sn.rates;
27 scv = self.sn.scv;
28 rates_orig = self.sn.rates;
29 scv_orig = self.sn.scv;
30 end
31elseif nargin==3 % this is used only to update self.sn
32 % we are only updating selected stations and classes so use the
33 % existing ones for the others
34 rates = self.sn.rates;
35 scv = self.sn.scv;
36 rates_orig = self.sn.rates;
37 scv_orig = self.sn.scv;
38end
39hasOpenClasses = self.hasOpenClasses;
40
41stations = self.stations;
42% determine rates
43for i=statSet
44 station_i = stations{i};
45 for r=classSet
46 switch station_i.server.className
47 case 'ServiceTunnel'
48 % do nothing
49 switch class(station_i)
50 case 'Source'
51 if isempty(station_i.input.sourceClasses{r})
52 rates(i,r) = NaN;
53 scv(i,r) = NaN;
54 else
55 distr = station_i.input.sourceClasses{r}{end};
56 rates(i,r) = distr.getRate();
57 scv(i,r) = distr.getSCV();
58 end
59 case 'Join'
60 rates(i,r) = Inf;
61 scv(i,r) = 0;
62 case 'Place'
63 rates(i,r) = NaN;
64 scv(i,r) = NaN;
65 %Draft SPN code:
66 %rates(i,r) = 1;
67 %scv(i,r) = 0;
68 end
69 otherwise
70 if ~hasOpenClasses || i ~= self.getIndexSourceStation
71 if isempty(station_i.server.serviceProcess{r})
72 rates(i,r) = NaN;
73 scv(i,r) = NaN;
74 else
75 distr = station_i.server.serviceProcess{r}{end};
76 rates(i,r) = distr.getRate();
77 scv(i,r) = distr.getSCV();
78 end
79 end
80 end
81 end
82end
83
84if ~hasRateChanged
85 if any((abs(rates-rates_orig)>0))
86 hasRateChanged = true;
87 end
88end
89
90if ~hasSCVChanged
91 if any((abs(scv-scv_orig)>0))
92 hasSCVChanged = true;
93 end
94end
95
96%if ~isempty(self.sn)
97 if hasRateChanged
98 self.sn.rates = rates;
99 end
100 if hasSCVChanged
101 self.sn.scv = scv;
102 end
103%end
104
105end