Releases: motis-project/motis
v0.9.2: Performance
This version contains a performance improvement for the new nigiri core. The scale of the improvement depends on many factors such as dataset size or query type. To illustrate the differences between the different algorithms, a evaluation was done using a two week timetable of Germany, Switzerland and the Netherlands (each one as GTFS) and according OSM data.
In the follwing table Range 2h means that the departure time window was 2h, MCD is the multi-criteria Dijkstra contained in the routing
module, TB is the TripBased algorithm. Nigiri is the new MOTIS core which is based on the RAPTOR algorithm. The coordinate to coordinate case considers up to 15 min walking for the first and last leg. Big differences can be seen on the 99% percentile where the slowest queries are now more than one second faster (or 35%).
Start | Query | Router | Avg. | q50 | q80 | q90 | q99 |
---|---|---|---|---|---|---|---|
Coordinate → Coordinate | Range 2h | MCD | 2,321 ms | 1,709 ms | 3,647 ms | 4,829 ms | 10,131 ms |
Coordinate → Coordinate | Range 2h | TB | 1,952 ms | 1,909 ms | 2,742 ms | 3,173 ms | 4,416 ms |
Coordinate → Coordinate | Range 2h | nigiri v0.9.1 | 1,049 ms | 886 ms | 1,561 ms | 2,049 ms | 3,530 ms |
Coordinate → Coordinate | Range 2h | nigiri v0.9.2 | 802 ms | 699 ms | 1,157 ms | 1,485 ms | 2,303 ms |
Differences for station to station queries are not as distinctive but especially the improvement on the 99% quantile is significant (10% reduction). EA query type stands for earliest arrival query (called Ontrip
in the MOTIS API).
Start | Query | Router | Avg. | q50 | q80 | q90 | q99 |
---|---|---|---|---|---|---|---|
Station → Station | EA | MCD | 555 ms | 436 ms | 745 ms | 1,017 ms | 2,002 ms |
Station → Station | EA | TB | 583 ms | 465 ms | 943 ms | 1,230 ms | 1,950 ms |
Station → Station | EA | nigiri v0.9.1 | 209 ms | 206 ms | 290 ms | 338 ms | 428 ms |
Station → Station | EA | nigiri v0.9.2 | 203 ms | 202 ms | 272 ms | 311 ms | 382 ms |
Benchmarks were conducted on a AMD Ryzen 9 5900X 12-Core Processor with MOTIS built in Release
mode. MOTIS calculations were limited to 12 threads.
Steps to reproduce
# config.ini
modules=nigiri
modules=intermodal
modules=osrm
mode=batch
num_threads=12
dataset.no_schedule=true
intermodal.router=nigiri
osrm.profiles=motis/osrm-profiles/foot.lua
[import]
paths=schedule-nl:input/schedule/nl
paths=schedule-delfi:input/schedule/delfi
paths=schedule-swiss:input/schedule/swiss
paths=osm:input/osm.pbf
[nigiri]
geo_lookup=true
first_day=2023-05-16
num_days=14
# config-routing.ini
modules=routing
modules=intermodal
modules=osrm
modules=lookup
mode=batch
num_threads=12
intermodal.router=routing
osrm.profiles=motis/osrm-profiles/foot.lua
[dataset]
begin=20230516
num_days=14
cache_graph=true
adjust_footpaths=false
[import]
paths=schedule-nl:input/schedule/nl
paths=schedule-delfi:input/schedule/delfi
paths=schedule-swiss:input/schedule/swiss
paths=osm:input/osm.pbf
# config-tripbased.ini
modules=routing
modules=intermodal
modules=osrm
modules=lookup
modules=tripbased
mode=batch
num_threads=12
intermodal.router=tripbased
osrm.profiles=motis/osrm-profiles/foot.lua
[dataset]
begin=20230516
num_days=14
cache_graph=true
adjust_footpaths=false
[import]
paths=schedule-nl:input/schedule/nl
paths=schedule-delfi:input/schedule/delfi
paths=schedule-swiss:input/schedule/swiss
paths=osm:input/osm.pbf
Generate coordinate to coordinate range queries (backward):
./motis/motis generate -c config-routing.ini --search_dir backward --start_type intermodal_pretrip --start_modes osrm_foot-15 --dest_type coordinate --dest_modes osrm_foot-15 --routers /routing /nigiri /tripbased --out q_ipretrip_idest_TARGET.txt
Generate station to station earliest arrival queries (forward):
./motis/motis generate -c config-routing.ini --message_type=routing --start_type=ontrip_station --dest_type=station --routers /routing /nigiri /tripbased --search_dir forward --out q_ontrip_sdest_TARGET.txt
Run routings:
~/code/motis/cmake-build-relwithdebinfo-mimalloc/motis -c config.ini --batch_input_file q_ipretrip_idest_nigiri.txt --batch_output_file r_ipretrip_idest_nigiri_new.txt && \
./motis/motis -c config.ini --batch_input_file q_ipretrip_idest_nigiri.txt --batch_output_file r_ipretrip_idest_nigiri_09.txt && \
./motis/motis -c config-routing.ini --batch_input_file q_ipretrip_idest_routing.txt --batch_output_file r_ipretrip_idest_routing.txt && \
./motis/motis -c config-tripbased.ini --batch_input_file q_ipretrip_idest_tripbased.txt --batch_output_file r_ipretrip_idest_tripbased.txt
Show statistics:
./motis/motis analyze r_ipretrip_idest_nigiri_new.txt && \
./motis/motis analyze r_ipretrip_idest_nigiri_09.txt && \
./motis/motis analyze r_ipretrip_idest_routing.txt && \
./motis/motis analyze r_ipretrip_idest_tripbased.txt
What's Changed
- Fixes for RI Basis + RSL RT by @pablohoch in #330
- nigiri gtfs loader memory improvement + routing speedup by @felixguendling in #331
Full Changelog: v0.9.1...v0.9.2
v0.9.1: Compact API Bugfix, nigiri ZIP File Loading
What's Changed
- sort nigiri stats by @felixguendling in #327
- compact api: destination needs to be object by @felixguendling in #328
- nigiri zip file loading support by @felixguendling in #329
Full Changelog: v0.9.0...v0.9.1
v0.9.0: First Release with Nigiri
This is the first MOTIS release with nigiri
, the new MOTIS core.
News: https://motis-project.de/release/2023/05/15/new-motis-core.html
Changes:
- make time check less strict by @felixguendling in #283
- don't connect 0,0 coordinate stations from diff. schedules by @felixguendling in #284
- RailViz: Ignore trains without polylines by @pablohoch in #286
- roll out frequencies.txt by @felixguendling in #294
- start nigiri integration (wip) by @felixguendling in #274
- Web UI Fixes for Recent API Changes by @pablohoch in #300
- HRD Parser: Ignore Hidden and Invalid Files by @pablohoch in #301
- use brew to install ninja by @felixguendling in #303
- hrd: support multiple season entries by @felixguendling in #304
- Update Clang + Boost by @pablohoch in #308
- intermodal: stop counting change times at first/last station by @felixguendling in #305
- PPR Update: Performance + Memory Improvements by @pablohoch in #315
- Add mimalloc support on Windows by @pablohoch in #317
- xtract multi schedule + GTFS parser fixes by @felixguendling in #318
- More debugging functionality (FlatBuffers + RT) by @pablohoch in #323
- replace routing generate+compare commands by @felixguendling in #325
- Remove routing generate compare, enable ontrip with meta starts by @felixguendling in #326
Nigiri
- nigiri interval extension by @felixguendling in #302
- nigiri GTFS block_id support by @felixguendling in #313
- optional schedule loading by @felixguendling in #314
API
- Tool to generate OpenAPI / JSON Schema / TS protocol definitions by @pablohoch in #281
- OpenAPI Fixes + Improvements by @pablohoch in #291
- New Compact API Format by @pablohoch in #309
- HTTP Server: Support gzip encoding for API responses by @pablohoch in #319
RSL Changes
- RSL: Detailed Capacities Part 1 by @pablohoch in #249
- RSL: Groups Rework by @pablohoch in #275
- RSL: Support Through Services by @pablohoch in #279
- RSL UI Fixes + Improvements by @pablohoch in #280
- RSL: Add support for alternative TREK format by @pablohoch in #290
- RSL: Information about groups with unreachable destinations by @pablohoch in #289
- RSL: Add number of affected passengers to simulation result by @pablohoch in #292
- RSL: Capacities Part 2 by @pablohoch in #293
- RSL: Various Improvements by @pablohoch in #295
- RSL: Reachability + Estimated Delay Fixes by @pablohoch in #296
- RSL: Meta Station Fixes by @pablohoch in #298
- RSL: Capacities via RiBasisFormation by @pablohoch in #299
- RI Basis + RSL Fixes by @pablohoch in #306
Full Changelog: v0.8.7...v0.9.0
v0.8.7: GTFS Fix - Remove Buggy Stop Location Correction
Remove buggy stop location correction code.
Full Changelog: v0.8.6...v0.8.7
v0.8.6: Fix URL Paramters (Language, Server, Time)
v0.8.5: Bugfixes
What's Changed
- Fix Infinite Loop (memory hog) in routing module label creation, fix RT-performance issues by @felixguendling in #264
- web ui: reset connections when input is empty by @felixguendling in #265
Full Changelog: v0.8.4...v0.8.5
v0.8.4: Bugfix: Remove Duplicate GTFS Services with `block_id` set
v0.8.3: Fix GTFS-RT Downloads for Large Streams
- Fixes a problem with GTFS-RT stream files >2MB
- Colors trains without delay info grey
Full Changelog: v0.8.2...v0.8.3
v0.8.2: GTFS-RT SSL fix
What's Changed
- Real-time updates for expanded trips by @pablohoch in #124
Full Changelog: v0.8.1...v0.8.2
v0.8.1: Bugfix for CSV files that only contain a header
What's Changed
- Bugfix for CSV files that only contain a header: e0bb02e
- web server: redirect /dir => /dir/ by @pablohoch in #252
- Add french translation by @kalon33 in #259
New Contributors
Full Changelog: v0.8.0...v0.8.1