LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_qd.m
1%{
2%{
3 % @file pfqn_qd.m
4 % @brief Queue-Dependent (QD) approximate MVA solver.
5%}
6%}
7
8%{
9%{
10 % @brief Queue-Dependent (QD) approximate MVA solver.
11 % @fn pfqn_qd(L, N, ga, be, Q0)
12 % @param L Service demand matrix.
13 % @param N Population vector.
14 % @param ga Gamma scaling function (default: ones).
15 % @param be Beta scaling function (default: ones).
16 % @param Q0 Initial queue length estimate (optional).
17 % @return Q Mean queue lengths.
18 % @return X System throughput.
19 % @return U Utilization.
20 % @return iter Number of iterations performed.
21%}
22%}
23function [Q,X,U,iter] = pfqn_qd(L,N,ga,be,Q0)
24[M,R]=size(L);
25
26Q = zeros(M,R);
27if nargin <3
28 ga = @(A) ones(M,1);
29end
30if nargin <4
31 be = @(A) ones(M,R);
32end
33if nargin < 5
34 Q = L ./ repmat(sum(L,1),M,1) .* repmat(N,M,1);
35else
36 Q=Q0;
37end
38delta = (sum(N) - 1) / sum(N);
39deltar = (N - 1) ./ N;
40Ak = cell(1,R);
41Akr = zeros(M,R);
42for r=1:R
43 Ak{r} = zeros(M,1);
44end
45
46Q_1 = Q*10;
47tol = 1e-6;
48iter = 0;
49while max(max(abs(Q-Q_1))) > tol
50 iter = iter + 1;
51 Q_1 = Q;
52 for k=1:M
53 for r=1:R
54 Ak{r}(k,1) = 1 + delta * sum(Q(k,:));
55 Akr(k,r) = 1 + deltar(r) * Q(k,r);
56 end
57 end
58
59 % Q
60 for r=1:R
61 g = ga(Ak{r});
62 b = be(Akr);
63 for k=1:M
64 C(k,r) = L(k,r) * g(k) * b(k,r) * (1 + delta * sum(Q(k,:)));
65 end
66
67 X(r) = N(r) / sum(C(:,r));
68
69 for k=1:M
70 Q(k,r) = X(r) * C(k,r);
71 U(k,r) = L(k,r) * g(k) * b(k,r) * X(r);
72 end
73 end
74end
75
76end