LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_mvaldmx_ec.m
1%{
2%{
3 % @file pfqn_mvaldmx_ec.m
4 % @brief Compute effective capacity terms for MVALDMX solver.
5%}
6%}
7
8%{
9%{
10 % @brief Compute effective capacity terms for MVALDMX solver.
11 % @fn pfqn_mvaldmx_ec(lambda, D, mu)
12 % @param lambda Arrival rate vector.
13 % @param D Service demand matrix.
14 % @param mu Load-dependent rate matrix.
15 % @return EC Effective capacity matrix.
16 % @return E E-function values.
17 % @return Eprime E-prime function values.
18 % @return Lo Open class load vector.
19%}
20%}
21function [EC,E,Eprime,Lo] = pfqn_mvaldmx_ec(lambda,D,mu)
22% [EC,E,EPRIME,LO] = PFQN_MVALDMX_EC(LAMBDA,D,MU)
23% Compute the effective capacity terms in MVALDMX
24% Think times are not handled since this assumes limited load-dependence
25[M,R] = size(mu);
26%Nt = sum(N(isfinite(N)));
27Lo = zeros(M,1);
28for ist=1:M
29 Lo(ist) = lambda*D(ist,:)';
30end
31
32b = zeros(M,1); % limited load dependence level
33for ist=1:M
34 b(ist) = find(mu(ist,:)==mu(ist,end), 1 );
35end
36Nt = size(mu,2); % compute extra elements if present
37mu(:,end+1:end+1+max(b)) = repmat(mu(:,end),1,1+max(b));
38C = 1./mu;
39
40EC = zeros(M,Nt);
41%Ever = zeros(M,1+Nt);
42E = zeros(M,1+Nt);
43Eprime = zeros(M,1+Nt);
44for ist=1:M
45 E1 = zeros(1+Nt);
46 E2 = zeros(1+Nt);
47 E3 = zeros(1+Nt);
48 F2 = zeros(1+Nt,1+b(ist)-2);
49 F3 = zeros(1+Nt,1+b(ist)-2);
50
51 E2prime = zeros(1+Nt);
52 F2prime = zeros(1+Nt,1+b(ist)-2);
53 for n=0:Nt
54 if n >= b(ist)
55 E(ist,1+n) = 1 / (1-Lo(ist)*C(ist,b(ist)))^(n+1);
56 % Ever(i,1+n) = 1 / (1-Lo(i)*C(i,b(i)))^(n+1);
57 Eprime(ist,1+n) = C(ist,b(ist))*E(ist,1+n);
58 else % n <= b(i)-1
59 %% compute E1
60 if n==0
61 E1(1+n) = 1 / (1-Lo(ist)*C(ist,b(ist)));
62 for j=1:(b(ist)-1)
63 E1(1+n) = E1(1+n) * C(ist,j) / C(ist,b(ist));
64 end
65 else % n>0
66 E1(1+n) = 1 / (1-Lo(ist)*C(ist,b(ist))) * C(ist,b(ist)) / C(ist,n) * E1(1+(n-1));
67 end
68
69 %% compute F2
70 for n0 = 0:(b(ist)-2)
71 if n0 == 0
72 F2(1+n,1+n0) = 1;
73 else
74 F2(1+n,1+n0) = (n+n0)/n0 * Lo(ist) * C(ist,n+n0) * F2(1+n,1+(n0-1));
75 end
76 end
77
78 %% compute E2
79 E2(1+n) = sum(F2(1+n,1+(0:b(ist)-2)));
80
81 %% compute F3
82 for n0 = 0:(b(ist)-2)
83 if n == 0 && n0 == 0
84 F3(1+n,1+n0) = 1;
85 for j=1:(b(ist)-1)
86 F3(1+n,1+n0) = F3(1+n,1+n0) * C(ist,j) / C(ist,b(ist));
87 end
88 elseif n > 0 && n0 == 0
89 F3(1+n,1+n0) = C(ist,b(ist)) / C(ist,n) * F3(1+(n-1),1+0);
90 else
91 F3(1+n,1+n0) = (n+n0)/n0 * Lo(ist) * C(ist,b(ist)) * F3(1+n,1+(n0-1));
92 end
93 end
94
95 %% compute E3
96 E3(1+n) = sum(F3(1+n,1+(0:b(ist)-2)));
97
98 %% compute F2prime
99 for n0 = 0:(b(ist)-2)
100 if n0 == 0
101 F2prime(1+n,1+n0) = C(ist,n+1);
102 else
103 F2prime(1+n,1+n0) = (n+n0)/n0 * Lo(ist) * C(ist,n+n0+1) * F2prime(1+n,1+(n0-1));
104 end
105 end
106
107 %% compute E2prime
108 E2prime(1+n) = sum(F2prime(1+n,1+(0:(b(ist)-2))));
109
110 % finally, compute E, Eprime, and EC
111 E(ist,1+n) = E1(1+n) + E2(1+n) - E3(1+n);
112 if n<b(ist)-1
113 Eprime(ist,1+n) = C(ist,b(ist)) * E1(1+n) + E2prime(1+n) - C(ist,b(ist)) * E3(1+n);
114 else %n>=b(i)-1
115 Eprime(ist,1+n) = C(ist,b(ist)) * E(ist,1+n);
116 end
117 %% verification of E
118 % Ever(i,1+n) = C(i,b(i))^(n+1-b(i)) / (1-Lo(i)*C(i,b(i)))^(n+1) * prod(C(i,(n+1):(b(i)-1)));
119 % for n0 = 0:(b(i)-2)
120 % Ever(i,1+n) = Ever(i,1+n) + nchoosek(n+n0,n0) * Lo(i)^n0 * (prod(C(i,(n+1):(n+n0)))-C(i,b(i))^(n0+n+1-b(i))*prod(C(i,(n+1):(b(i)-1))));
121 % end
122 end
123 % %% verification2 of E
124 % Ever(i,1+n) = 0;
125 % for n0=0:1000
126 % if n+n0+1>b(i)
127 % C(i,n+n0+1) = 1/mu(i,b(i));
128 % end
129 % Ever(i,1+n) = Ever(i,1+n) +nchoosek(n+n0,n0) * Lo(i)^n0 * prod(C(i,(n+1):(n+n0)));
130 % end
131 % %% verification of Eprime
132 % Eprimever(i,1+n) = 0;
133 % for n0=0:1000
134 % if n+n0+1>b(i)
135 % C(i,n+n0+1) = 1/mu(i,b(i));
136 % end
137 % Eprimever(i,1+n) = Eprimever(i,1+n) +nchoosek(n+n0,n0) * Lo(i)^n0 * prod(C(i,(n+1):(n+n0+1)));
138 % end
139 end
140 % Eprime = Eprimever;
141 % EC not defined for n=0
142 for n=1:Nt
143 %if n>=b(i)
144 % EC(i,n) = C(i,b(i)) / (1-Lo(i)*C(i,b(i)));
145 %elseif n>0
146 EC(ist,n) = C(ist,n) * E(ist,1+n) / E(ist,1+(n-1));
147 %end
148 end
149end
150%EC
151%E
152%Ever
153%Eprime
154%Eprimever
155%Eprime = Eprimever;
156end