LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_sqni.m
1%{
2%{
3 % @file pfqn_sqni.m
4 % @brief Single Queue Network Iteration (SQNI) approximate solver.
5%}
6%}
7
8%{
9%{
10 % @brief Single Queue Network Iteration (SQNI) approximate solver.
11 % @fn pfqn_sqni(N, L, Z)
12 % @param N Population vector.
13 % @param L Service demand vector.
14 % @param Z Think time vector.
15 % @return Q Mean queue lengths.
16 % @return U Utilization.
17 % @return X System throughput.
18%}
19%}
20function [Q,U,X]=pfqn_sqni(N,L,Z)
21queueIdx = 1;
22C = size(L,2);
23Nt = sum(N);
24X = zeros(1,C);
25if sum(N)<=0
26 Q = zeros(2,C);
27 U = zeros(2,C);
28 X = zeros(1,C);
29elseif sum(N)==1
30 for r=1:C
31 X(r) = N(r)/(Z(r)+L(r));
32 U(queueIdx,r) = X(r)*L(r);
33 Q(queueIdx,r) = X(r)*L(r);
34 end
35else
36 for r=1:C
37 Nr = N(r);
38 Lr = L(r);
39 Zr = Z(r);
40 Nvec_1r = N; Nvec_1r(r) = Nvec_1r(r) - 1;
41 Br = N./(Z+L+L.*(sum(N)-1-sum(Z.*Nvec_1r./(Z+L+L*(sum(N)-2))))) .* Z;
42 Br = Lr * sum(Br(setdiff(1:C,r)));
43 if Lr==0
44 X(r) = Nr / Zr;
45 else
46 X(r) = (Zr - (Br^2 - 2*Br*Lr*Nt - 2*Br*Zr + Lr^2*Nt^2 + 2*Lr*Nt*Zr - 4*Nr*Lr*Zr + Zr^2)^(1/2) - Br + Lr*Nt)/(2*Lr*Zr);
47 end
48 U(queueIdx,r) = X(r)*L(r);
49 Q(queueIdx,r) = N(r)-X(r)*Z(r);
50 end
51end
52for r=1:C
53 if Z(r)==0
54 X(r) = N(r)/(L(r)*(1+sum(Q,2,'omitnan')));
55 U(queueIdx,r) = X(r)*L(r);
56 Q(queueIdx,r) = N(r)-X(r)*Z(r);
57 end
58end
59end