LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
qrf_bas_mmi_simple.m
1function [UN,QN,p2opt]=qrf_bas_mmi_simple(f,M,MR,BB,K,F,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
18q = zeros(M,M,max(K),max(K));
19for i = 1:M
20 for j = 1:M
21 for k = 1:K(i)
22 for h = 1:K(i)
23 if j ~= i
24 q(i,j,k,h) = rt(i,j)*mu(i,k,h);
25 else
26 q(i,j,k,h) = v(i,k,h)+rt(i,i)*mu(i,k,h);
27 end
28 end
29 end
30 end
31end
32
33x = [zeros(M*(N+1)*max(K)*M*(N+1)*max(K)*MR,1); zeros(M*max(K),1)];
34
35options = optimset('fmincon');
36options.Display = 'iter';
37%options.LargeScale = 'off';
38options.MaxIter = 1;%100;
39%options.MaxFunEvals = 1e10;
40%options.MaxSQPIter = 500;
41%options.TolCon = 1e-8;
42options.Algorithm = 'sqp';
43%options.OutputFcn = @outfun;
44
45[xopt, fopt] = fmincon(@(x) mmi(x),x,[],[],[],[],x*0,x*0+1,@(x) sub_qrfcon(x,q,f,M,MR,BB,F,N),options);
46[p2opt,~] = sub_qrfvar(xopt);
47
48for ti=1:M
49 UN(ti) = 0;
50 QN(ti) = 0;
51 for m=1:MR
52 for ni=1+(1:F(ti))
53 for ki=1:K(ti)
54 UN(ti) = UN(ti) + p2opt(ti,ni,ki,ti,ni,ki, m);
55 QN(ti) = QN(ti) + ni*p2opt(ti,ni,ki,ti,ni,ki, m);
56 end
57 end
58 end
59end
60
61 function fobj = mmi(x)
62 % MMI
63 %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]));
64 [p2,~] = sub_qrfvar(x);
65 fobj = 0;
66 LOGTOL = 1e-6;
67 for m = 1:MR
68 for i = 1:M
69 for ki = 1:K(i)
70 for j = 1:M
71 if i~=j
72 for kj = 1:K(j)
73 for ni = 1+(1:F(i))
74 for nj = 1+(1:F(j))
75 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)));
76 end
77 end
78 end
79 end
80 end
81 end
82 end
83 end
84 end
85
86 function [p2,e] = sub_qrfvar(x)
87 ctr = 1;
88 p2 = zeros(M,N+1,max(K),M,N+1,max(K),MR);
89 for j = 1:M
90 for nj = 1+(0:N)
91 for k = 1:K(j)
92 for i = 1:M
93 for ni = 1+(0:N)
94 for h = 1:K(i)
95 for m = 1:MR
96 p2(j,nj,k,i,ni,h,m) = x(ctr);
97 ctr = ctr + 1;
98 end
99 end
100 end
101 end
102 end
103 end
104 end
105 e = zeros(M,max(K));
106 for i=1:M
107 for k=1:K(i)
108 e(i,k) = x(ctr);
109 ctr = ctr + 1;
110 end
111 end
112 end
113
114 function [c,ceq] = sub_qrfcon(x,q,f,M,MR,BB,F,N)
115 c=sparse(0,1);
116 ceq=sparse(0,1);
117
118 %%% VARIABLES %%%
119 [p2,e] = sub_qrfvar(x);
120
121 %% DEFINITIONS
122 % 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;
123 for j = 1:M
124 % LHS
125 ceq(end+1) = 0;
126 for nj = 1+(0:N), for k = 1:K(j), for m = 1:MR
127 ceq(end) = ceq(end) + p2(j,nj,k,j,nj,k,m);
128 end, end, end
129 % RHS
130 ceq(end) = ceq(end) -1;
131 end
132
133 % 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;
134 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
135 if i==j && (nj-1)==(ni-1) && h~=k % rescaled back nj and ni
136 ceq(end+1) = p2(j,nj,k,i,ni,h,m); %=0
137 end
138 end, end, end, end, end, end, end
139
140 % 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;
141 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
142 if i==j && (nj-1)~=(ni-1) % rescaled back nj and ni
143 ceq(end+1) = p2(j,nj,k,i,ni,h,m); %=0
144 end
145 end, end, end, end, end, end, end
146
147 % 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;
148 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
149 if i~=j && (nj-1)+(ni-1)>N % rescaled back nj and ni
150 ceq(end+1) = p2(j,nj,k,i,ni,h,m);
151 end
152 end, end, end, end, end, end, end
153
154 % subject to ZERO4 {j in 1..M, k in 1..K[j], nj in 0..N, m in 2..MR: f<>j}: sum {nf in 0..F[f]-1, h in 1..K[f]} p2[j,nj,k,f,nf,h,m]=0;
155 for j = 1:M, for k =1:K(j), for nj = 1+(0:N), for m = 2:MR
156 if f~=j
157 ceq(end+1) = 0;
158 for nf =1+ (0:(F(f)-1)), for h = 1:K(f)
159 ceq(end) = ceq(end) + p2(j,nj,k,f,nf,h,m);
160 end, end
161 end
162 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 ZERO8 {nf in 1..F[f]-1, k in 1..K[f], i in 1..M, h in 1..K[i], ni in 0..N, m in 2..MR}: p2[f,nf,k,i,ni,h,m]=0;
184 for nf = 1+(1:(F(f)-1)), for k =1:K(f), for i = 1:M, for h = 1:K(i), for ni = 1+(0:N), for m = 2:MR
185 ceq(end+1) = p2(f,nf,k,i,ni,h,m);
186 end, end, end, end, end, end
187
188 % 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];
189 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
190 ceq(end+1) = p2(i,ni,h,j,nj,k,m) - p2(j,nj,k,i,ni,h,m);
191 end, end, end, end, end, end, end
192
193 % 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];
194 for j = 1:M, for k =1:K(j), for nj = 1+(0:N), for i = 1:M, for m = 1:MR
195 if i~=j
196 % LHS
197 ceq(end+1) = p2(j,nj,k,j,nj,k,m);
198 % RHS
199 for ni = 1+(0:(N-nj)) %% added +1
200 for h = 1:K(i)
201 ceq(end) = ceq(end) - p2(j,nj,k,i,ni,h,m);
202 end
203 end
204 end
205 end, end, end, end, end
206
207 %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];
208 for j = 1:M, for i = 1:M, for ki = 1:K(i)
209 % LHS
210 ceq(end+1) = e(i,ki);
211 % RHS
212 for nj = 1+(0:N), for kj = 1:K(j), for m = 1:MR, for ni = 1+(1:N)
213 if BB(m,i)==0
214 ceq(end) = ceq(end) - p2(j,nj,kj,i,ni,ki,m);
215 end
216 end, end, end, end
217 end, end, end
218
219 %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];
220 for i = 1:M, for k =1:K(i)
221 ceq(end+1) = 0;
222 % LHS
223 for j = 1:M, for h = 1:K(i)
224 ceq(end) = ceq(end) + q(i,j,k,h)*e(i,k);
225 end, end
226 % RHS
227 for j = 1:M, for h = 1:K(i)
228 ceq(end) = ceq(end) - q(i,j,h,k)*e(i,h);
229 end, end
230 end, end
231
232 %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];
233 for j = 1:M, for k =1:K(j), for nj = 1+(0:F(j)), for m = 1:MR
234 ceq(end+1) = 0;
235 % LHS
236 for i = 1:M, for ni = 1+(1:F(i)), for ki = 1:K(i)
237 ceq(end) = ceq(end) + (ni-1)*p2(j,nj,k,i,ni,ki,m); % recaled back ni
238 end, end, end
239 % RHS
240 ceq(end) = ceq(end) - N*p2(j,nj,k,j,nj,k,m);
241 end, end, end, end
242
243 %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;
244 ceq(end+1) = 0;
245 % LHS
246 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)
247 ceq(end) = ceq(end) + (ni-1)*(nj-1)*p2(j,nj,kj,i,ni,ki,m); % rescaled back ni and nj
248 end, end, end, end, end, end, end
249 % RHS
250 ceq(end) = ceq(end) - N^2;
251
252 % 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]
253 % >= 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]);
254 for j = 1:M, for k = 1:K(j), for i = 1:M, for m = 1:MR
255 c(end+1) = 0; % <= inequality
256 % LHS with sign swapped since >= in GLPK
257 for t = 1:M, for h = 1:K(t), for nj = 1+(0:N), for nt = 1+(0:N)
258 c(end) = c(end) - (nt-1)*p2(j,nj,k,t,nt,h,m); % rescaled back nt
259 end, end, end, end
260 % RHS with sign swapped since >= in GLPK
261 for h = 1:K(i), for nj = 1+(0:N), for ni = 1+(1:N)
262 c(end) = c(end) + N*(p2(j,nj,k,i,ni,h,m));
263 end, end, end
264 end, end, end, end
265 end
266end
267