1% Example: M/M/1 Queue with Exponential Impatience (Reneging)
3% This example demonstrates customer impatience in a simple M/M/1 queue.
4% Jobs arrive according to a Poisson process and have exponentially
5% distributed service times. If a job waits too
long in the queue, it
6% reneges (abandons) according to an exponential patience distribution.
9% - Single queue with FCFS scheduling
10% - Exponential service time (rate = 1.0)
11% - Exponential arrival process (rate = 0.8)
12% - Exponential patience/reneging time (rate = 0.5)
14% Copyright (c) 2012-2026, Imperial College London
19model = Network(
'M/M/1 with Exponential Impatience');
22node{1} = Source(model,
'Source');
23node{2} = Queue(model,
'Queue1', SchedStrategy.FCFS);
24node{3} = Sink(model,
'Sink');
27jobclass{1} = OpenClass(model,
'Class1', 0);
30node{2}.setService(
jobclass{1}, Exp(1.0)); % Mean service time = 1.0
33node{1}.setArrival(
jobclass{1}, Exp(0.8)); % Arrival rate = 0.8
35% Set patience distribution (queue-specific)
36% Jobs will renege after an exponentially distributed time with rate 0.5
37node{2}.setPatience(
jobclass{1}, Exp(0.5)); % Mean patience = 2.0
40K = model.getNumberOfClasses();
42P{1,1} = [0, 1, 0; % Source -> Queue1
43 0, 0, 1; % Queue1 -> Sink
44 0, 0, 0]; % Sink -> nowhere
49options = Solver.defaultOptions;
55disp(
'This example shows a simple M/M/1 queue with exponential impatience.');
56disp(
'Jobs will abandon (renege) the queue after waiting for an exponential time.');
58disp(
'Model parameters:');
59disp(
' - Arrival rate: 0.8');
60disp(
' - Service rate: 1.0');
61disp(
' - Patience rate: 0.5 (mean patience = 2.0)');
64solver{1} = JMT(model, options);
66fprintf(1,
'SOLVER: %s\n', solver{1}.getName());
67AvgTable{1} = solver{1}.getAvgTable();
71disp(
'Note: The queue length and response time should be lower than a standard M/M/1');
72disp(
' due to jobs reneging when their patience expires.');