1% Example: Multi-Class Queue with Mixed Impatience Distributions
3% This example demonstrates customer impatience with different patience
4% distributions
for different job
classes in a multi-
class queueing system.
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)
13% Copyright (c) 2012-2026, Imperial College London
18model = Network(
'Multi-Class with Mixed Impatience');
21node{1} = Source(model,
'Source');
22node{2} = Queue(model,
'Queue1', SchedStrategy.FCFS);
23node{3} = Queue(model,
'Queue2', SchedStrategy.FCFS);
24node{4} = Sink(model,
'Sink');
27jobclass{1} = OpenClass(model,
'ImpatientClass', 0);
28jobclass{2} = OpenClass(model,
'TimeoutClass', 0);
29jobclass{3} = OpenClass(model,
'PatientClass', 0);
31% Set service times (same
for all
classes at both queues)
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
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
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));
46% Class 2: Deterministic patience - fixed timeout of 3.0 time units
47node{2}.setPatience(
jobclass{2}, Det(3.0));
49% Class 3: Erlang-2 patience - less variable than exponential, mean = 4.0
50node{2}.setPatience(
jobclass{3}, Erlang(2, 0.5));
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
58K = model.getNumberOfClasses();
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
70options = Solver.defaultOptions;
76disp(
'This example shows a multi-class system with different patience distributions.');
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');
83solver{1} = JMT(model, options);
85fprintf(1,
'SOLVER: %s\n', solver{1}.getName());
86AvgTable{1} = solver{1}.getAvgTable();
90disp(
'Note: Different classes will have different reneging rates due to their');
91disp(
' patience distributions. Class 1 should see the most reneging.');