import ciw
ciw.seed(2018)
ARRIVAL_TIME = 1
SERVICE_TIME = 1 / 2
HORIZON = 365
network = ciw.create_network(
arrival_distributions = [ciw.dists.Deterministic(ARRIVAL_TIME)],
service_distributions = [ciw.dists.Exponential(SERVICE_TIME)],
number_of_servers = [1]
)
simulation = ciw.Simulation(network)
simulation.simulate_until_max_time(HORIZON)
records = simulation.get_all_records()Implementing a D/M/1 Queue in Ciw
Python
Discrete Event Simulation
Ciw
Queueing Network
Queueing System
Queueing Theory
Exponential Distribution
Statistics
Operations Research
Random Variables
Inter-Arrival Times
Service Times
Random Number Generation
Servers
Introduction
Ciw is a Python package for simulating queueing networks.
Simulation
A D/M/1 queue can be implemented and simulated using Ciw in the following way.
Results
We can tabulate the results.
from IPython.display import Markdown, display
import pandas as pd
records = pd.DataFrame(records)
display(
Markdown(
records
[['waiting_time', 'service_time', 'queue_size_at_arrival', 'queue_size_at_departure']]
.describe()
.to_markdown()
)
)| waiting_time | service_time | queue_size_at_arrival | queue_size_at_departure | |
|---|---|---|---|---|
| count | 183 | 183 | 183 | 183 |
| mean | 71.9111 | 1.96964 | 36.8087 | 73.3607 |
| std | 51.243 | 1.8815 | 25.7219 | 51.6083 |
| min | 0 | 0.0229044 | 0 | 0 |
| 25% | 19.1338 | 0.676208 | 13.5 | 20 |
| 50% | 75.1552 | 1.28472 | 34 | 76 |
| 75% | 111.045 | 2.53828 | 61 | 112 |
| max | 175.985 | 9.49261 | 80 | 179 |
We can plot the arrival times against the waiting times.
records.plot(x='arrival_date', y='waiting_time')
We can plot the service start times against the service times.
records.plot(x='service_start_date', y='service_time')
We can plot the arrival dates against the length of the queue when the customer arrived.
records.plot(x='arrival_date', y='queue_size_at_arrival')
We can plot the departure dates against the length of the queue when the customer departed.
records.plot(x='exit_date', y='queue_size_at_departure')