LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
example_multiclass_mixed_impatience.m
1% Example: Multi-Class Queue with Mixed Impatience Distributions
2%
3% This example demonstrates customer impatience with different patience
4% distributions for different job classes in a multi-class queueing system.
5%
6% Model:
7% - Two queues in tandem
8% - Three job classes with different characteristics:
9% * Class 1: Exponential patience (impatient customers)
10% * Class 2: Deterministic patience (timeout-based abandonment)
11% * Class 3: Erlang-2 patience (more patient, less variable)
12%
13% Copyright (c) 2012-2026, Imperial College London
14% All rights reserved.
15
16clear node jobclass solver AvgTable
17
18model = Network('Multi-Class with Mixed Impatience');
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} = Sink(model, 'Sink');
25
26% Define job classes
27jobclass{1} = OpenClass(model, 'ImpatientClass', 0);
28jobclass{2} = OpenClass(model, 'TimeoutClass', 0);
29jobclass{3} = OpenClass(model, 'PatientClass', 0);
30
31% Set service times (same for all classes at both queues)
32for c = 1:3
33 node{2}.setService(jobclass{c}, Exp(2.0)); % Mean service = 0.5
34 node{3}.setService(jobclass{c}, Exp(1.5)); % Mean service = 0.67
35end
36
37% Set arrival rates
38node{1}.setArrival(jobclass{1}, Exp(0.3)); % Impatient arrivals
39node{1}.setArrival(jobclass{2}, Exp(0.2)); % Timeout arrivals
40node{1}.setArrival(jobclass{3}, Exp(0.1)); % Patient arrivals
41
42% Set patience distributions (different for each class at Queue1)
43% Class 1: Exponential patience - highly variable, mean = 2.0
44node{2}.setPatience(jobclass{1}, Exp(0.5));
45
46% Class 2: Deterministic patience - fixed timeout of 3.0 time units
47node{2}.setPatience(jobclass{2}, Det(3.0));
48
49% Class 3: Erlang-2 patience - less variable than exponential, mean = 4.0
50node{2}.setPatience(jobclass{3}, Erlang(2, 0.5));
51
52% Queue2 also has impatience, but with different parameters
53node{3}.setPatience(jobclass{1}, Exp(0.3)); % More impatient at second queue
54node{3}.setPatience(jobclass{2}, Det(5.0)); % Longer timeout
55node{3}.setPatience(jobclass{3}, Erlang(2, 0.3)); % Even more patient
56
57% Define routing
58K = model.getNumberOfClasses();
59P = cell(K, K);
60for c = 1:K
61 P{c,c} = [0, 1, 0, 0; % Source -> Queue1
62 0, 0, 1, 0; % Queue1 -> Queue2
63 0, 0, 0, 1; % Queue2 -> Sink
64 0, 0, 0, 0]; % Sink -> nowhere
65end
66
67model.link(P);
68
69%% Solve with JMT
70options = Solver.defaultOptions;
71options.keep = true;
72options.verbose = 1;
73options.samples = 1e5;
74options.seed = 23000;
75
76disp('This example shows a multi-class system with different patience distributions.');
77disp(' ');
78disp('Class 1 (Impatient): Exponential patience, mean = 2.0 at Queue1, 3.33 at Queue2');
79disp('Class 2 (Timeout): Deterministic patience, timeout = 3.0 at Queue1, 5.0 at Queue2');
80disp('Class 3 (Patient): Erlang-2 patience, mean = 4.0 at Queue1, 6.67 at Queue2');
81disp(' ');
82
83solver{1} = JMT(model, options);
84
85fprintf(1, 'SOLVER: %s\n', solver{1}.getName());
86AvgTable{1} = solver{1}.getAvgTable();
87AvgTable{1}
88
89disp(' ');
90disp('Note: Different classes will have different reneging rates due to their');
91disp(' patience distributions. Class 1 should see the most reneging.');
Definition mmt.m:92