LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_mvamx.m
1%{
2%{
3 % @file pfqn_mvamx.m
4 % @brief Exact MVA for mixed open/closed single-server networks.
5%}
6%}
7
8%{
9%{
10 % @brief Exact MVA for mixed open/closed single-server networks.
11 % @fn pfqn_mvamx(lambda, D, N, Z, mi)
12 % @param lambda Arrival rate vector.
13 % @param D Service demand matrix.
14 % @param N Population vector.
15 % @param Z Think time vector.
16 % @param mi Queue replication factors (default: ones).
17 % @return XN System throughput.
18 % @return QN Mean queue lengths.
19 % @return UN Utilization.
20 % @return CN Cycle times.
21 % @return lGN Logarithm of normalizing constant.
22%}
23%}
24function [XN,QN,UN,CN,lGN] = pfqn_mvamx(lambda,D,N,Z, mi)
25% [XN,QN,UN,CN,LGN] = PFQN_MVAMX(LAMBDA,D,N,Z, MI)
26
27if any(N(lambda>0)>0 & isfinite(N(lambda>0)))
28 line_error(mfilename,'Arrival rate cannot be specified on closed classes.');
29end
30[M,R] = size(D);
31if nargin<5 %~exist('mi','var')
32 mi = ones(M,1);
33end
34openClasses = find(isinf(N));
35closedClasses = setdiff(1:length(N), openClasses);
36
37XN = zeros(1,R);
38UN = zeros(M,R);
39CN = zeros(M,R);
40QN = zeros(M,R);
41for r=openClasses
42 for ist=1:M
43 UN(ist,r) = lambda(r)*D(ist,r);
44 end
45 XN(r) = lambda(r);
46end
47
48UNt = sum(UN,2);
49
50if isempty(Z)
51 Z = zeros(1,R);
52end
53Dc = D(:,closedClasses) ./ (1-repmat(UNt,1,length((closedClasses))));
54[XNc,QNc,~,CNc,lGN] = pfqn_mva(Dc,N(closedClasses),Z(closedClasses),mi);
55XN(closedClasses) = XNc;
56QN(:,closedClasses) = QNc;
57CN(:,closedClasses) = CNc;
58for ist = 1:M
59 for r=closedClasses
60 UN(ist,r) = XN(r)*D(ist,r);
61 end
62end
63for ist = 1:M
64 for r=openClasses
65 if isempty(QNc)
66 CN(ist,r) = D(ist,r) / (1-UNt(ist));
67 else
68 CN(ist,r) = D(ist,r) * (1+sum(QNc(ist,:))) / (1-UNt(ist));
69 end
70 QN(ist,r) = CN(ist,r) * XN(r);
71 end
72end
73end