LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
polling_qsys_gated.m
1function W=polling_qsys_gated(arvMAPs,svcMAPs,switchMAPs)
2% W=polling_qsys_gated(arvMAPs,svcMAPs,switchMAPs)
3%
4% Exact mean waiting time solution of a polling system with open arrivals.
5% All queues use gated service.
6%
7% Takagi, ACM Computing Surveys, Vol. 20, No. 1, March 1988, eq (20)
8%
9% Example:
10% W=polling_qsys_gated({map_exponential(1/0.6),map_exponential(1/0.2)},{map_exponential(1),map_exponential(1)},{map_exponential(1),map_exponential(1)})
11
12n = length(arvMAPs); % number of classes
13for i=1:n
14 lambda(i) = map_lambda(arvMAPs{i});
15 b(i) = map_mean(svcMAPs{i});
16 b2(i) = map_moment(svcMAPs{i},2);
17 rho1(i) = lambda(i)*b(i);
18 r1(i) = map_mean(switchMAPs{i});
19 delta2(i) = map_var(switchMAPs{i});
20end
21rho=sum(rho1);
22r=sum(r1);
23% station time method Ferguson and Aminetzah 1985 as reported by Takagi
24W=gated(n,rho,delta2,lambda,b2,rho1,r);
25end
26
27function W=gated(n,rho,delta2,lambda,b2,rho1,r)
28lst1 = [];
29lst2 = [];
30
31for i = 1:n
32 for j = 1:n
33 if i > j
34 t1 = zeros(1,n^2);
35 for m = i:n
36 t1((j-1)*n + m) = -1;
37 end
38 for m = 1:j-1
39 t1((j-1)*n + m) = -1;
40 end
41 for m = j:i-1
42 t1((m-1)*n + j) = -1;
43 end
44 t1((i-1)*n + j) = 1 / rho1(i);
45 lst1 = [lst1; t1];
46 lst2 = [lst2; 0];
47 elseif j > i
48 t1 = zeros(1,n^2);
49 for m = i:j-1
50 t1((j-1)*n + m) = -1;
51 end
52 for m = j:n
53 t1((m-1)*n + j) = -1;
54 end
55 for m = 1:i-1
56 t1((m-1)*n + j) = -1;
57 end
58 t1((i-1)*n + j) = 1 / rho1(i);
59 lst1 = [lst1; t1];
60 lst2 = [lst2; 0];
61 else
62 t1 = zeros(1,n^2);
63 t1((i-1)*n + i) = t1((i-1)*n + i) + 1;
64 for m = 1:n
65 if i ~= m
66 t1((i-1)*n + m) = -rho1(i);
67 end
68 end
69 for m = 1:n
70 t1((m-1)*n + i) = t1((m-1)*n + i)-(rho1(i)^2);
71 end
72 lst1 = [lst1; t1];
73 temp = delta2(i) + lambda(i) * b2(i) * r / (1 - rho);
74 lst2 = [lst2; temp];
75 end
76 end
77end
78final = linsolve(lst1, lst2);
79W = zeros(1, n);
80
81for i = 1:n
82 temp = (1 + rho1(i)) * r / (2 * (1 - rho));
83 sum = 0;
84 for j = 1:n
85 if i ~= j
86 sum = sum + final((i-1)*n + j);
87 end
88 end
89 sum = sum * (1 / rho1(i));
90 for j = 1:n
91 sum = sum + final((j-1)*n + i);
92 end
93 temp = temp + (1 - rho) * (1 + rho1(i)) * sum / (2 * r);
94 %disp(temp);
95 W(i) = temp;
96end
97end