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