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.

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:
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_headway: includes non-zero release times, representing headway times computed from the train length and average speed.
  • smi_close: no such headway requirement between trains.
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_full: describes a railway line in Norway called Jærbanen. The line is 120 km long with 28 stations and contains all trains for a full day.
  • nor1_critical: instances generated in the same way as the previous subcategory, but where trains that are unlikely to be impacted by the delays are removed.
  • nor2: describes a railway line called Gjøvikbanen. The line is 123 km long with 35 stations. The instances are limited to a 6 hour time window.
  • nor3: describes a railway line called Kongsvingerbanen. The line is 114 km long with 26 stations. The instances are limited to a 6 hour time window.
  • nor4_small: describes a railway line called Dovrebanen. The line is 492 km long with 55 stations, limited to a 6 hour time window.
  • nor4_large: same as the previous subcategory, but with the full day time window.
  • nor5_small: contains a combination of multiple lines in the Oslo region of Norway, connected in the Oslo Central Station, limited to a 6 hour time window.
  • nor5_large: same as the previous subcategory, but with the full day time window.
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: all trains in the dispatching region in the next 24 hour period.
  • wab_small: same as the previous subcategory, but using a 16 hour period.
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:

Congratulations! See also the archived details of the competition.

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

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.