LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_bsfcfs.m
1%{
2%{
3 % @file pfqn_bsfcfs.m
4 % @brief Bard-Schweitzer approximate MVA for FCFS scheduling with weighted priorities.
5%}
6%}
7
8%{
9%{
10 % @brief Bard-Schweitzer approximate MVA for FCFS scheduling with weighted priorities.
11 % @fn pfqn_bsfcfs(L, N, Z, tol, maxiter, QN, weight)
12 % @param L Service demand matrix.
13 % @param N Population vector.
14 % @param Z Think time vector (default: zeros).
15 % @param tol Convergence tolerance (default: 1e-6).
16 % @param maxiter Maximum number of iterations (default: 1000).
17 % @param QN Initial queue length matrix (default: uniform distribution).
18 % @param weight Weight matrix for relative priorities (default: ones).
19 % @return XN System throughput.
20 % @return QN Mean queue lengths.
21 % @return UN Utilization.
22 % @return RN Residence times.
23 % @return it Number of iterations performed.
24%}
25%}
26function [XN,QN,UN,RN,it]=pfqn_bsfcfs(L,N,Z,tol,maxiter,QN,weight)
27% [XN,QN,UN,RN]=PFQN_BSFCFS(L,N,Z,TOL,MAXITER,QN,WEIGHT)
28
29if nargin<3%~exist('Z','var')
30 Z=0*N;
31end
32if nargin<4%~exist('tol','var')
33 tol = 1e-6;
34end
35if nargin<5%~exist('maxiter','var')
36 maxiter = 1000;
37end
38[M,R]=size(L);
39CN=zeros(M,R);
40if nargin<6 %~exist('QN','var')
41 QN=repmat(N,M,1)/M;
42else
43 QN = QN+eps; % 0 gives problems
44end
45if nargin<7 %~exist('weight','var')
46 weight = ones(M,R);
47end
48XN=zeros(1,R);
49UN=zeros(M,R);
50relprio=zeros(M,R);
51for it=1:maxiter
52 QN_1 = QN;
53 for ist=1:M
54 for r=1:R
55 relprio(ist,r) = (QN(ist,r)*weight(ist,r));
56 end
57 end
58 for r=1:R
59 for ist=1:M
60 CN(ist,r) = L(ist,r);
61 for s=1:R
62 if s~=r
63 % FCFS approximation
64 CN(ist,r) = CN(ist,r) + L(ist,s)*QN(ist,s)*relprio(ist,s)/relprio(ist,r);
65 else
66 CN(ist,r) = CN(ist,r) + L(ist,r)*QN(ist,r)*(N(r)-1)/N(r)*relprio(ist,s)/relprio(ist,r);
67 end
68 end
69 end
70 XN(r) = N(r)/(Z(r)+sum(CN(:,r)));
71 end
72 for r=1:R
73 for ist=1:M
74 QN(ist,r) = XN(r)*CN(ist,r);
75 end
76 end
77 for r=1:R
78 for ist=1:M
79 UN(ist,r) = XN(r)*L(ist,r);
80 end
81 end
82 if max(abs(1-QN./QN_1)) < tol
83 break
84 end
85end
86RN = QN ./ repmat(XN,M,1);
87end