LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
refreshProcessPhases.m
1function [ph, mu, phi, phases] = refreshProcessPhases(self, statSet, classSet)
2% [PH, MU, PHI, PHASES] = REFRESHPROCESSPHASES()
3% Obtain information about phases of service and arrival processes.
4
5% Copyright (c) 2012-2026, Imperial College London
6% All rights reserved.
7
8M = getNumberOfStations(self);
9K = getNumberOfClasses(self);
10if nargin<2
11 statSet = 1:M;
12 classSet = 1:K;
13 mu = cell(M,1);
14 for ist=1:M
15 mu{ist,1} = cell(1,K);
16 end
17 phi = cell(M,1);
18 for ist=1:M
19 phi{ist,1} = cell(1,K);
20 end
21 phases = zeros(M,K);
22elseif nargin==2
23 classSet = 1:K;
24 mu = cell(M,1);
25 for ist=1:M
26 mu{ist,1} = cell(1,K);
27 end
28 phi = cell(M,1);
29 for ist=1:M
30 phi{ist,1} = cell(1,K);
31 end
32 phases = zeros(M,K);
33elseif nargin==3 && isfield(self.sn, 'mu') && isfield(self.sn, 'phi') && isfield(self.sn, 'phases')
34 % we are only updating selected stations and classes so use the
35 % existing ones for the others
36 mu = self.sn.mu;
37 phi = self.sn.phi;
38 phases = self.sn.phases;
39else
40 mu = cell(M,1);
41 for ist=1:M
42 mu{ist,1} = cell(1,K);
43 end
44 phi = cell(M,1);
45 for ist=1:M
46 phi{ist,1} = cell(1,K);
47 end
48 phases = zeros(M,K);
49end
50
51stations = self.stations;
52for ist=statSet
53 if ist == self.getIndexSourceStation
54 [~,mu_i,phi_i] = stations{ist}.getSourceRates();
55 else
56 switch class(stations{ist})
57 case 'Fork'
58 mu_i = cell(1,K);
59 phi_i = cell(1,K);
60 for r=1:K
61 mu_i{r} = NaN;
62 phi_i{r} = NaN;
63 end
64 case 'Join'
65 mu_i = cell(1,K);
66 phi_i = cell(1,K);
67 for r=1:K
68 mu_i{r} = NaN;
69 phi_i{r} = NaN;
70 end
71 otherwise
72 [~,mu_i,phi_i] = stations{ist}.getServiceRates();
73 end
74 end
75 for r=classSet
76 if ~isempty(mu_i{r})
77 mu{ist}{r} = mu_i{r};
78 phi{ist}{r} = phi_i{r};
79 if isnan(mu_i{r}) % disabled
80 phases(ist,r) = 0;
81 else
82 phases(ist,r) = length(mu_i{r});
83 end
84 end
85end
86
87if ~isempty(self.sn) %&& isprop(self.sn,'mu')
88 self.sn.mu = mu;
89 self.sn.phi = phi;
90 self.sn.phases = phases;
91 self.sn.phasessz = max(self.sn.phases,ones(size(self.sn.phases)));
92 self.sn.phaseshift = [zeros(size(phases,1),1),cumsum(self.sn.phasessz,2)];
93end
94[ph, phases] = refreshProcessRepresentations(self);
95end