LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
qrf_noblo_mem.m
1function [UN,QN,p2opt]=qrf_noblo_mem(MAPs,N,rt)
2%%% PARAMETERS %%%
3% f; % finite capacity queue
4% M, integer, > 0; % number of queues
5% MR, integer, > 0; % number of independent blocking configurations
6% BB {m in 1:MR, i in 1:M} >=0; % blocking state
7% K {i in 1:M}, integer, > 0; % number of phases for each queue
8% F {i in 1:M}, integer, > 0; % capacity
9% N, integer, >0; % population
10% mu {i in 1:M, k in 1:K(i), h in 1:K(i)} >=0; % completion transition rates
11% v {i in 1:M, k in 1:K(i), h in 1:K(i)} >=0; % background transition rates
12% r {i in 1:M, j in 1:M} >=0; % routing probabilities
13
14%%% VARIABLES %%%
15%var p2 {j = 1:M, nj = 1+(0:N), k = 1:K(j), i = 1:M, ni = 1+(0:N), h = 1:K(i), m = 1:MR} >= 0;
16%var e {i = 1:M, k = 1:K(i)} >=0;
17
18M = length(MAPs);
19
20for i=1:M
21 K(i)=size(MAPs{i}{1},1);
22end
23for i=1:M
24 for h=1:size(MAPs{i}{1},1)
25 for k=1:size(MAPs{i}{1},1)
26 mu(i,h,k)=MAPs{i}{2}(h,k);
27 end
28 end
29end
30for i=1:M
31 for h=1:size(MAPs{i}{1},1)
32 for k=1:size(MAPs{i}{1},1)
33 if h==k
34 v(i,k,h)=0;
35 else
36 v(i,k,h)=MAPs{i}{1}(h,k);
37 end
38 end
39 end
40end
41
42MR = 1;
43BB = zeros(1,M);
44F = repmat(N,M,1);
45
46q = zeros(M,M,max(K),max(K));
47for i = 1:M
48 for j = 1:M
49 for k = 1:K(i)
50 for h = 1:K(i)
51 if j ~= i
52 q(i,j,k,h) = rt(i,j)*mu(i,k,h);
53 else
54 q(i,j,k,h) = v(i,k,h)+rt(i,i)*mu(i,k,h);
55 end
56 end
57 end
58 end
59end
60
61x = [zeros(M*(N+1)*max(K)*M*(N+1)*max(K)*MR,1); zeros(M*max(K),1)];
62
63options = optimset('fmincon');
64options.Display = 'iter';
65%options.LargeScale = 'off';
66options.MaxIter = 100;
67%options.MaxFunEvals = 1e10;
68%options.MaxSQPIter = 500;
69%options.TolCon = 1e-8;
70%options.Algorithm = 'sqp';
71%options.OutputFcn = @outfun;
72
73[xopt, fopt] = fmincon(@(x) mem(x),x,[],[],[],[],x*0,x*0+1,@(x) sub_qrfcon(x,q,M,MR,BB,F,N),options);
74[p2opt,~] = sub_qrfvar(xopt);
75
76for ti=1:M
77 UN(ti) = 0;
78 QN(ti) = 0;
79 for m=1:MR
80 for ni=1+(1:F(ti))
81 for ki=1:K(ti)
82 UN(ti) = UN(ti) + p2opt(ti,ni,ki,ti,ni,ki, m);
83 QN(ti) = QN(ti) + ni*p2opt(ti,ni,ki,ti,ni,ki, m);
84 end
85 end
86 end
87end
88
89 function fobj = mem(x)
90 % MEM
91 %maximize H: -sum {m in 1..MR} sum {i in 1..M} sum {k in 1..K[i]} sum {ni in 1..F[i]} p2[i,ni,k,i,ni,k,m]*log(1e-6+p2[i,ni,k,i,ni,k,m]);
92 [p2,~] = sub_qrfvar(x);
93 fobj = 0;
94 for m = 1:MR
95 for i = 1:M
96 for k = 1:K(i)
97 for ni = 1+(1:F(i))
98 fobj = fobj - p2(i,ni,k,i,ni,k,m)*log(1e-6 + p2(i,ni,k,i,ni,k,m));
99 end
100 end
101 end
102 end
103 end
104
105
106 function [p2,e] = sub_qrfvar(x)
107 ctr = 1;
108 p2 = zeros(M,N+1,max(K),M,N+1,max(K),MR);
109 for j = 1:M
110 for nj = 1+(0:N)
111 for k = 1:K(j)
112 for i = 1:M
113 for ni = 1+(0:N)
114 for h = 1:K(i)
115 for m = 1:MR
116 p2(j,nj,k,i,ni,h,m) = x(ctr);
117 ctr = ctr + 1;
118 end
119 end
120 end
121 end
122 end
123 end
124 end
125 e = zeros(M,max(K));
126 for i=1:M
127 for k=1:K(i)
128 e(i,k) = x(ctr);
129 ctr = ctr + 1;
130 end
131 end
132 end
133
134 function [c,ceq] = sub_qrfcon(x,q,M,MR,BB,F,N)
135 c=sparse(0,1);
136 ceq=sparse(0,1);
137
138 %%% VARIABLES %%%
139 [p2,e] = sub_qrfvar(x);
140
141 %% DEFINITIONS
142 % subject to ONE {j in 1..M}: sum {nj in 0..N, k in 1..K[j], m in 1..MR} p2[j,nj,k,j,nj,k,m]=1;
143 for j = 1:M
144 % LHS
145 ceq(end+1) = 0;
146 for nj = 1+(0:N), for k = 1:K(j), for m = 1:MR
147 ceq(end) = ceq(end) + p2(j,nj,k,j,nj,k,m);
148 end, end, end
149 % RHS
150 ceq(end) = ceq(end) -1;
151 end
152
153 % subject to ZERO1 {j in 1..M, k in 1..K[j], nj in 0..N, i in 1..M, h in 1..K[i], ni in 0..N, m in 1..MR: i==j and nj==ni and h<>k}: p2[j,nj,k,i,ni,h,m]=0;
154 for j = 1:M, for k =1:K(j), for nj = 1+(0:N), for i = 1:M, for h = 1:K(i), for ni = 1+(0:N), for m = 1:MR
155 if i==j && (nj-1)==(ni-1) && h~=k % rescaled back nj and ni
156 ceq(end+1) = p2(j,nj,k,i,ni,h,m); %=0
157 end
158 end, end, end, end, end, end, end
159
160 % subject to ZERO2 {j in 1..M, k in 1..K[j], nj in 0..N, i in 1..M, h in 1..K[i], ni in 0..N, m in 1..MR: i==j and nj<>ni}: p2[j,nj,k,i,ni,h,m]=0;
161 for j = 1:M, for k =1:K(j), for nj = 1+(0:N), for i = 1:M, for h = 1:K(i), for ni = 1+(0:N), for m = 1:MR
162 if i==j && (nj-1)~=(ni-1) % rescaled back nj and ni
163 ceq(end+1) = p2(j,nj,k,i,ni,h,m); %=0
164 end
165 end, end, end, end, end, end, end
166
167 % subject to ZERO3 {j in 1..M, k in 1..K[j], nj in 0..N, i in 1..M, h in 1..K[i], ni in 0..N, m in 1..MR: i<>j and nj+ni>N}: p2[j,nj,k,i,ni,h,m]=0;
168 for j = 1:M, for k =1:K(j), for nj = 1+(0:N), for i = 1:M, for h = 1:K(i), for ni = 1+(0:N), for m = 1:MR
169 if i~=j && (nj-1)+(ni-1)>N % rescaled back nj and ni
170 ceq(end+1) = p2(j,nj,k,i,ni,h,m);
171 end
172 end, end, end, end, end, end, end
173
174 % subject to ZERO5 {j in 1..M, k in 1..K[j], i in 1..M, h in 1..K[i], ni in 0..F[i], m in 2..MR: BB[m,j]==1}: p2[j,0,k,i,ni,h,m]=0;
175 for j = 1:M, for k =1:K(j), for i = 1:M, for h = 1:K(i), for ni = 1+(0:F(i)), for m = 2:MR
176 if BB(m,j)==1
177 ceq(end+1) = p2(j,1+0,k,i,ni,h,m);
178 end
179 end, end, end, end, end, end
180
181 % subject to ZERO6 {j in 1..M, k in 1..K[j], nj in F[j]+1..N, i in 1..M, h in 1..K[i], ni in 0..N, m in 1..MR}: p2[j,nj,k,i,ni,h,m]=0;
182 for j = 1:M, for k =1:K(j), for nj = 1+((F(j)+1):N), for i = 1:M, for h = 1:K(i), for ni = 1+(0:N), for m = 1:MR
183 ceq(end+1) = p2(j,nj,k,i,ni,h,m);
184 end, end, end, end, end, end, end
185
186 % subject to ZERO7 {j in 1..M, k in 1..K[j], nj in 1..F[j], i in 1..M, h in 1..K[i], ni in 0..N, m in 2..MR: BB[m,j]==1 and i<>j and i<>f and ni+nj+F[f]>N}: p2[j,nj,k,i,ni,h,m]=0;
187 for j = 1:M, for k =1:K(j), for nj = 1+(1:F(j)), for i = 1:M, for h = 1:K(i), for ni = 1+(0:N), for m = 2:MR
188 if BB(m,j)==1 && i~=j && i~=f && (ni-1)+(nj-1)+F(f)>N % rescaled back ni and nj
189 ceq(end+1) = p2(j,nj,k,i,ni,h,m);
190 end
191 end, end, end, end, end, end, end
192
193 % subject to SIMMETRY {j in 1..M, nj in 0..N, k in 1..K[j], i in 1..M, ni in 0..N, h in 1..K[i], m in 1..MR}: p2[i,ni,h,j,nj,k,m] = p2[j,nj,k,i,ni,h,m];
194 for j = 1:M, for nj = 1+(0:N), for k =1:K(j), for i = 1:M, for ni = 1+(0:N), for h = 1:K(i), for m = 1:MR
195 ceq(end+1) = p2(i,ni,h,j,nj,k,m) - p2(j,nj,k,i,ni,h,m);
196 end, end, end, end, end, end, end
197
198 % subject to MARGINALS {j in 1..M, k in 1..K[j], nj in 0..N, i in 1..M, m in 1..MR: i<>j}: p2[j,nj,k,j,nj,k,m]= sum {ni in 0..N-nj} sum {h in 1..K[i]} p2[j,nj,k,i,ni,h,m];
199 for j = 1:M, for k =1:K(j), for nj = 1+(0:N), for i = 1:M, for m = 1:MR
200 if i~=j
201 % LHS
202 ceq(end+1) = p2(j,nj,k,j,nj,k,m);
203 % RHS
204 for ni = 1+(0:(N-nj)) %% added +1
205 for h = 1:K(i)
206 ceq(end) = ceq(end) - p2(j,nj,k,i,ni,h,m);
207 end
208 end
209 end
210 end, end, end, end, end
211
212 %subject to UEFF {j in 1..M, i in 1..M, ki in 1..K[i]}: e[i,ki] = sum {nj in 0..N, kj in 1..K[j], m in 1..MR, ni in 1..N: BB[m,i]==0} p2[j,nj,kj,i,ni,ki,m];
213 for j = 1:M, for i = 1:M, for ki = 1:K(i)
214 % LHS
215 ceq(end+1) = e(i,ki);
216 % RHS
217 for nj = 1+(0:N), for kj = 1:K(j), for m = 1:MR, for ni = 1+(1:N)
218 if BB(m,i)==0
219 ceq(end) = ceq(end) - p2(j,nj,kj,i,ni,ki,m);
220 end
221 end, end, end, end
222 end, end, end
223
224 %subject to THM1 {i in 1..M, k in 1..K[i]}: sum {j in 1..M, h in 1..K[i]} q[i,j,k,h]*e[i,k] =sum {j in 1..M, h in 1..K[i]} q[i,j,h,k]*e[i,h];
225 for i = 1:M, for k =1:K(i)
226 ceq(end+1) = 0;
227 % LHS
228 for j = 1:M, for h = 1:K(i)
229 ceq(end) = ceq(end) + q(i,j,k,h)*e(i,k);
230 end, end
231 % RHS
232 for j = 1:M, for h = 1:K(i)
233 ceq(end) = ceq(end) - q(i,j,h,k)*e(i,h);
234 end, end
235 end, end
236
237 %subject to THM2 {j in 1..M, k in 1..K[j], nj in 0..F[j], m in 1..MR}: sum {i in 1..M, ni in 1..F[i], ki in 1..K[i]} ni*p2[j,nj,k,i,ni,ki,m]= N*p2[j,nj,k,j,nj,k,m];
238 for j = 1:M, for k =1:K(j), for nj = 1+(0:F(j)), for m = 1:MR
239 ceq(end+1) = 0;
240 % LHS
241 for i = 1:M, for ni = 1+(1:F(i)), for ki = 1:K(i)
242 ceq(end) = ceq(end) + (ni-1)*p2(j,nj,k,i,ni,ki,m); % recaled back ni
243 end, end, end
244 % RHS
245 ceq(end) = ceq(end) - N*p2(j,nj,k,j,nj,k,m);
246 end, end, end, end
247
248 %subject to COR1 : sum {m in 1..MR, i in 1..M, j in 1..M, nj in 1..F[j], ni in 1..F[i], ki in 1..K[i], kj in 1..K[j]} ni*nj*p2[j,nj,kj,i,ni,ki,m]= N^2;
249 ceq(end+1) = 0;
250 % LHS
251 for m = 1:MR, for i = 1:M, for j = 1:M, for nj = 1+(1:F(j)), for ni = 1+(1:F(i)), for ki = 1:K(i), for kj = 1:K(j)
252 ceq(end) = ceq(end) + (ni-1)*(nj-1)*p2(j,nj,kj,i,ni,ki,m); % rescaled back ni and nj
253 end, end, end, end, end, end, end
254 % RHS
255 ceq(end) = ceq(end) - N^2;
256
257 % subject to THM4 {j in 1..M, k in 1..K[j], i in 1..M, m in 1..MR}: sum{t in 1..M} sum {h in 1..K[t]} sum {nj in 0..N} sum {nt in 0..N} nt*p2[j,nj,k,t,nt,h,m]
258 % >= N*sum {h in 1..K[i]} sum {nj in 0..N} sum {ni in 1..N} (p2[j,nj,k,i,ni,h,m]);
259 for j = 1:M, for k = 1:K(j), for i = 1:M, for m = 1:MR
260 c(end+1) = 0; % <= inequality
261 % LHS with sign swapped since >= in GLPK
262 for t = 1:M, for h = 1:K(t), for nj = 1+(0:N), for nt = 1+(0:N)
263 c(end) = c(end) - (nt-1)*p2(j,nj,k,t,nt,h,m); % rescaled back nt
264 end, end, end, end
265 % RHS with sign swapped since >= in GLPK
266 for h = 1:K(i), for nj = 1+(0:N), for ni = 1+(1:N)
267 c(end) = c(end) + N*(p2(j,nj,k,i,ni,h,m));
268 end, end, end
269 end, end, end, end
270 end
271end
272