LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_fnc.m
1%{
2%{
3 % @file pfqn_fnc.m
4 % @brief Generate load-dependent rates for functional server model f(n)=n+c.
5%}
6%}
7
8%{
9%{
10 % @brief Generate load-dependent rates for functional server model f(n)=n+c.
11 % @fn pfqn_fnc(alpha, c)
12 % @param alpha Rate parameters (Mx N matrix).
13 % @param c Constant offset parameter (default: auto-determined).
14 % @return mu Load-dependent service rates.
15 % @return c Determined offset constant.
16%}
17%}
18function [mu,c] = pfqn_fnc(alpha,c)
19% generate rates for functional server f(n)=n+c
20M = size(alpha,1);
21if nargin<2
22 c = zeros(1,M);
23 mu = pfqn_fnc(alpha,c);
24 if ~all(isfinite(mu)) % first retry with -1/2
25 c = -0.5*ones(1,M);
26 mu = pfqn_fnc(alpha,c);
27 end
28 dt = 0;
29 it = 0;
30 while ~all(isfinite(mu)) % randomize c if need be but unlikely
31 it = it +1;
32 dt = dt + 0.05;
33 c = -1/2+dt;
34 mu = pfqn_fnc(alpha,c);
35 if c>=2
36 break
37 end
38 end
39 return
40end
41N = length(alpha(1,:));
42mu = zeros(M,N);
43for ist=1:M
44 mu(ist,1) = alpha(ist,1)/(1+c(ist));
45 alphanum = sparse(zeros(N,N));
46 alphaden = sparse(zeros(N,N));
47 for n=2:N
48 alphanum(n,1) = alpha(ist,n);
49 alphaden(n,1) = alpha(ist,n-1);
50 for k=2:(n-1)
51 alphanum(n,k) = alphanum(n,k-1) * alpha(ist,n-k+1);
52 alphaden(n,k) = alphaden(n,k-1) * alpha(ist,n-k);
53 end
54 end
55 for n=2:N
56 rho = 0;
57 muden = 1;
58 for k=1:(n-1)
59 muden = muden * mu(ist,k);
60 rho = rho+(alphanum(n,k)-alphaden(n,k)) / muden;
61 end
62 mu(ist,n) = alphanum(n,n-1)*alpha(ist,1)/muden;
63 mu(ist,n) = mu(ist,n)/(1-rho);
64 end
65end
66mu(isnan(mu)) = Inf;
67mu(abs(mu)>1e15) = Inf;
68for ist=1:M
69 if any(isinf(mu(ist,:)))
70 s = min(find(isinf(mu(ist,:))));
71 mu(ist,s:end)=Inf;
72 end
73end
74%mu(mu==0) = Inf;
75end