Creating a Queue Simulation
A queue simulation can be created with the .QueueingSimulation
class from the simulation
module. This class supports several parameters that define how arrivals and services are handled, the number of servers, and various optional features. The mandatory and optional parameters are outlined below.
Mandatory Parameters
A
: Distribution used to model arrivals.A Parameters (a_parameters)
: Parameters of the arrival distribution.S
: Distribution used to model service times.S Parameters (s_parameters)
: Parameters of the service distribution.C
: Number of servers (i.e., service channels).
Optional Parameters
K
: Maximum system capacity. Defaults to infinity.N
: Total population of potential customers. Defaults to infinity.D
: Queue discipline. The default isFIFO
(First-In-First-Out). Additional disciplines includeLast-In-First-Out (LIFO)
and priority-based service (PBS
).PBS Distribution (pbs_distribution)
: Discrete distribution used to prioritize customers. This parameter is only available whend="PBS"
.PBS Parameters (pbs_parameters)
: Parameters for the discrete distribution applied to priority-based service. This parameter is only available whend="PBS"
.
FIFO and LIFO Instances
Example Without Optional Parameters
The following example illustrates how to create a queue simulation with only the mandatory parameters:
from phitter import simulation
# Create a FIFO simulation instance.
# Since FIFO is the default discipline, it is not necessary to specify "d".
simulation_basic = simulation.QueueingSimulation(
a="exponential",
a_parameters={"lambda": 5},
s="exponential",
s_parameters={"lambda": 20},
c=3,
)
The same configuration can be used for an LIFO system by specifying d="LIFO"
if needed.
Example With Optional Parameters
Below is an example that includes certain optional parameters:
from phitter import simulation
# Create a queue simulation instance using the LIFO discipline.
simulation_with_optionals = simulation.QueueingSimulation(
a="exponential",
a_parameters={"lambda": 5},
s="exponential",
s_parameters={"lambda": 20},
c=3,
k=3,
n=5000,
d="LIFO",
)
While this example demonstrates the LIFO discipline, the same logic applies to FIFO by changing or omitting the d
parameter.
Priority-Based Service (PBS) Instance
When creating a queue simulation with PBS
, two additional parameters become mandatory:
pbs_distribution
: A discrete distribution that assigns priority labels.pbs_parameters
: Parameters for this priority distribution.
Example Without Optional Parameters
from phitter import simulation
# Parameters for the "Own Distribution"
# Lower numeric labels receive higher priority in this distribution.
parameters = {0: 0.5, 1: 0.3, 2: 0.2}
# Create a queue simulation instance using PBS.
simulation_basic_pbs = simulation.QueueingSimulation(
a="exponential",
a_parameters={"lambda": 5},
s="exponential",
s_parameters={"lambda": 20},
c=3,
d="PBS",
pbs_distribution="own_distribution",
pbs_parameters=parameters
)
Example With Optional Parameters
from phitter import simulation
# Parameters for the "Own Distribution"
# Lower numeric labels receive higher priority.
parameters = {0: 0.5, 1: 0.3, 2: 0.2}
# Create a queue simulation instance with additional optional parameters using PBS.
simulation_with_optionals_pbs = simulation.QueueingSimulation(
a="exponential",
a_parameters={"lambda": 5},
s="exponential",
s_parameters={"lambda": 20},
c=3,
d="PBS",
pbs_distribution="own_distribution",
pbs_parameters=parameters,
k=3,
n=5000,
)
This example demonstrates how the PBS
discipline requires specifying both pbs_distribution
and pbs_parameters
. Additional capacity (k
) and population limits (n
) are included for illustrative purposes.