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;
40
41Q_1 = Q*10;
42tol = 1e-6;
43iter = 0;
44while max(max(abs(Q-Q_1))) > tol
45 iter = iter + 1;
46 Q_1 = Q;
47 for k=1:M
48 for r=1:R
49 Ak{r}(k,1) = 1 + delta * sum(Q(k,:));
50 Akr(k,r) = 1 + deltar(r) * Q(k,r);
51 end
52 end
53
54 % Q
55 for r=1:R
56 g = ga(Ak{r});
57 b = be(Akr);
58 for k=1:M
59 C(k,r) = L(k,r) * g(k) * b(k,r) * (1 + delta * sum(Q(k,:)));
60 end
61
62 X(r) = N(r) / sum(C(:,r));
63
64 for k=1:M
65 Q(k,r) = X(r) * C(k,r);
66 U(k,r) = L(k,r) * g(k) * b(k,r) * X(r);
67 end
68 end
69end
70
71end