LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
qbd_setupdelayoff.m
1%{ @file qbd_setupdelayoff.m
2 % @brief Queue-length analysis for system with setup delay and turn-off
3 %
4 % @author LINE Development Team
5%}
6
7%{
8 % @brief Analyzes queue length for system with setup and turn-off phases
9 %
10 % @details
11 % This function performs queue-length analysis for a queueing system with
12 % setup delay and turn-off periods using QBD methods.
13 %
14 % @par Syntax:
15 % @code
16 % QN = qbd_setupdelayoff(lambda, mu, alpharate, alphascv, betarate, betascv)
17 % @endcode
18 %
19 % @par Parameters:
20 % <table>
21 % <tr><th>Name<th>Description
22 % <tr><td>lambda<td>Arrival rate
23 % <tr><td>mu<td>Service rate
24 % <tr><td>alpharate<td>Rate of setup delay phase
25 % <tr><td>alphascv<td>Squared coefficient of variation for setup delay
26 % <tr><td>betarate<td>Rate of turn-off phase
27 % <tr><td>betascv<td>Squared coefficient of variation for turn-off period
28 % </table>
29 %
30 % @par Returns:
31 % <table>
32 % <tr><th>Name<th>Description
33 % <tr><td>QN<td>Average queue length
34 % </table>
35%}
36function QN = qbd_setupdelayoff(lambda, mu, alpharate, alphascv, betarate, betascv)
37
38alpha = APH.fitMeanAndSCV(1/alpharate, alphascv).getProcess;
39na = length(alpha{1});
40
41beta = APH.fitMeanAndSCV(1/betarate, betascv).getProcess;
42nb = length(beta{1});
43n = na+nb;
44
45F = zeros(n); % forward transitions
46B = zeros(n); % backward transitions
47for i=1:na
48 F(i,i) = lambda;
49end
50for i=1:nb
51 F(na+i,na+1) = lambda;
52end
53F(na+1,na+1) = lambda;
54B(na+1,na+1) = mu;
55
56L = zeros(n); % local transitions
57for i=1:na
58 L(i,i) = alpha{1}(i,i) -lambda;
59 if i<na
60 L(i,(i+1):na) = alpha{1}(i,(i+1):na);
61 else
62 L(na,na+1) = -alpha{1}(end,end);
63 end
64end
65L(na+1,na+1) = -mu -lambda;
66for i=2:nb
67 L(na+i,na+i) = -lambda;
68end
69%[B,L,F]
70
71L0 = zeros(2); % initial block
72L0(2,1) = beta{2}(1,1);
73L0(1,1) = -lambda;
74L0(2,2) = -beta{2}(1,1) -lambda;
75
76L0 = zeros(na+nb); % local transitions
77for i=1:na
78 L0(i,i) = -lambda;
79end
80for i=1:nb
81 L0(na+i,na+i) = beta{1}(i,i) - lambda;
82 if i==nb
83 L0(na+i,1) = -beta{1}(i,i);
84 else
85 L0(na+i,na+i+1) = -beta{1}(i,i);
86 end
87end
88%[L0,F]
89
90[~,R,~] = QBD_CR(B,L,F);
91pn = QBD_pi(B,L0,R);
92
93QN = 0; % queue-lengths
94j = n+1;
95ni = 0;
96while 1
97 ni = ni + 1;
98 QN = QN + ni*sum(pn(j:(j+n)));
99 j = j +n;
100 if j+n>length(pn)
101 break;
102 end
103end
104end