LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
example_global_patience.m
1% Example: Global Class-Level Patience
2%
3% This example demonstrates setting patience at the job class level rather
4% than per-queue. When patience is set globally on a class, it applies to
5% all queues that the class visits (unless overridden by queue-specific settings).
6%
7% Model:
8% - Three queues in series
9% - Two job classes:
10% * Class 1: Global exponential patience (applies to all queues)
11% * Class 2: Global deterministic patience + queue-specific override at Queue2
12%
13% Copyright (c) 2012-2026, Imperial College London
14% All rights reserved.
15
16clear node jobclass solver AvgTable
17
18model = Network('Global Patience Example');
19
20% Define nodes
21node{1} = Source(model, 'Source');
22node{2} = Queue(model, 'Queue1', SchedStrategy.FCFS);
23node{3} = Queue(model, 'Queue2', SchedStrategy.FCFS);
24node{4} = Queue(model, 'Queue3', SchedStrategy.FCFS);
25node{5} = Sink(model, 'Sink');
26
27% Define job classes
28jobclass{1} = OpenClass(model, 'GlobalExpClass', 0);
29jobclass{2} = OpenClass(model, 'OverrideClass', 0);
30
31% Set GLOBAL patience at the class level
32% This applies to ALL queues unless overridden
33jobclass{1}.setPatience(Exp(0.4)); % Mean patience = 2.5 everywhere
34jobclass{2}.setPatience(Det(4.0)); % Fixed patience = 4.0 everywhere (by default)
35
36% Set service times
37for c = 1:2
38 node{2}.setService(jobclass{c}, Exp(1.0));
39 node{3}.setService(jobclass{c}, Exp(1.2));
40 node{4}.setService(jobclass{c}, Exp(0.8));
41end
42
43% Set arrival rates
44node{1}.setArrival(jobclass{1}, Exp(0.3));
45node{1}.setArrival(jobclass{2}, Exp(0.2));
46
47% Override global patience for Class 2 at Queue2 only
48% This demonstrates per-queue settings taking precedence over global settings
49node{3}.setPatience(jobclass{2}, Exp(0.2)); % More impatient at Queue2
50
51% Define routing
52K = model.getNumberOfClasses();
53P = cell(K, K);
54for c = 1:K
55 P{c,c} = [0, 1, 0, 0, 0; % Source -> Queue1
56 0, 0, 1, 0, 0; % Queue1 -> Queue2
57 0, 0, 0, 1, 0; % Queue2 -> Queue3
58 0, 0, 0, 0, 1; % Queue3 -> Sink
59 0, 0, 0, 0, 0]; % Sink -> nowhere
60end
61
62model.link(P);
63
64%% Solve with JMT
65options = Solver.defaultOptions;
66options.keep = true;
67options.verbose = 1;
68options.samples = 1e5;
69options.seed = 23000;
70
71disp('This example demonstrates global class-level patience configuration.');
72disp(' ');
73disp('Class 1 (GlobalExpClass):');
74disp(' - Has exponential patience (mean = 2.5) at ALL queues (global setting)');
75disp(' ');
76disp('Class 2 (OverrideClass):');
77disp(' - Has deterministic patience (timeout = 4.0) at Queue1 and Queue3 (global setting)');
78disp(' - Has exponential patience (mean = 5.0) at Queue2 (per-queue override)');
79disp(' ');
80
81solver{1} = JMT(model, options);
82
83fprintf(1, 'SOLVER: %s\n', solver{1}.getName());
84AvgTable{1} = solver{1}.getAvgTable();
85AvgTable{1}
86
87disp(' ');
88disp('Note: Global patience settings simplify configuration when the same');
89disp(' patience behavior applies across multiple queues. Per-queue settings');
90disp(' can override global settings when needed.');
Definition mmt.m:92