Implementing a M/M/1 Queue in Ciw

Simulation
Discrete-Event-Simulation
Queueing-Networks
Ciw
Author

Galen Seilis

Published

December 20, 2023

Ciw is a Python package for simulating queueing networks. An M/M/1 queue can be implemented and simulated using Ciw in the following way.

"""M/M/1 queue simulation logic."""
import ciw


def run_simulation(
    arrival_time=1,
    service_time=1 / 2,
    horizon=365,
    seed=2018,
):
    """Run M/M/1 queue simulation and return simulation object and records."""
    ciw.seed(seed)

    network = ciw.create_network(
        arrival_distributions=[ciw.dists.Exponential(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()
    return simulation, records


def main():
    """Main entry point for the simulation."""
    _, records = run_simulation()
    for record in records[:10]:
        print(record)


if __name__ == "__main__":
    main()