Ciw is a Python package for simulating queueing networks.
Since G in M/G/1 can be any distribution with non-negative support, we will use a gamma distribution for the sake of example. A gamma distribution is the result of a sum of independent exponentially-distributed random variable, and thus for this example we have an interpretation that the servicing is implicitly a multi-step process where each step has an exponentially-distributed completion time.
A M/G/1 queue as described can be implemented and simulated using Ciw in the following way.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import ciw
ciw.seed(2018)
ARRIVAL_TIME = 1
SERVICE_SHAPE = 6 / 10
SERVICE_SCALE = 12 / 10
HORIZON = 365
network = ciw.create_network(
arrival_distributions = [ciw.dists.Exponential(ARRIVAL_TIME)],
service_distributions = [ciw.dists.Gamma(shape=SERVICE_SHAPE, scale=SERVICE_SCALE)],
number_of_servers = [1]
)
simulation = ciw.Simulation(network)
simulation.simulate_until_max_time(HORIZON)
records = simulation.get_all_records()