LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_aql.m
1%{
2%{
3 % @file pfqn_aql.m
4 % @brief Approximate Queue Length (AQL) algorithm for product-form networks.
5%}
6%}
7
8function [XN,QN,UN,RN,numIters,AN]=pfqn_aql(L,N,Z,TOL,MAXITER,QN0)
9%{
10%{
11 % @brief Approximate Queue Length (AQL) algorithm for product-form networks.
12 % @fn pfqn_aql(L, N, Z, TOL, MAXITER, QN0)
13 % @param L Service demand matrix.
14 % @param N Population vector.
15 % @param Z Think time vector.
16 % @param TOL Tolerance for convergence.
17 % @param MAXITER Maximum number of iterations.
18 % @param QN0 Initial guess for queue lengths.
19 % @return XN System throughput.
20 % @return QN Mean queue lengths.
21 % @return UN Utilization.
22 % @return RN Residence times.
23 % @return numIters Number of iterations.
24 % @return AN Average arrival rate at nodes.
25%}
26%}
27[M,K]=size(L);
28if nargin<3
29 Z=zeros(1,K);
30end
31if nargin<6 || isempty(QN0) %~exist('QN','var')
32 QN0 = repmat(N,M,1)/M;
33else
34 QN0 = QN0+eps; % 0 gives problems
35end
36if nargin<4
37 TOL = 1e-7;
38end
39if nargin<5
40 MAXITER=1e3;
41end
42Q=cell(1,K+1);
43R=cell(1,K+1);
44X=cell(1,K+1);
45gamma = zeros(M,K);
46
47for t=0:K
48 n=oner(N,t);
49 for k=1:M
50 Q{t+1}(k,1)=QN0(k);
51 end
52end
53it = 0;
54while 1
55 Q_olditer = Q;
56 it = it + 1;
57 for t=0:K
58 n=oner(N,t);
59 for k=1:M
60 for s=1:K
61 R{t+1}(k,s) = L(k,s)*(1+(sum(n)-1)*(Q{t+1}(k)/sum(n)-gamma(k,s)));
62 end
63 end
64 for s=1:K
65 X{t+1}(s) = n(s)/(Z(s)+sum(R{t+1}(:,s)));
66 end
67 for k=1:M
68 Q{t+1}(k) = X{t+1}(:)'*R{t+1}(k,:)';
69 end
70 end % for t
71 for k=1:M
72 for s=1:K
73 gamma(k,s) = (Q{0+1}(k)/sum(N)) - (Q{s+1}(k)/(sum(N)-1));
74 end
75 end
76 if max(abs((Q_olditer{1}(:)-Q{1}(:))./Q{1}(:))) < TOL || it == MAXITER
77 numIters=it;
78 break
79 end
80end
81XN = X{1};
82RN = R{1};
83for k=1:M
84 for s=1:K
85 UN(k,s) = XN(s)*L(k,s);
86 QN(k,s) = UN(k,s)*(1+Q{s+1}(k));
87 AN(k,s) = Q{s+1}(k);
88 end
89end
90end
Definition mmt.m:92