LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
multiregime.m
1% H. Emre Kankaya and Nail Akar:
2% Solving Multi-Regime Feedback Fluid Queues
3% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4% R and Q are cells with kth element (k=1...K) Q,R parameters describing the
5% behaviour in regime k, Qt, Rt are cells with kth elements (k=0...K)
6% describing the behaviour at the kth boundary, T is the vector of
7% thresholds of regimes (k=1...K).
8%
9% IMPORTANT:
10% ----------
11% if R{k}(m)==0 then Rt{k}(m)=0 and Rt{k+1}(m)=0 must hold
12% repulsive states: boundary rate must be 0 or right or left continuous
13% absorbing states: boundary rate must be 0
14% all other states: boundary rate must be right or left continuous
15% in all regimes the mean drift must be non-zero
16%
17% momnum: number of buffer length moments to compute
18% arrivals: cell of input rates in all regimes. If given, buffer length
19% moments will be embedded to arrival instants
20%
21function [pdf, pdfd, cdf, cdfm] = multiregime (Q, R, Qt, Rt, T, pdfpoints, cdfpoints)
22
23K = length(R);
24N = length(R{1});
25T = [0 T];
26
27% Convenience operations
28% ~~~~~~~~~~~~~~~~~~~~~~
29if length(Q)==1
30 for k=2:K
31 Q{k} = Q{1};
32 end
33end
34
35if isempty(Qt)
36 Qt{1} = Q{1};
37 for k=1:K
38 Qt{k+1} = Q{k};
39 end
40elseif length(Qt)==1
41 for k=2:K+1
42 Qt{k} = Qt{1};
43 end
44end
45
46if isempty(Rt)
47 Rt{1} = R{1};
48 for k=1:K
49 Rt{k+1} = R{k};
50 end
51end
52
53% Obtain transfer matrices for the regimes
54% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55ix = 1:N;
56Nnz = [];
57Npos = 1;
58for k=1:K
59 % find negative, positive and zero states in each regime
60 zix = ix(R{k}==0);
61 nzix = ix(R{k}~=0);
62 Nn = length(nzix);
63 Qnk = Q{k}(nzix,nzix) + Q{k}(nzix,zix)*inv(-Q{k}(zix,zix))*Q{k}(zix,nzix);
64 A = Qnk*diag(1./R{k}(nzix));
65 [Z1,D1] = schur (A);
66 [Z,D] = ordschur (Z1, D1, 5*(abs(diag(D1))<1e-10) + 2*(diag(D1)<0) + 1*(diag(D1)>0));
67 zeroeig = sum(abs(diag(D1))<1e-10);
68 poseig = sum(diag(D(zeroeig+1:end,zeroeig+1:end))>0);
69 negeig = sum(diag(D(zeroeig+1:end,zeroeig+1:end))<0);
70
71% X1 = -D(1,2:end) / D(2:end,2:end);
72% X1b = quasitriangular (D(2:end,2:end), D(1,2:end));
73 X1 = sylvester (zeros(zeroeig), -D(zeroeig+1:end, zeroeig+1:end), D(1:zeroeig, zeroeig+1:end));
74
75
76 % the two lines below should give the same result but matlab's version
77 % is much more unstable numerically
78% X2 = lyap (-D(2:1+negeig,2:1+negeig), D(1+negeig+1:end, 1+negeig+1:end), D(2:1+negeig, 1+negeig+1:end));
79 X2 = sylvester (D(zeroeig+1:zeroeig+negeig,zeroeig+1:zeroeig+negeig), -D(zeroeig+negeig+1:end, zeroeig+negeig+1:end), D(zeroeig+1:zeroeig+negeig, zeroeig+negeig+1:end));
80 Y = Z * [eye(zeroeig), -X1; zeros(Nn-zeroeig,zeroeig), eye(Nn-zeroeig)] * [eye(zeroeig) zeros(zeroeig,Nn-zeroeig); zeros(negeig,zeroeig) eye(negeig) -X2; zeros(poseig,zeroeig+negeig), eye(poseig)];
81
82 iY = inv(Y);
83 iY0 = iY(1:zeroeig,:);
84 iYn = iY(zeroeig+1:zeroeig+negeig,:);
85 iYp = iY(zeroeig+negeig+1:end,:);
86
87 At = iY*A*Y;
88 An{k} = At(zeroeig+1:zeroeig+negeig, zeroeig+1:zeroeig+negeig);
89 Ap{k} = At(zeroeig+negeig+1:end, zeroeig+negeig+1:end);
90
91 L0{k}(:,nzix) = iY0;
92 L0{k}(:,zix) = iY0*Q{k}(nzix,zix)*inv(-Q{k}(zix,zix));
93 Ln{k}(:,nzix) = iYn;
94 Ln{k}(:,zix) = iYn*Q{k}(nzix,zix)*inv(-Q{k}(zix,zix));
95 Lp{k}(:,nzix) = iYp;
96 Lp{k}(:,zix) = iYp*Q{k}(nzix,zix)*inv(-Q{k}(zix,zix));
97
98 Tk = T(k+1)-T(k);
99 M0{k} = [L0{k}; Ln{k}; expm(-Ap{k}*Tk)*Lp{k}];
100 MT{k} = [L0{k}; expm(An{k}*Tk)*Ln{k}; Lp{k}];
101 if rcond(-An{k})<1e-10 || rcond(-Ap{k})<1e-10
102 An{k};
103 end
104 Mi{k} = [Tk*L0{k}; inv(-An{k})*(eye(negeig)-expm(An{k}*Tk))*Ln{k}; inv(Ap{k})*(eye(poseig)-expm(-Ap{k}*Tk))*Lp{k}];
105 Nnz = [Nnz Nn];
106 Npos = [Npos; Npos(end)+Nn];
107end
108
109% Construct and solve linear set of equations for the unknows (probability
110% masses and density parameters a0 a- a+ for all regimes)
111% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
112Neqns = (K+1)*N+sum(Nnz);
113
114M = zeros(Neqns);
115d = (K+1)*N;
116p = 1;
117
118% number of equations for the masses: (K+1)*N, corresponding variables located between indices 1...d
119% number of initial densities: K*sum(Nnz), starting at d+1
120
121% eq. (12)
122M(1:N,p:p+N-1) = -Qt{1};
123M(d+Npos(1):d+Npos(1)+Nnz(1)-1,p:p+N-1) = M0{1}*diag(R{1});
124p = p + N;
125% eq. (13)
126for k=1:K-1
127 M(k*N+1:(k+1)*N,p:p+N-1) = -Qt{k+1};
128 M(d+Npos(k+1):d+Npos(k+1)+Nnz(k+1)-1,p:p+N-1) = M0{k+1}*diag(R{k+1});
129 M(d+Npos(k):d+Npos(k)+Nnz(k)-1,p:p+N-1) = -MT{k}*diag(R{k});
130 p = p + N;
131end
132% eq. (16)
133M(K*N+1:(K+1)*N,p:p+N-1) = -Qt{K+1};
134M(d+Npos(K):d+Npos(K)+Nnz(K)-1,p:p+N-1) = -MT{K}*diag(R{K});
135p = p + N;
136% eq. (8)
137for m=1:N
138 if R{1}(m)>0
139 M(:,p) = zeros(Neqns,1);
140 M(m,p) = 1;
141 p = p + 1;
142 end
143end
144% eq. (11)
145for m=1:N
146 if R{K}(m)<0
147 M(:,p) = zeros(Neqns,1);
148 M(K*N+m,p) = 1;
149 p = p + 1;
150 end
151end
152% eq. (9)
153for k=1:K-1
154 for m=1:N
155 if (R{k}(m)>0 && R{k+1}(m)>0) || (R{k}(m)<0 && R{k+1}(m)<0)
156 M(:,p) = zeros(Neqns,1);
157 M(k*N+m,p) = 1;
158 p = p + 1;
159 end
160 end
161end
162% eq. (10)
163for k=1:K-1
164 for m=1:N
165 if (R{k}(m)<0 && R{k+1}(m)>0) && Rt{k+1}(m)~=0
166 M(:,p) = zeros(Neqns,1);
167 M(k*N+m,p) = 1;
168 p = p + 1;
169 end
170 end
171end
172% eq. (14)
173for k=1:K-1
174 for m=1:N
175 if R{k}(m)<0 && Rt{k+1}(m)>=0
176 M(:,p) = zeros(Neqns,1);
177 M(d+Npos(k):d+Npos(k)+Nnz(k)-1,p) = MT{k}(:,m);
178 p = p + 1;
179 end
180 end
181end
182% eq. (15)
183for k=1:K-1
184 for m=1:N
185 if R{k+1}(m)>0 && Rt{k+1}(m)<=0
186 M(:,p) = zeros(Neqns,1);
187 M(d+Npos(k+1):d+Npos(k+1)+Nnz(k+1)-1,p) = M0{k+1}(:,m);
188 p = p + 1;
189 end
190 end
191end
192
193% normalization
194% sum up probability mass
195npos = 1;
196M(1:d,npos) = ones(d,1);
197% sum up integrals of transfer matrices
198for k=1:K
199 M(d+Npos(k):d+Npos(k)+Nnz(k)-1,npos) = sum(Mi{k},2);
200end
201
202rhs = zeros(1,Neqns);
203rhs(npos) = 1;
204
205% solve linear set of equations
206sol = rhs / M;
207
208% extract results of the regimes
209masses = cell(1,K+1);
210a0 = cell(1,K);
211an = cell(1,K);
212ap = cell(1,K);
213masses{1} = sol(1:N);
214for k=1:K
215 masses{k+1} = sol(k*N+1:(k+1)*N);
216 avec = sol(d+Npos(k):d+Npos(k)+Nnz(k)-1);
217 a0{k} = avec(1:Nnz(k)-size(An{k},1)-size(Ap{k},1));
218 an{k} = avec(length(a0{k})+1:length(a0{k})+size(An{k},1));
219 ap{k} = avec(length(a0{k})+length(an{k})+1:length(a0{k})+length(an{k})+size(Ap{k},1));
220end
221
222% calculate pdf at the requested points
223pdf = [];
224for p=pdfpoints
225 k=0;
226 while k<K && p>=T(k+1)
227 k = k + 1;
228 end
229 presp = a0{k}*L0{k} + an{k}*expm(An{k}*(p-T(k)))*Ln{k} + ap{k}*expm(-Ap{k}*(T(k+1)-p))*Lp{k};
230 pdf = [pdf; presp];
231end
232
233pdfd = [];
234for p=pdfpoints
235 k=0;
236 while k<K && p>=T(k+1)
237 k = k + 1;
238 end
239 presp = an{k}*An{k}*expm(An{k}*(p-T(k)))*Ln{k} + ap{k}*Ap{k}*expm(-Ap{k}*(T(k+1)-p))*Lp{k};
240 pdfd = [pdfd; presp];
241end
242
243% calculate cdf at the requested points
244cdf = [];
245cdfm = [];
246for ix=1:length(cdfpoints)
247 c=cdfpoints(ix);
248 cres = zeros(1,N);
249 cresm = zeros(1,N);
250 k=0;
251 while k<K && c>=T(k+1)
252 if k>0
253 cres = cres + [a0{k} an{k} ap{k}] * Mi{k};
254 cresm = cresm + [a0{k} an{k} ap{k}] * Mi{k};
255 end
256 cresm = cresm + masses{k+1};
257 if c>T(k+1)
258 cres = cres + masses{k+1};
259 end
260 k = k + 1;
261 end
262 if k==K && c==T(k+1)
263 cresm = cresm + masses{k+1};
264 end
265 crem = c - T(k);
266 Tk = T(k+1)-T(k);
267 val = a0{k}*L0{k}*crem + an{k}*inv(-An{k})*(eye(size(An{k}))-expm(An{k}*crem))*Ln{k} + ap{k}*inv(-Ap{k})*(expm(-Ap{k}*Tk) - expm(-Ap{k}*(Tk-crem)))*Lp{k};
268 cres = cres + val;
269 cresm = cresm + val;
270 cdf = [cdf; cres];
271 cdfm = [cdfm; cresm];
272end
273
Definition Station.m:245