LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
qrf_noblo_mmi.m
1function [UN,QN,p2opt]=qrf_noblo_mmi(M,MR,K,N,mu,v,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
18MR = 1;
19BB = zeros(1,M);
20F = repmat(N,M,1);
21
22q = zeros(M,M,max(K),max(K));
23for i = 1:M
24 for j = 1:M
25 for k = 1:K(i)
26 for h = 1:K(i)
27 if j ~= i
28 q(i,j,k,h) = rt(i,j)*mu(i,k,h);
29 else
30 q(i,j,k,h) = v(i,k,h)+rt(i,i)*mu(i,k,h);
31 end
32 end
33 end
34 end
35end
36
37n = M*(N+1)*max(K)*M*(N+1)*max(K)*MR + M*max(K);
38
39options = optimset('fmincon');
40options.Display = 'off';
41%options.LargeScale = 'off';
42options.MaxIter = 100;
43%options.MaxFunEvals = 1e10;
44%options.MaxSQPIter = 500;
45%options.TolCon = 1e-8;
46%options.Algorithm = 'sqp';
47%options.OutputFcn = @outfun;
48
49
50% Start on the polytope: from an infeasible start fmincon exhausts its
51% iteration budget restoring feasibility and returns a point outside the
52% polytope. See qrf_noblo_start.
53x = qrf_noblo_start(@(z) sub_qrfcon(z,q,M,MR,BB,F,N), n);
54
55[xopt, fopt] = fmincon(@(x) mmi(x),x,[],[],[],[],x*0,x*0+1,@(x) sub_qrfcon(x,q,M,MR,BB,F,N),options);
56[p2opt,~] = sub_qrfvar(xopt);
57
58for ti=1:M
59 UN(ti) = 0;
60 QN(ti) = 0;
61 for m=1:MR
62 for ni=1+(1:F(ti))
63 for ki=1:K(ti)
64 UN(ti) = UN(ti) + p2opt(ti,ni,ki,ti,ni,ki, m);
65 QN(ti) = QN(ti) + (ni-1)*p2opt(ti,ni,ki,ti,ni,ki, m); % rescaled back ni
66 end
67 end
68 end
69end
70
71 function fobj = mmi(x)
72 % MMI
73 %minimize MI: sum {m in 1..MR} sum {i in 1..M, j in 1..M, ki in 1..K[i], kj in 1..K[j]: i<>j} sum {nj in 0..F[j]} sum {ni in 0..F[j]} p2[i,ni,ki,j,nj,kj,m]*(log(1e-6+p2[i,ni,ki,j,nj,kj,m])-log(1e-6+p2[i,ni,ki,i,ni,ki,m])-log(1e-6+p2[j,nj,kj,j,nj,kj,m]));
74 [p2,~] = sub_qrfvar(x);
75 fobj = 0;
76 LOGTOL = 1e-6;
77 for m = 1:MR
78 for i = 1:M
79 for ki = 1:K(i)
80 for j = 1:M
81 if i~=j
82 for kj = 1:K(j)
83 for ni = 1+(1:F(i))
84 for nj = 1+(1:F(j))
85 fobj = fobj + p2(i,ni,ki,j,nj,kj,m)*(log(LOGTOL+p2(i,ni,ki,j,nj,kj,m))-log(LOGTOL+p2(i,ni,ki,i,ni,ki,m))-log(LOGTOL+p2(j,nj,kj,j,nj,kj,m)));
86 end
87 end
88 end
89 end
90 end
91 end
92 end
93 end
94 end
95
96 function [p2,e] = sub_qrfvar(x)
97 ctr = 1;
98 p2 = zeros(M,N+1,max(K),M,N+1,max(K),MR);
99 for j = 1:M
100 for nj = 1+(0:N)
101 for k = 1:K(j)
102 for i = 1:M
103 for ni = 1+(0:N)
104 for h = 1:K(i)
105 for m = 1:MR
106 p2(j,nj,k,i,ni,h,m) = x(ctr);
107 ctr = ctr + 1;
108 end
109 end
110 end
111 end
112 end
113 end
114 end
115 e = zeros(M,max(K));
116 for i=1:M
117 for k=1:K(i)
118 e(i,k) = x(ctr);
119 ctr = ctr + 1;
120 end
121 end
122 end
123
124 function [c,ceq] = sub_qrfcon(x,q,M,MR,BB,F,N)
125 c=sparse(0,1);
126 ceq=sparse(0,1);
127
128 %%% VARIABLES %%%
129 [p2,e] = sub_qrfvar(x);
130
131 %% DEFINITIONS
132 % 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;
133 for j = 1:M
134 % LHS
135 ceq(end+1) = 0;
136 for nj = 1+(0:N), for k = 1:K(j), for m = 1:MR
137 ceq(end) = ceq(end) + p2(j,nj,k,j,nj,k,m);
138 end, end, end
139 % RHS
140 ceq(end) = ceq(end) -1;
141 end
142
143 % 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;
144 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
145 if i==j && (nj-1)==(ni-1) && h~=k % rescaled back nj and ni
146 ceq(end+1) = p2(j,nj,k,i,ni,h,m); %=0
147 end
148 end, end, end, end, end, end, end
149
150 % 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;
151 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
152 if i==j && (nj-1)~=(ni-1) % rescaled back nj and ni
153 ceq(end+1) = p2(j,nj,k,i,ni,h,m); %=0
154 end
155 end, end, end, end, end, end, end
156
157 % 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;
158 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
159 if i~=j && (nj-1)+(ni-1)>N % rescaled back nj and ni
160 ceq(end+1) = p2(j,nj,k,i,ni,h,m);
161 end
162 end, end, end, end, end, end, end
163
164 % 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;
165 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
166 if BB(m,j)==1
167 ceq(end+1) = p2(j,1+0,k,i,ni,h,m);
168 end
169 end, end, end, end, end, end
170
171 % 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;
172 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
173 ceq(end+1) = p2(j,nj,k,i,ni,h,m);
174 end, end, end, end, end, end, end
175
176 % 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;
177 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
178 if BB(m,j)==1 && i~=j && i~=f && (ni-1)+(nj-1)+F(f)>N % rescaled back ni and nj
179 ceq(end+1) = p2(j,nj,k,i,ni,h,m);
180 end
181 end, end, end, end, end, end, end
182
183 % 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];
184 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
185 ceq(end+1) = p2(i,ni,h,j,nj,k,m) - p2(j,nj,k,i,ni,h,m);
186 end, end, end, end, end, end, end
187
188 % 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];
189 for j = 1:M, for k =1:K(j), for nj = 1+(0:N), for i = 1:M, for m = 1:MR
190 if i~=j
191 % LHS
192 ceq(end+1) = p2(j,nj,k,j,nj,k,m);
193 % RHS
194 for ni = 1+(0:N) % full range per AMPL MARGINALS; ZERO3 zeroes nj+ni>N
195 for h = 1:K(i)
196 ceq(end) = ceq(end) - p2(j,nj,k,i,ni,h,m);
197 end
198 end
199 end
200 end, end, end, end, end
201
202 %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];
203 for j = 1:M, for i = 1:M, for ki = 1:K(i)
204 % LHS
205 ceq(end+1) = e(i,ki);
206 % RHS
207 for nj = 1+(0:N), for kj = 1:K(j), for m = 1:MR, for ni = 1+(1:N)
208 if BB(m,i)==0
209 ceq(end) = ceq(end) - p2(j,nj,kj,i,ni,ki,m);
210 end
211 end, end, end, end
212 end, end, end
213
214 %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];
215 for i = 1:M, for k =1:K(i)
216 ceq(end+1) = 0;
217 % LHS
218 for j = 1:M, for h = 1:K(i)
219 ceq(end) = ceq(end) + q(i,j,k,h)*e(i,k);
220 end, end
221 % RHS
222 for j = 1:M, for h = 1:K(i)
223 ceq(end) = ceq(end) - q(i,j,h,k)*e(i,h);
224 end, end
225 end, end
226
227 %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];
228 for j = 1:M, for k =1:K(j), for nj = 1+(0:F(j)), for m = 1:MR
229 ceq(end+1) = 0;
230 % LHS
231 for i = 1:M, for ni = 1+(1:F(i)), for ki = 1:K(i)
232 ceq(end) = ceq(end) + (ni-1)*p2(j,nj,k,i,ni,ki,m); % recaled back ni
233 end, end, end
234 % RHS
235 ceq(end) = ceq(end) - N*p2(j,nj,k,j,nj,k,m);
236 end, end, end, end
237
238 %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;
239 ceq(end+1) = 0;
240 % LHS
241 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)
242 ceq(end) = ceq(end) + (ni-1)*(nj-1)*p2(j,nj,kj,i,ni,ki,m); % rescaled back ni and nj
243 end, end, end, end, end, end, end
244 % RHS
245 ceq(end) = ceq(end) - N^2;
246
247 % subject to THM30 {i in 1..M, u in 1..K[i]: i<>f}: sum {j in 1..M, nj in 1..F[j], k in 1..K[j], h in 1..K[j], m in 1..MR: j<>i and j<>f and BB[m,j]==0}
248 % q[j,i,k,h]*p2[j,nj,k, i,0,u, m] + ... = sum {j in 1..M, nj in 0..F[j], k in 1..K[i], h in 1..K[j], m in 1..MR: j<>i and j<>f and BB[m,i]==0} q[i,j,k,u]*p2[j,nj,h, i,0+1,k, m] + ...
249 %
250 % Marginal-balance family of the bas skeleton. Without it the polytope
251 % carries no dependence on mu at all (THM1 only balances phases, and is
252 % identically zero when K(i)==1), and the U bound collapses to the
253 % uninformative [0,1]; verified against glpsol.
254 %
255 % No-blocking specialization: there is no finite-capacity station f and
256 % BB is all-zero, so only the j<>i, j<>f terms of the skeleton survive.
257 % The j==f branches are vacuous here, as are THM3f, THM3I and THM3L,
258 % which are conditioned entirely on f.
259 for i = 1:M, for u = 1:K(i)
260 ceq(end+1) = 0;
261 % LHS
262 for j = 1:M, for nj = 1+(1:F(j)), for k = 1:K(j), for h = 1:K(j), for m = 1:MR
263 if j~=i && BB(m,j)==0
264 ceq(end) = ceq(end) + q(j,i,k,h)*p2(j,nj,k, i,1+0,u, m);
265 end
266 end, end, end, end, end
267 % RHS
268 for j = 1:M, for nj = 1+(0:F(j)), for k = 1:K(i), for h = 1:K(j), for m = 1:MR
269 if j~=i && BB(m,i)==0
270 ceq(end) = ceq(end) - q(i,j,k,u)*p2(j,nj,h, i,1+1,k, m);
271 end
272 end, end, end, end, end
273 end, end
274
275 % subject to THM3 {i in 1..M, ni in 0..(F[i]-1): i<>f}: sum {j in 1..M, nj in 1..F[j], k in 1..K[j], h in 1..K[j], u in 1..K[i], m in 1..MR: j<>i and j<>f and BB[m,j]==0} q[j,i,k,h]*p2[j,nj,k, i,ni,u, m] + ...
276 % = sum {j in 1..M, nj in 0..F[j], k in 1..K[i], u in 1..K[j], m in 1..MR: j<>i and j<>f and BB[m,i]==0} sum {h in 1..K[i]} q[i,j,k,h]*p2[j,nj,u, i,ni+1,k, m] + ...
277 for i = 1:M, for ni = 1+(0:(F(i)-1))
278 ceq(end+1) = 0;
279 % LHS
280 for j = 1:M, for nj = 1+(1:F(j)), for k = 1:K(j), for h = 1:K(j), for u = 1:K(i), for m = 1:MR
281 if j~=i && BB(m,j)==0
282 ceq(end) = ceq(end) + q(j,i,k,h)*p2(j,nj,k, i,ni,u, m);
283 end
284 end, end, end, end, end, end
285 % RHS
286 for j = 1:M, for nj = 1+(0:F(j)), for k = 1:K(i), for u = 1:K(j), for m = 1:MR
287 if j~=i && BB(m,i)==0
288 for h = 1:K(i)
289 ceq(end) = ceq(end) - q(i,j,k,h)*p2(j,nj,u, i,ni+1,k, m);
290 end
291 end
292 end, end, end, end, end
293 end, end
294
295 % 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]
296 % >= 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]);
297 for j = 1:M, for k = 1:K(j), for i = 1:M, for m = 1:MR
298 c(end+1) = 0; % <= inequality
299 % LHS with sign swapped since >= in GLPK
300 for t = 1:M, for h = 1:K(t), for nj = 1+(0:N), for nt = 1+(0:N)
301 c(end) = c(end) - (nt-1)*p2(j,nj,k,t,nt,h,m); % rescaled back nt
302 end, end, end, end
303 % RHS with sign swapped since >= in GLPK
304 for h = 1:K(i), for nj = 1+(0:N), for ni = 1+(1:N)
305 c(end) = c(end) + N*(p2(j,nj,k,i,ni,h,m));
306 end, end, end
307 end, end, end, end
308 end
309end
310
Definition Station.m:245