Discrete Event Simulation: It's Easy with SimPy!
Dmitry Zinoviev
TL;DR
The paper demonstrates how to model and simulate discrete-event systems using SimPy, a pure-Python DES toolkit, through a hands-on Dining Philosophers example and extensions. It covers core constructs (Environment, Resources, and Processes), synchronization via timeouts and resource requests, and deadlock considerations, while also integrating with Python's data-science stack for statistics and visualization. Key contributions include practical modeling patterns for resources, consumables via Container, impatience with timeout-based failure, and inter-process communication through interrupts and events, all within an accessible, executable workflow. The work highlights the practical impact of using SimPy to build, debug, simulate, and optimize DES models across domains, leveraging Python's ecosystem for analysis and visualization.
Abstract
This paper introduces the practicalities and benefits of using SimPy, a discrete event simulation (DES) module written in Python, for modeling and simulating complex systems. Through a step-by-step exploration of the classical Dining Philosophers Problem, we demonstrate how SimPy enables the efficient construction of discrete event models, emphasizing system states, transitions, and event handling. We extend the scenario to introduce resources, such as chopsticks, to model contention and deadlock conditions, and showcase SimPy's capabilities in managing these scenarios. Furthermore, we explore the integration of SimPy with other Python libraries for statistical analysis, showcasing how simulation results inform system design and optimization. The versatility of SimPy is further highlighted through additional modeling scenarios, including resource constraints and customer service interactions, providing insights into the process of building, debugging, simulating, and optimizing models for a wide range of applications. This paper aims to make DES accessible to practitioners and researchers alike, emphasizing the ease with which complex simulations can be constructed, analyzed, and visualized using SimPy and the broader Python ecosystem.
