LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_mvams.m
1%{
2%{
3 % @file pfqn_mvams.m
4 % @brief General-purpose MVA for mixed networks with multiserver nodes.
5%}
6%}
7
8%{
9%{
10 % @brief General-purpose MVA for mixed networks with multiserver nodes.
11 % @fn pfqn_mvams(lambda, L, N, Z, mi, S)
12 % @param lambda Arrival rate vector.
13 % @param L Service demand matrix.
14 % @param N Population vector.
15 % @param Z Think time vector.
16 % @param mi Queue replication factors (default: ones).
17 % @param S Number of servers per station (default: ones).
18 % @return XN System throughput.
19 % @return QN Mean queue lengths.
20 % @return UN Utilization.
21 % @return CN Residence times (M x R), as in PFQN_MVA.
22 % @return lG Logarithm of normalizing constant.
23%}
24%}
25function [XN,QN,UN,CN,lG]=pfqn_mvams(lambda,L,N,Z,mi,S)
26% [XN,QN,UN,CN,LOGG]=PFQN_MVAMS(LAMBDA,L,N,Z,MI,S)
27
28% this is a general purpose script to handle mixed qns with multi-server nodes
29% S(i) number of servers in station i
30[M,R]=size(L); % get number of queues (M) and classes (R)
31Ntot = 0;
32hasOpenClasses = false;
33for r = 1:R
34 if isinf(N(r))
35 hasOpenClasses = true;
36 else
37 Ntot = Ntot + N(r);
38 end
39end
40mu = ones(M,Ntot);
41if nargin<6 %~exist('S','var')
42 S = ones(M,1);
43end
44if nargin<5 %~exist('mi','var')
45 mi = ones(M,1);
46end
47if isempty(Z)
48 Z = zeros(1,R);
49elseif size(Z,1) > 1
50 % Sum think times across multiple delay stations
51 Z = sum(Z,1);
52end
53for ist=1:M
54 mu(ist,:) = min(1:Ntot,S(ist)*ones(1,Ntot));
55end
56hasMultiServer = false;
57for ist = 1:M
58 if isfinite(S(ist)) && S(ist) > 1
59 hasMultiServer = true;
60 break;
61 end
62end
63
64if ~hasMultiServer % if no multi-server nodes
65 if hasOpenClasses % open or mixed model
66 [XN,QN,UN,CN,lG] = pfqn_mvamx(lambda,L,N,Z,mi);
67 else % closed model
68 [XN,QN,UN,CN,lG] = pfqn_mva(L,N,Z,mi);
69 end
70else % if the model has multi-server nodes
71 if hasOpenClasses % open or mixed model
72 if max(mi) == 1
73 lG = NaN; % NC not available in this case
74 [XN,QN,UN,CN] = pfqn_mvaldms(lambda,L,N,Z,S);
75 else
76 line_error(mfilename,'Queue replicas not available in exact MVA for mixed models.');
77 end
78 else
79 [XN,QN,UN,CN,lG] = pfqn_mvald(L,N,Z,mu);
80 lG=lG(end);
81 % PFQN_MVALD belongs to the load-dependent family and reports a (1 x R)
82 % cycle time, but PFQN_MVAMS follows the PFQN_MVA contract as its other
83 % three branches do: an (M x R) per-station residence time.
84 CN = zeros(M,R);
85 for r=1:R
86 if N(r) > 0
87 CN(:,r) = QN(:,r)/XN(r);
88 else
89 % an absent class, as in PFQN_MVA
90 CN(:,r) = L(:,r).*mi(:);
91 end
92 end
93 end
94end
95return
96end
Definition fjtag.m:157
Definition Station.m:245