2% MATLAB port of example_bas.mod
3% BAS network with 10 jobs and 5 queues
12params.M = 5; % Number of queues
13params.N = 10; % Total population
14params.f = 1; % Finite capacity queue (1-based index)
17params.F = [5; 10; 10; 10; 10];
19% Number of phases per queue
20params.K = [2; 2; 2; 2; 2];
22% Routing probabilities
24 0.0, 0.5, 0.0, 0.0, 0.5; % from queue 1
25 0.5, 0.0, 0.5, 0.0, 0.0; % from queue 2
26 0.0, 0.5, 0.0, 0.5, 0.0; % from queue 3
27 0.0, 0.0, 0.5, 0.0, 0.5; % from queue 4
28 0.5, 0.0, 0.0, 0.5, 0.0 % from queue 5
31% Service rates mu{i}(k,h) - completion transition rates
32params.mu = cell(5, 1);
35 1.016186e+00, 2.585708e-05;
36 1.569888e-03, 1.413298e-02
40% Background transition rates v{i}(k,h)
43 params.v{i} = zeros(2, 2);
46%% Blocking configurations
47% MR = number of blocking configurations
50% BB(m, i) = 1
if queue i
is blocked in configuration m
52 0, 0, 0, 0, 0; % m=1: no blocking
53 0, 1, 0, 0, 0; % m=2: queue 2 blocked
54 0, 1, 0, 0, 1; % m=3: queues 2,5 blocked
55 0, 0, 0, 0, 1; % m=4: queue 5 blocked
56 0, 1, 0, 0, 1 % m=5: queues 2,5 blocked
59% MM(m, order) = queue index at position
'order' in blocking list
60% MM(m,1) = first blocked queue, MM(m,2) = second blocked queue
63 2, 0; % m=2: queue 2 first
64 2, 5; % m=3: queue 2 first, queue 5 second
65 5, 0; % m=4: queue 5 first
66 5, 2 % m=5: queue 5 first, queue 2 second
69% ZZ(m) = number of blocked queues in configuration m
70params.ZZ = [0; 1; 2; 1; 2];
72% ZM = maximum blocking depth
75% MM1(m, j) = extended blocking order info
76% Used
for THM3L constraint
85%% Solve
for minimum utilization at queue 1
86fprintf(
'====================================\n');
87fprintf(
'QRF BAS Example\n');
88fprintf(
'====================================\n');
89fprintf(
'Network: %d queues, %d jobs\n', params.M, params.N);
90fprintf(
'Finite capacity queue: %d (capacity=%d)\n', params.f, params.F(params.f));
91fprintf(
'Capacities: [%s]\n', num2str(params.F
'));
92fprintf('Phases: [%s]\n
', num2str(params.K'));
93fprintf(
'Blocking configurations: %d\n', params.MR);
96fprintf(
'--- Minimizing Utilization at Queue 1 ---\n');
97[result_min, x_min, fval_min, exitflag_min] = qrf_bas(params, 1,
'min');
99fprintf(
'\n--- Maximizing Utilization at Queue 1 ---\n');
100[result_max, x_max, fval_max, exitflag_max] = qrf_bas(params, 1,
'max');
103fprintf(
'\n====================================\n');
105fprintf(
'====================================\n');
106fprintf(
'Utilization bounds for Queue 1:\n');
107fprintf(
' Lower bound: %.6f\n', fval_min);
108fprintf(
' Upper bound: %.6f\n', fval_max);
109fprintf(
'\nAll queue utilizations (at minimum):\n');
111 fprintf(
' Queue %d: U = %.6f\n', i, result_min.U(i));