DISPLIB: Train Dispatching benchmark library
Given a set of trains traveling on a railway, the Train Dispatching Problem is the operational problem that occurs when some trains have become delayed with respect to their prescribed timetable, and we want to make routing and scheduling adjustments to minimize the total delay on the railway. Effective management of dense railway traffic using algorithms has proven to be very hard.
DISPLIB is a problem definition, a file format, and a set of problem instances with the aim of allowing researchers and engineers to better compare and benchmark their algorithms.
We are open to new contributions of challenging problem instances from real-world data sources. Contact us (Bjørnar Luteberget <bjornar.luteberget@sintef.no> and Giorgio Sartor <giorgio.sartor@sintef.no>) if you would like to share data, and we can help with converting the problems into the required format.
Format and tools
The following set of files will help you get started solving DISPLIB problems: the problem (and file format) specification, a solution verification program to make sure that solutions are correct, and a small set of test problems.- DISPLIB format specification (updated 2025-09-17)
- Solution verification program (Python) (version 0.3 published 2024-10-08)
- Test instances (updated 2024-09-06)
Problem instances
The following table describes the categories of problem instances, their characteristics, and best known solutions. The whole set of instances may also be downloaded as a whole, for convenience:- DISPLIB - all problem instances (updated 2025-09-17)
- DISPLIB - all best known solutions (updated 2025-09-17)
filename | # trains | # operations | # resources | best known solution |
smi
instances from Siemens Mobility Italy describing trains from a freight-dominated
railway extracted from a real-time information system for train dispatching. In each instance,
a small set of trains were extracted from a larger set of trains because they represent particularly
challenging interactions. Each train has a long sequence of operations and typically also
a fairly wide range of routing alternatives (i.e., the graph for each train is quite complex).
Two subcategories contain different
versions of these instance:
|
---|---|---|---|---|
smi_close_0 | 6 | 443 | 127 | 679 (delayed-train) |
smi_close_1 | 6 | 1954 | 480 | 4316 (openbus) |
smi_close_2 | 5 | 1854 | 473 | 1331 (openbus) |
smi_close_3 | 13 | 1437 | 283 | 1860 (delayed-train) |
smi_close_4 | 5 | 113 | 87 | 24225 (delayed-train) |
smi_close_5 | 9 | 1718 | 311 | 314 (openbus) |
smi_close_6 | 7 | 948 | 222 | 21034 (openbus) |
smi_close_7 | 6 | 1416 | 464 | 582 (openbus) |
smi_close_8 | 9 | 1975 | 787 | 3413 (openbus) |
smi_headway_0 | 6 | 443 | 125 | 1483 (openbus) |
smi_headway_1 | 6 | 1954 | 481 | 5040 (openbus) |
smi_headway_2 | 5 | 1854 | 472 | 2888 (trainees) |
smi_headway_3 | 13 | 1437 | 284 | 3552 (openbus) |
smi_headway_4 | 5 | 113 | 87 | 24797 (delayed-train) |
smi_headway_5 | 9 | 1718 | 312 | 869 (openbus) |
smi_headway_6 | 7 | 948 | 223 | 22236 (openbus) |
smi_headway_7 | 6 | 1416 | 466 | 1150 (openbus) |
smi_headway_8 | 9 | 1975 | 790 | 5159 (openbus) |
smi_headway_9 | 6 | 1756 | 284 | 16006 (openbus) |
smi_headway_10 | 8 | 1099 | 337 | 9007 (openbus) |
smi_headway_11 | 8 | 2245 | 454 | 5579 (openbus) |
nor
instances from SINTEF describing parts of the Norwegian national railway
network. Instances were generated from a daily timetable extracted from
a real-time information system for train dispatching. The timetable was modified by picking a random time
during the day and adding delays to a random set of trains at the selected time. Instances
were filtered so that only the more difficult instances are included. All the railway lines
consists of a combination of double-track and single-track sections. Eight subcategories were
made to distinguish between different lines and difficulty variations:
|
nor1_critical_0 | 12 | 559 | 82 | 4133 (wub) |
nor1_critical_1 | 8 | 420 | 82 | 2416 (wub) |
nor1_critical_2 | 9 | 457 | 92 | 3775 (wub) |
nor1_critical_3 | 16 | 796 | 95 | 8016 (wub) |
nor1_critical_4 | 4 | 148 | 82 | 1506 (wub) |
nor1_critical_5 | 6 | 288 | 95 | 2677 (wub) |
nor1_critical_6 | 12 | 549 | 95 | 4491 (wub) |
nor1_critical_7 | 10 | 455 | 95 | 4137 (wub) |
nor1_critical_8 | 10 | 471 | 95 | 3836 (wub) |
nor1_critical_9 | 12 | 494 | 82 | 5488 (wub) |
nor1_full_0 | 119 | 6430 | 95 | 3299 (openbus) |
nor1_full_1 | 148 | 7864 | 95 | 2486 (openbus) |
nor1_full_2 | 40 | 2194 | 95 | 6046 (openbus) |
nor1_full_3 | 56 | 3152 | 95 | 2658 (openbus) |
nor1_full_4 | 89 | 4927 | 95 | 5358 (openbus) |
nor1_full_5 | 129 | 6863 | 95 | 3732 (openbus) |
nor1_full_6 | 147 | 7730 | 95 | 5262 (openbus) |
nor1_full_7 | 146 | 7693 | 95 | 1012 (openbus) |
nor1_full_8 | 155 | 8217 | 95 | 5370 (openbus) |
nor1_full_9 | 151 | 7968 | 95 | 6076 (openbus) |
nor2_1 | 23 | 1750 | 137 | 4937 (openbus) |
nor2_2 | 23 | 1726 | 137 | 4619 (openbus) |
nor2_3 | 23 | 1560 | 137 | 5500 (openbus) |
nor2_4 | 23 | 1448 | 137 | 6186 (openbus) |
nor2_5 | 23 | 1448 | 137 | 5416 (openbus) |
nor3_1 | 21 | 1314 | 79 | 3667 (openbus) |
nor3_2 | 22 | 1325 | 79 | 5740 (openbus) |
nor3_3 | 22 | 1237 | 79 | 5562 (openbus) |
nor3_4 | 21 | 1266 | 79 | 4605 (openbus) |
nor3_5 | 22 | 1307 | 79 | 2923 (openbus) |
nor4_large_1 | 365 | 38125 | 408 | 9551 (v777v) |
nor4_large_2 | 347 | 36314 | 408 | 8439 (v777v) |
nor4_large_3 | 171 | 17221 | 408 | 11985 (openbus) |
nor4_large_4 | 257 | 26556 | 408 | 13261 (v777v) |
nor4_large_5 | 204 | 20911 | 408 | 8043 (openbus) |
nor4_small_1 | 165 | 17642 | 408 | 8972 (openbus) |
nor4_small_2 | 168 | 17907 | 408 | 11217 (openbus) |
nor4_small_3 | 161 | 16794 | 408 | 7924 (openbus) |
nor4_small_4 | 157 | 16034 | 408 | 8189 (v777v) |
nor4_small_5 | 167 | 17815 | 408 | 12144 (openbus) |
nor5_large_1 | 346 | 34064 | 512 | 72799 (v777v) |
nor5_large_2 | 461 | 46539 | 512 | 77118 (v777v) |
nor5_large_3 | 457 | 46151 | 512 | 70026 (v777v) |
nor5_large_4 | 505 | 50934 | 512 | 69519 (v777v) |
nor5_large_5 | 396 | 39393 | 512 | 67312 (v777v) |
nor5_small_1 | 286 | 28248 | 512 | 57554 (v777v) |
nor5_small_2 | 271 | 27029 | 512 | 66751 (v777v) |
nor5_small_3 | 275 | 27148 | 512 | 57446 (v777v) |
nor5_small_4 | 269 | 26705 | 512 | 58484 (v777v) |
nor5_small_5 | 261 | 25594 | 512 | 62744 (v777v) | swi instances based on openly available data from Swiss Federal Railways (SBB). These instances were converted from data used in the Train Schedule Optimisation Challenge . Instances are of increasing difficulty, ranging from a few trains to up to 467 trains per instance. |
swi_1 | 4 | 326 | 115 | 0 (delayed-train) |
swi_2 | 58 | 4473 | 532 | 0 (openbus) |
swi_3 | 143 | 8917 | 558 | 0 (openbus) |
swi_4 | 148 | 9619 | 582 | 0 (openbus) |
swi_5 | 149 | 9625 | 582 | 0 (openbus) |
swi_6 | 365 | 39472 | 590 | 0 (openbus) |
swi_7 | 467 | 52741 | 590 | 0 (openbus) |
swi_8 | 133 | 22435 | 528 | 0 (openbus) |
swi_9 | 287 | 35387 | 1301 | 0 (openbus) |
wab
instances received from Wabtec describing a set of trains in a dispatching region, extracted from a
real-time information system for train dispatching. Each of the 16 instances
is made from consecutive snapshots of actual train positions during a period of a few hours.
The routing graph for each train is fairly complex, describing station routing and also minimum durations in
consecutive stations being dependent on optional stops (i.e., a choice
between stopping in one station or the next one). Two subcategories were made:
|
wab_large_1 | 48 | 6054 | 136 | 151279 (openbus) |
wab_large_2 | 48 | 6041 | 136 | 144017 (openbus) |
wab_large_3 | 47 | 5924 | 136 | 152642 (openbus) |
wab_large_4 | 47 | 5911 | 136 | 133630 (CSLS) |
wab_large_5 | 46 | 5888 | 136 | 143886 (openbus) |
wab_large_6 | 46 | 5880 | 136 | 134923 (CSLS) |
wab_large_7 | 46 | 5862 | 136 | 146501 (CSLS) |
wab_large_8 | 45 | 5753 | 136 | 117051 (openbus) |
wab_large_9 | 45 | 5742 | 136 | 123528 (openbus) |
wab_large_10 | 45 | 5738 | 136 | 127116 (openbus) |
wab_large_11 | 45 | 5730 | 136 | 127862 (openbus) |
wab_large_12 | 45 | 5723 | 136 | 130225 (openbus) |
wab_large_13 | 44 | 5594 | 136 | 117875 (openbus) |
wab_large_14 | 44 | 5588 | 136 | 123753 (CSLS) |
wab_large_15 | 46 | 5719 | 136 | 129949 (openbus) |
wab_large_16 | 46 | 5692 | 136 | 128082 (openbus) |
wab_small_1 | 30 | 3347 | 136 | 17055 (v777v) |
wab_small_2 | 30 | 3334 | 136 | 16478 (v777v) |
wab_small_3 | 30 | 3367 | 136 | 18767 (v777v) |
wab_small_4 | 30 | 3354 | 136 | 20165 (L) |
wab_small_5 | 30 | 3481 | 136 | 25255 (v777v) |
wab_small_6 | 30 | 3473 | 136 | 23318 (v777v) |
wab_small_7 | 30 | 3455 | 136 | 26486 (v777v) |
wab_small_8 | 30 | 3489 | 136 | 20138 (v777v) |
wab_small_9 | 30 | 3478 | 136 | 24116 (v777v) |
wab_small_10 | 30 | 3474 | 136 | 28750 (openbus) |
wab_small_11 | 30 | 3466 | 136 | 24189 (v777v) |
wab_small_12 | 30 | 3459 | 136 | 22571 (L) |
wab_small_13 | 30 | 3488 | 136 | 19064 (v777v) |
wab_small_14 | 30 | 3482 | 136 | 19938 (v777v) |
wab_small_15 | 30 | 3312 | 136 | 21392 (v777v) |
wab_small_16 | 30 | 3285 | 136 | 19015 (v777v) |
DISPLIB 2025 Competition
The DISPLIB 2025 competition ran from October 2024 to May 2025 and challenged participants to advance the state-of-the-art in real-time train dispatching. Many strong teams submitted high-quality solutions, and three winners were decided by an international scientific committee of experts of railway optimization. The winners were:
- 1st place: CSLS (Carolin Scholl, Luka Stärk)
- 2nd place: openbus (Florian Fuchs, Thomas Dubach, Jan Lordieck, Francesco Corman, Bernardo Martin-Iradi)
- 3rd place: v777v (Venislav Varbanov)
Citation
An article about the DISPLIB format and instances is currently undergoing peer review. Please cite DISPLIB as follows:@misc{kloster2025displiblibrarytraindispatching, title={DISPLIB: a library of train dispatching problems}, author={Oddvar Kloster and Bjørnar Luteberget and Carlo Mannino and Giorgio Sartor}, year={2025}, eprint={2509.12254}, archivePrefix={arXiv}, primaryClass={cs.AI}, url={https://arxiv.org/abs/2509.12254}, }
Changelog
- 2025-09-17: Post-competition web page published, with a list of instances (smi, nor, swi, wab), including information about data sources and best solutions from the competiton.
Organization
The DISPLIB is managed by Bjørnar Luteberget <bjornar.luteberget@sintef.no>, Giorgio Sartor <giorgio.sartor@sintef.no>, Oddvar Kloster, and Carlo Mannino, and is funded by SINTEF . Get in touch with us by email if you find any errors or want to contribute new problem instances.