The model of the M/M/C/K,T queuing system
The M/M/C/K,T queuing system in terms of queuing theory
This queuing system can already represent the real objects.
Such system is a special case of
M/M/C queuing system.
Entities are also arrived as a Poisson process to common queue.
Queue discipline is the FIFO too.
Entities from the queue are also distributed between
C servers.
The service time value of all servers is exponentially distributed.
Free server is selected randomly.
The difference is that the queue capacity is not infinite, but limited with
K waiting places;
the timeout (maximum waiting time) is not infinite, but has a certain value
T.
The M/M/C/K,T queuing model in terms of OpenSIMPLY
The "Generator", "Queue", "Selector" and "Server" blocks are used for this system description
as for
M/M/C queuing system.
In Delphi and Free Pascal the "TGenerator", "TQueue", "TSelector" and "TServer" classes represent these blocks correspondingly.
Download executable model of the M/M/C/K,T queuing system as almost real call center.
Model creation
FIFO is the default discipline for the "Queue" block, so it does not need to be specified explicitly.
The selection rule for the "Selector" block should be specified with the parameter "RandomSelection", because the servers are searching randomly.
But this parameter can be omitted, and the default selection rule "First free selection" will be used instead, if only the queue probability, the mean waiting time or the mean queue length values are of interest.
Since the "Selector" block can create the specified number of instances of the block of the specified type and automatically assign them to the selection points, it should not create the "TServer" type array for a number of servers; and the variable for it is not required.
So, only the variables "Gen", "Que" and "Sel" will be used for the "TGenerator", "TQueue" and "TSelector" class instances accordingly.
The "TServer" class and server parameters will be specified as parameters in the "Assign" method of "TSelector".
Model parameters
- Capacity is the total number of entities for simulation.
- QueueCapacity is the number of waiting places in a queue.
- InterarrivalTime is mean value between entities arrivals.
- QueueTimeout is maximum waiting time in a queue.
- NumberOfServers is the total number of entities for simulation.
- ServiceTime is mean value of service time.
- ExpTime is a block function returning exponentially distributed random values.
- ConstantTime is a block function returning every time the same constant value.
Model behavior
The lines below fully describe the behavior of M/M/C/K,T queuing system in terms of OpenSIMPLY:
Gen:=TGenerator.Create([Capacity,ExpTime,InterarrivalTime]); // Creating a Generator.
Que:=TQueue.Create([QueueCapacity,ConstantTime,QueueTimeout]); // Creating a Queue with constant timeout.
Sel:=TSelector.Create([NumberOfServers]); // Creating a Selector with default rule.
Gen.Connect(Que); // Connecting Generator to Queue.
Que.Connect(Sel); // Connecting Queue to Selector.
Sel.Connect(1,NumberOfServers,TServer,[ExpTime,ServiceTime]); // Creating Servers and assigning them to Selector.
To compile a model, the code above should be placed in a standard wrapper of a model as in the
M/M/1 loss system example.
Complete program code containing input data and output of results.
program MMCKTqueue;
{$apptype xxx } // xxx "GUI" or "Console"
{$S-}
uses
SimBase,
SimBlocks,
SimStdGUI;
type
TMyModel = class(TModel) // Model declaration.
procedure Body; override;
end;
var
Capacity, // Model parameters.
QueueCapacity,
NumberOfServers: integer;
InterarrivalTime,
QueueTimeout,
ServiceTime: Double;
procedure TMyModel.Body; // Model description.
var
Gen: TGenerator; // Blocks declaration.
Que: TQueue;
Sel: TSelector;
begin
Gen:=TGenerator.Create([Capacity,ExpTime,InterarrivalTime]);
Que:=TQueue.Create([QueueCapacity,ConstantTime,QueueTimeout]);
Sel:=TSelector.Create([NumberOfServers]);
Gen.Connect(Que);
Que.Connect(Sel);
Sel.Connect(1,NumberOfServers,TServer,[ExpTime,ServiceTime]);
Run(Gen); // Launching the start block.
Que.ShowStat; // Results.
end;
begin
Capacity:=3000; // Initial values of the model.
InterarrivalTime:=1;
QueueCapacity:=3;
QueueTimeout:=1;
ServiceTime:=1.3;
NumberOfServers:=2;
Simulate(TMyModel); // Starting a model.
end.