kit-algo / ULTRA

UnLimited TRAnsfers for Efficient Multimodal Journey Planning
MIT License
60 stars 125 forks source link

License: MIT

ULTRA: UnLimited TRAnsfers for Efficient Multimodal Journey Planning

ULTRA is a C++ framework for efficient journey planning in multimodal networks that combine public transit and non-schedule-based transfer modes (e.g., walking, cycling, e-scooter). It was developed at KIT in the group of Prof. Dorothea Wagner. This repository contains code for the following publications:

Compiling

To compile all executables in release mode, run

mkdir -p cmake-build-release
cd cmake-build-release
cmake .. -DCMAKE_BUILD_TYPE=Release && cmake --build . --target All --config Release

Make sure you have OpenMP installed.

Usage

Most preprocessing steps and query algorithms are provided in the console application ULTRA, which offers the following commands:

Command Algorithm Transfers Query type Criteria
runTransitiveCSAQueries CSA Transitive Stop-to-stop Arrival time
runDijkstraCSAQueries MCSA Unlimited Vertex-to-vertex Arrival time
runHLCSAQueries HL-CSA Unlimited Vertex-to-vertex Arrival time
runULTRACSAQueries ULTRA-CSA Unlimited Vertex-to-vertex Arrival time
runTransitiveRAPTORQueries RAPTOR Transitive Stop-to-stop Arrival time, number of trips
runDijkstraRAPTORQueries MR Unlimited Vertex-to-vertex Arrival time, number of trips
runHLRAPTORQueries HL-RAPTOR Unlimited Vertex-to-vertex Arrival time, number of trips
runULTRARAPTORQueries ULTRA-RAPTOR Unlimited Vertex-to-vertex Arrival time, number of trips
runTransitiveTBQueries TB Transitive Stop-to-stop Arrival time, number of trips
runULTRATBQueries ULTRA-TB Unlimited Vertex-to-vertex Arrival time, number of trips
runTransitiveMcRAPTORQueries McRAPTOR Transitive Stop-to-stop Arrival time, number of trips, transfer time (full)
runMCRQueries MCR Unlimited Vertex-to-vertex Arrival time, number of trips, transfer time (full)
runULTRAMcRAPTORQueries ULTRA-McRAPTOR Unlimited Vertex-to-vertex Arrival time, number of trips, transfer time (full)
runULTRAMcTBQueries ULTRA-McTB Unlimited Vertex-to-vertex Arrival time, number of trips, transfer time (full)
runTransitiveBoundedMcRAPTORQueries BM-RAPTOR Transitive Stop-to-stop Arrival time, number of trips, transfer time (restricted)
runUBMRAPTORQueries UBM-RAPTOR Unlimited Vertex-to-vertex Arrival time, number of trips, transfer time (restricted)
runUBMTBQueries UBM-TB Unlimited Vertex-to-vertex Arrival time, number of trips, transfer time (restricted)
runUBMHydRAQueries UBM-HydRA Unlimited Vertex-to-vertex Arrival time, number of trips, transfer time (restricted)

Networks

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 all query algorithms except for CSA, which uses its own format. 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 and Stuttgart networks because they are 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:

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.

Multiple Transfer Modes

The algorithms listed above support bimodal networks with public transit and a single transfer mode. Additionally, this framework provides algorithms for multimodal networks with multiple transfer modes. The required multimodal data structures can be built with the following commands in Network:

ULTRA shortcuts for networks with multiple transfer modes can be computed with the following commands in ULTRA:

The ULTRA application offers the following query algorithms. All algorithms optimize arrival time, number of trips and one transfer time criterion per transfer mode.

One-to-Many Journey Planning

The query algorithms in the ULTRA application only support one-to-one queries. The ULTRAPHAST application provides algorithms for one-to-all and one-to-many queries:

Command Algorithm Target set Criteria
runOneToAllDijkstraCSAQueriesToVertices MCSA Vertices Arrival time
runOneToManyDijkstraCSAQueriesToStops MCSA Stops Arrival time
runOneToManyDijkstraCSAQueriesToBall MCSA Ball Arrival time
runUPCSAQueries UP-CSA Vertices/Stops Arrival time
runUPCSAQueriesToBall UP-CSA Ball Arrival time
runOneToAllDijkstraRAPTORQueriesToVertices MR Vertices Arrival time, number of trips
runOneToManyDijkstraRAPTORQueriesToStops MR Stops Arrival time, number of trips
runOneToManyDijkstraRAPTORQueriesToBall MR Ball Arrival time, number of trips
runUPRAPTORQueries UP-RAPTOR Vertices/Stops Arrival time, number of trips
runUPRAPTORQueriesToBall UP-RAPTOR Ball Arrival time, number of trips
runUPTBQueries UP-TB Vertices/Stops Arrival time, number of trips

Random ball target sets can be generated with the command createBallTargetSets. CH and Core-CH precomputations for these target sets can be run with buildUPCHForTargetSets and buildCoreCHForTargetSets, respectively.

Delay-Robustness

The application DelayExperiments provides commands for evaluating Delay-ULTRA, the variant of ULTRA that anticipates possible vehicle delays. The delay-robust shortcut computation itself is run with the command computeDelayEventToEventShortcuts in ULTRA. All delays up to the specified limit (measured in seconds) are accounted for. DelayExperiments provides the following commands: