NOTE: This repository is outdated. Please refer to https://github.com/kit-algo/ULTRA.
This C++ framework contains code for the ALENEX22 publication "Fast Multimodal Journey Planning for Three Criteria". It provides algorithms for efficient journey planning in multimodal networks with three optimization criteria: arrival time, number of public transit trips, and time spent using the transfer mode (e.g., walking, cycling). This framework was developed at KIT in the group of Prof. Dorothea Wagner.
All query algorithms and preprocessing steps are available via the console application ULTRA, which can be compiled using the Makefile located in the Runnables folder. It includes the following commands:
- CH computation:
buildCHcomputes a normal CH needed for the (Mc)ULTRA query algorithms.coreCHcomputes a core-CH, which is used as input for the (Mc)ULTRA shortcut computation.
- (Mc)ULTRA shortcut computation:
computeStopToStopShortcutscomputes stop-to-stop ULTRA shortcuts for use with ULTRA-RAPTOR.computeEventToEventShortcutscomputes event-to-event ULTRA shortcuts for use with ULTRA-TB.computeMcStopToStopShortcutscomputes stop-to-stop McULTRA shortcuts for use with ULTRA-McRAPTOR and ULTRA-BM-RAPTOR.computeMcEventToEventShortcutscomputes event-to-event McULTRA shortcuts for use with ULTRA-McTB and ULTRA-BM-TB.augmentTripBasedShortcutsperforms the shortcut augmentation step that is required for ULTRA-BM-TB.
- Query algorithms:
runULTRAMcRAPTORQueriesruns random queries with ULTRA-McRAPTOR, which computes full Pareto sets.runULTRAMcTripBasedQueriesruns random queries with ULTRA-McTB, which computes full Pareto sets.runBoundedULTRAMcRAPTORQueriesruns random queries with ULTRA-BM-RAPTOR, which computes restricted Pareto sets.runBoundedULTRAMcTripBasedQueriesruns random queries with ULTRA-BM-TB, which computes restricted Pareto sets.- Similar commands are available for the two-criteria and transitive variants of these algorithms, which are used for baseline comparisons.
We use custom data formats for loading the public transit network and the transfer graph. The Intermediate format allows for easy network manipulation, while the RAPTOR format is required by the preprocessing and query algorithms. The Switzerland and London networks used in our experiments are available at https://i11www.iti.kit.edu/PublicTransitData/ULTRA/ in the required formats. Unfortunately, we cannot provide the Germany network because it is proprietary.
The Network application provides commands for manipulating the network data and for converting public transit data to our custom format. It includes the following commands:
parseGTFSconverts GFTS data in CSV format to a binary format.gtfsToIntermediateconverts GFTS binary data to the Intermediate network format.intermediateToRAPTORconverts a network in Intermediate format to RAPTOR format.loadDimacsGraphconverts a graph in the format used by the 9th DIMACS Implementation Challenge to our custom binary graph format.duplicateTripsduplicates all trips in the network and shifts them by a specified time offset. This is used to extend networks that only comprise a single day to two days, in order to allow for overnight journeys.addGraphadds a transfer graph to a network in Intermediate format. Existing transfer edges in the network are preserved.replaceGraphreplaces the transfer graph of a network with a specified transfer graph.reduceGraphcontracts all vertices with degree less than 3 in the transfer graph.reduceToMaximumConnectedComponentreduces a network to its largest connected component.applyBoundingBoxremoves all parts of a network that lie outside a predefined bounding box.applyCustomBoundingBoxremoves all parts of a network that lie outside a specified bounding box.makeOneHopTransferscomputes one-hop transfers for all stops whose distance is below a specified threshold. This is used to create a transitively closed network for comparison with non-multi-modal algorithms.applyMaxTransferSpeedapplies a maximum transfer speed to all edges in the transfer graph.applyConstantTransferSpeedapplies a constant transfer speed to all edges in the transfer graph and computes the travel times accordingly.
An example script that combines all steps necessary to load a public transit network is provided at Runnables/BuildNetworkExample.script. It can be run from the Network application using runScript BuildNetworkExample.script. It takes as input GFTS data in CSV format located at Networks/Switzerland/GTFS/ and a road graph in DIMACS format located at Networks/Switzerland/OSM/dimacs.