LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
example_bas.m
1%% Example BAS Network
2% MATLAB port of example_bas.mod
3% BAS network with 10 jobs and 5 queues
4
5clear;
6clc;
7
8%% Define parameters
9params = struct();
10
11% Network size
12params.M = 5; % Number of queues
13params.N = 10; % Total population
14params.f = 1; % Finite capacity queue (1-based index)
15
16% Queue capacities
17params.F = [5; 10; 10; 10; 10];
18
19% Number of phases per queue
20params.K = [2; 2; 2; 2; 2];
21
22% Routing probabilities
23params.r = [
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
29];
30
31% Service rates mu{i}(k,h) - completion transition rates
32params.mu = cell(5, 1);
33for i = 1:5
34 params.mu{i} = [
35 1.016186e+00, 2.585708e-05;
36 1.569888e-03, 1.413298e-02
37 ];
38end
39
40% Background transition rates v{i}(k,h)
41params.v = cell(5, 1);
42for i = 1:5
43 params.v{i} = zeros(2, 2);
44end
45
46%% Blocking configurations
47% MR = number of blocking configurations
48params.MR = 5;
49
50% BB(m, i) = 1 if queue i is blocked in configuration m
51params.BB = [
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
57];
58
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
61params.MM = [
62 0, 0; % m=1
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
67];
68
69% ZZ(m) = number of blocked queues in configuration m
70params.ZZ = [0; 1; 2; 1; 2];
71
72% ZM = maximum blocking depth
73params.ZM = 2;
74
75% MM1(m, j) = extended blocking order info
76% Used for THM3L constraint
77params.MM1 = [
78 0, 0, 0, 0, 0; % m=1
79 -1,-1,-1,-1, 3; % m=2
80 0, 0, 0, 0, 0; % m=3
81 -1, 5,-1,-1,-1; % m=4
82 0, 0, 0, 0, 0 % m=5
83];
84
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);
94fprintf('\n');
95
96fprintf('--- Minimizing Utilization at Queue 1 ---\n');
97[result_min, x_min, fval_min, exitflag_min] = qrf_bas(params, 1, 'min');
98
99fprintf('\n--- Maximizing Utilization at Queue 1 ---\n');
100[result_max, x_max, fval_max, exitflag_max] = qrf_bas(params, 1, 'max');
101
102%% Summary
103fprintf('\n====================================\n');
104fprintf('SUMMARY\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');
110for i = 1:params.M
111 fprintf(' Queue %d: U = %.6f\n', i, result_min.U(i));
112end