GeoPython2019

Building a bus rapid transport system simulator with SimPy and GeoPandas
2019-06-25, 14:30–15:00, Room 2

We present a simulator for a bus rapid transport (BRT) system implemented using SimPy and GeoPandas. The simulator is used as a decision making support tool in the planning process of a BRT in South West Norway.


Public transport projects are expensive and planned years ahead. Building a small-scale simulator program can help to visualize the project, calculate key performance indicators and experiment with control parameters and alternative optimization strategies. This gives planning security early on in the project.
Kolumbus AS is a local public transportation company in the Southwestern region of Norway. There are around 85.000 daily commutes with Kolumbus, spread over 60+ bus routes and 10 boat routes.
Kolumbus assigned us to build a simulator for a bus rapid transport (BRT) system that is currently under construction.
We chose not to use one of the established traffic simulation framework such as SUMO. Instead we built the simulator from scratch using SimPy and GeoPandas. SimPy is an open source simulation framework in Python that implements a Discrete-Event-Simulation (DES) pattern.
In our talk we will present the basic concepts of SimPy and show how easy it is to build a simulator for simple things such as buses and traffic lights. We progress into how we combined this with GeoPandas for storing driving routes and calculating distances. We will cover more advanced topics such as collision detection, queue handling at bus stops, and more. We will show how the program is used for simulating bus congestion prevention strategies and for optimizing such strategies.
The rich python ecosystem made it easy to create statistics and to visualize results of simulation runs. We will show samples of this, such as train graphs.
Finally, we will discuss some technical limitations we encountered, and review the core design decisions.

Be prepared to see code samples and visualizations from the simulator.