1%{ @file sn_get_demands_chain.m
2 % @brief Computes aggregated demand parameters per chain
4 % @author LINE Development Team
8 % @brief Computes aggregated demand parameters per chain
11 % This function aggregates
class-level service demands and related parameters
12 % to chain-level parameters, computing total demands, service times,
visits,
13 % and aggregation factors.
17 % [Lchain,STchain,Vchain,alpha,Nchain,SCVchain,refstatchain] = sn_get_demands_chain(sn)
22 % <tr><th>Name<th>Description
23 % <tr><td>sn<td>Network structure
28 % <tr><th>Name<th>Description
29 % <tr><td>Lchain<td>Total service demand per station per chain
30 % <tr><td>STchain<td>Mean service time per station per chain
31 % <tr><td>Vchain<td>Mean number of
visits per station per chain
32 % <tr><td>alpha<td>Aggregation factors mapping
classes to chains
33 % <tr><td>Nchain<td>Population of each chain
34 % <tr><td>SCVchain<td>Squared coefficient of variation of service times per station per chain
35 % <tr><td>refstatchain<td>Reference station index
for each chain
38function [Lchain,STchain,Vchain,alpha,Nchain,SCVchain,refstatchain] = sn_get_demands_chain(sn)
39M = sn.nstations; %number of stations
40%K = sn.nclasses; %number of
classes
42N = sn.njobs
'; % initial population per class
47% determine service times
51alpha = zeros(sn.nstations,sn.nclasses);
52Vchain = zeros(sn.nstations,sn.nchains);
54 inchain = sn.inchain{c};
55 if sn.refclass(c)>0 % if the model has a ref class
57 Vchain(i,c) = sum(sn.visits{c}(sn.stationToStateful(i),inchain)) / sum(sn.visits{c}(sn.stationToStateful(sn.refstat(inchain(1))),sn.refclass(c)));
59 alpha(i,k) = alpha(i,k) + sn.visits{c}(sn.stationToStateful(i),k) / sum(sn.visits{c}(sn.stationToStateful(i),inchain));
64 Vchain(i,c) = sum(sn.visits{c}(sn.stationToStateful(i),inchain)) / sum(sn.visits{c}(sn.stationToStateful(sn.refstat(inchain(1))),inchain));
66 alpha(i,k) = alpha(i,k) + sn.visits{c}(sn.stationToStateful(i),k) / sum(sn.visits{c}(sn.stationToStateful(i),inchain));
72Vchain(~isfinite(Vchain))=0;
74 inchain = sn.inchain{c};
75 Vchain(:,c) = Vchain(:,c) / Vchain(sn.refstat(inchain(1)),c);
77alpha(~isfinite(alpha))=0;
78alpha(alpha<GlobalConstants.Zero)=0;
84refstatchain = zeros(C,1);
86 inchain = sn.inchain{c};
87 Nchain(c) = sum(N(inchain));
88 isOpenChain = any(isinf(N(inchain)));
90 % we assume that the visits in L(i,inchain) are equal to 1
91 STchain(i,c) = ST(i,inchain) * alpha(i,inchain)';
92 if isOpenChain && i == sn.refstat(inchain(1)) %
if this is a source ST = 1 / arrival rates
93 STchain(i,c) = 1 / sumfinite(sn.rates(i,inchain)); % ignore degenerate
classes with zero arrival rates
95 STchain(i,c) = ST(i,inchain) * alpha(i,inchain)
';
97 Lchain(i,c) = Vchain(i,c) * STchain(i,c);
98 alphachain = sum(alpha(i,inchain(isfinite(SCV(i,inchain))))');
100 SCVchain(i,c) = SCV(i,inchain) * alpha(i,inchain)
' / alphachain;
103 refstatchain(c) = sn.refstat(inchain(1));
104 if any((sn.refstat(inchain(1))-refstatchain(c))~=0)
105 line_error(mfilename,sprintf('Classes in chain %d have different reference station.
',c));
108Lchain(~isfinite(Lchain))=0;
109STchain(~isfinite(STchain))=0;