Blauth2024 (TDVRPTW)¶
Blauth2024 is the MAMUT-routing conversion of the delivery-only instances of the vrptdt-benchmark published by Blauth, Held, Müller, Schlomberg, Traub, Tröbst & Vygen (2024) (upstream repository, archived at bonndata). It is the major modern reference for realistic time-dependent routing: ten cities on four sub-continents (Berlin, Cincinnati, Kyiv, London, Madrid, Nairobi, New York, San Francisco, São Paulo, Seattle) at 10, 500, 1000 and 2000 customers, with travel times derived from real OpenStreetMap road networks and hourly Uber Movement speeds, shipped as dense per-arc piecewise-linear arrival-time functions. Uber Movement was shut down in 2023, so these published matrices can no longer be reproduced from public sources; redistributing them faithfully is also an act of preservation.
The instances are delivery-only TDVRPTW: an unlimited identical uncapacitated fleet (num_vehicles = null), depot departures at or after 15:00 with free return, three minutes of service per delivery, and hard time windows (half one-hour windows, half wide 15:30 to 21:00). The conversion is a value-exact integer relabeling of the upstream data with no numeric transformation; notably, this is the first family whose time unit is integer milliseconds rather than seconds (declared per instance, and 91% of the upstream breakpoints are not whole seconds, so any rescale would break bit-exactness). There is no TDVRP twin: upstream defines no time-window-free variant and the time windows are intrinsic to the instance generation. The upstream pickup-and-delivery variant is out of MAMUT-routing's node-routing scope and is not converted.
This family is also the first to use the FleetCostDuration objective: cost = sum of per-route optimal durations + 36000000 ms per route, which reproduces the upstream dollar objective ($200 per vehicle plus $20 per working hour) exactly as cost in $ = cost in ms / 180000. Best-known solutions at 500 to 2000 customers are imported from the upstream BonnTour high-effort reference solutions (credited to the seven authors; each was re-verified hard-feasible with the upstream evaluator's exact rational arithmetic, then repriced by the canonical checker with per-route departure re-optimization, so the stored costs sit just below the published dollar values, whose ceilings they match exactly). At 10 customers upstream publishes no solutions, so the KAYROS entries are the first published results for that tier.
Hosting is hybrid because a single n=1000 arrival-time-function sidecar exceeds GitHub's file-size limit: the 10 and 500 customer tiers are hosted in full in the satellite repository, while the 1000 and 2000 customer tiers host the instance descriptors (locations, time windows, fleet, metadata) and best-known solutions plus SHA-256 pins; only the oversized arrival-time-function sidecars are regenerated locally by the deterministic converter in MAMUT-routing-tools and verified against the pins. On this site the 1000 and 2000 customer pages therefore show the instances and their best-known solutions, without the per-route schedule tables and the arc travel-time viewer (both need the arrival-time functions).
Licensing note: this family is distributed under Creative Commons Attribution Non Commercial 4.0 International because the underlying Uber Movement speed data is CC BY-NC 3.0. Non-commercial use only, with attribution to the original authors (full attribution block in the satellite repository's LICENSE: paper, upstream repository, bonndata DOI, OpenStreetMap ODbL, Uber Movement). This differs from the MIT License used for MAMUT-routing source code; the Ortec2022 family sets the same precedent.
The family currently contains 40 instances (ten cities at each of the four sizes; the n=10 and n=500 tiers hosted in full, the n=1000/2000 tiers as descriptors with converter-materialized sidecars) and 40 FleetCostDuration BKS files, one per instance: 30 imported BonnTour reference solutions and the 10 first-published n=10 entries.
Data
Instances and best-known solutions: /benchmarks/tdvrptw/blauth2024/ on the website. Repository: https://github.com/ANR-MAMUT/MAMUT-routing-TDVRPTW-Blauth2024.
Repository README¶
Blauth2024 TDVRPTW benchmark family (OSM + Uber Movement time-dependent city instances)¶
Satellite benchmark repository of MAMUT-routing (ANR MAMUT, ANR-22-CE22-0016), mounted there as benchmarks/TDVRPTW/Blauth2024. Value-exact conversion of the delivery-only instances of the vrptdt-benchmark of Blauth, Held, Müller, Schlomberg, Traub, Tröbst and Vygen (2024): 10 cities on four sub-continents, real OpenStreetMap road networks, hourly Uber Movement speeds, dense per-arc piecewise-linear arrival-time functions.
License caveat, read first: this family is CC BY-NC 4.0, unlike the MIT-licensed MAMUT-routing code and most other MAMUT families. The Uber Movement speed data it derives from is CC BY-NC 3.0, so every instance, sidecar and best-known-solution file here is non-commercial use only, with attribution (see
LICENSEfor the full block: paper, upstream GitLab repository, bonndata DOI, OSM ODbL, Uber Movement).
Why this family¶
The vrptdt-benchmark is the major modern reference for realistic time-dependent vehicle routing: travel times come from real road networks and measured speeds, not synthetic congestion profiles. It also carries a preservation argument: Uber Movement was shut down on October 1, 2023 (Uber's own announcement survives only in the Internet Archive), so the published arrival-time matrices can no longer be reproduced from public sources and are the sole surviving artifact of that speed data. This conversion makes the family usable with the MAMUT-routing canonical format, checker and BKS machinery while keeping the original semantics bit-exact.
Upstream: https://gitlab.com/muelleratorunibonnde/vrptdt-benchmark (converted at commit 45f8f57e4d643af5c4e7641e77c2aad197233dc2), archived at bonndata DOI 10.60507/FK2/X22BKR. Paper: Discrete Optimization 53 (2024), 100848.
The instances¶
Ten cities (berlin, cincinnati, kyiv, london, madrid, nairobi, new_york, san_francisco, sao_paulo, seattle) at sizes n = 10, 500, 1000 and 2000 customers, named Blauth-<city> under n=<size>/. Delivery-only TDVRPTW: an unlimited identical uncapacitated fleet (encoded as num_vehicles: null, demands all 1, capacity n), depot departures at or after 15:00 with free return, 3 minutes of service per delivery, and hard time windows (50% one-hour windows, 50% wide 15:30 to 21:00; service must begin within the window, waiting at early arrivals). Travel times are dense (n+1)^2 matrices of piecewise-linear arrival-time functions spanning 15:00 to 22:00.
Two deviations from the habits of other MAMUT TD families, both declared in each instance:
- Time unit is integer milliseconds since midnight (
metadata.time_unit = "millisecond"). 91% of the upstream breakpoints are not whole seconds, so any rescale would break bit-exactness; the MAMUT checker is unit-agnostic. - No TDVRP twin. Upstream defines no time-window-free variant and the time windows are intrinsic to the instance generation, so a synthetic twin would misrepresent the family.
The upstream project also publishes a pickup-and-delivery variant of every instance. It is out of the node-routing scope of MAMUT-routing and is not converted here; see the upstream repository.
Objective: FleetCostDuration¶
Best-known solutions are published under the FleetCostDuration objective: cost = sum of route durations + F * K with K the number of routes and F = fleet_fixed_cost = 36000000 ms (10 hours) carried by each instance. Route durations are the canonical checker's per-route optimal durations (each route's depot departure time is a decision variable, exactly as in the Duration objective). This reproduces the upstream dollar objective ($200 per vehicle plus $20 per working hour) exactly: cost in $ = cost_ms / 180000. All breakpoints are integer milliseconds, so checker costs are exact.
BKS sidecars are named <Name>.bks.FleetCostDuration.json; costs are always the authoritative output of the canonical checker (mamut_routing_lib.td.check_td_solution, mamut-routing-lib >= 0.9.0, exact IEEE-754 arithmetic, no epsilons).
Hosting: n=10 and n=500 complete, n=1000 and n=2000 without the ATF sidecar¶
GitHub file-size limits make the big sidecars unhostable (a single n=1000 ATF sidecar exceeds 100 MiB gzipped; n=2000 sidecars reach 386 MiB). The family is therefore hybrid:
n=10/andn=500/ship complete:<Name>.vrp.jsoninstance,<Name>.atf.json.gzcanonical ATF sidecar (gzipped), and BKS sidecars.n=1000/andn=2000/ship the<Name>.vrp.jsoninstance descriptors (locations, time windows, fleet, metadata, recordedatf_sha256pin), BKS sidecars, and the sha256 pins below; only the oversized ATF sidecars are regenerated locally with the deterministic converter and verified against the pins.
Note that loading a big-size instance with mamut_routing_lib.td.load_td_instance fails with a missing-sidecar error until the ATF sidecar is materialized: run the converter below with --output-dir pointing at this repository's checkout (or copy the emitted <Name>.atf.json.gz next to the hosted <Name>.vrp.json). The emitted .vrp.json files are byte-identical to the hosted ones, and the sidecar is verified against the recorded atf_sha256 on every load.
To materialize the big sizes, clone the upstream repository at the pinned commit and run the converter from MAMUT-routing-tools:
git clone https://gitlab.com/muelleratorunibonnde/vrptdt-benchmark
git -C vrptdt-benchmark checkout 45f8f57e4d643af5c4e7641e77c2aad197233dc2
mamut-tools convert blauth2024 vrptdt-benchmark --output-dir <dir> --sizes 1000,2000
Two converter runs produce bit-identical canonical bytes; conversion re-loads every emitted instance with sha verification. Verified pins (atf_sha256 is the hash of the uncompressed canonical sidecar bytes, recorded in each instance's td block):
| instance | size | atf_sha256 |
|---|---|---|
| Blauth-berlin | 1000 | 87584665aae00049ead7e2c6cfa1cd96fc348ee4a4573ce5feb91eb69bca9bc8 |
| Blauth-cincinnati | 1000 | a33d787a2c64cfd6758c64265298e025c133ce75b294d2c70a17df4855cd324c |
| Blauth-kyiv | 1000 | 6ef5927c9ae6219601ba31b37db3d396120ca3694868c5b4f2cb9a631bb84861 |
| Blauth-london | 1000 | 7e6a53c509f81c9c3a508ddd3f4ef41adf998b63f18be96fce9675eb2af7f530 |
| Blauth-madrid | 1000 | e6a218163ca52992b80c72d317c88ad8cfaaa71ef5b7067b7afb5c9ddf12b97b |
| Blauth-nairobi | 1000 | 6d19df18e07fee33e7240d0f523b3ed4f9963a3584b68bdbb980536b8edc5e37 |
| Blauth-new_york | 1000 | 7fc60cd36b883953f78b2bdc889aa6b2f00be184107fd8538552aca4b14da004 |
| Blauth-san_francisco | 1000 | 42a9d9759dfe1e980ae54695497ab4dc0f5c9944d281891a2f8c7c0be195c167 |
| Blauth-sao_paulo | 1000 | e6fb03915e85f3b226bba56c7912760a39bfb3c964d54f9d20655776e3ec399c |
| Blauth-seattle | 1000 | d2448e0cb544a6d53ad5cea16996eeaf69a365b053e7b2a7ce13caada1c322c8 |
| Blauth-berlin | 2000 | 7ea3fa2bc2d899982f57744b624fda9c0d5e5002ed42a74143b7fbf1fc8bb5a9 |
| Blauth-cincinnati | 2000 | 66d02cad2b09d5b274475cfb3c35275aa126ad0df75a52fadfb0d4f8926f48fe |
| Blauth-kyiv | 2000 | 855687244efc58448cf540bc2a9e2ea0d49c01ebcc1b960efa44098117d37053 |
| Blauth-london | 2000 | 3e686a2b66b12ebbbe828321c91f1da718658df532753e65dc69acaf6ddac73e |
| Blauth-madrid | 2000 | 1b36c82cdc29d147dc6dafc7fd28e99ae572932b7f32761237a9b2c88cfd5e05 |
| Blauth-nairobi | 2000 | 60ce865ff70056389de235964d46dd208ca964d63ef6d8f1e0383d5c2df47d87 |
| Blauth-new_york | 2000 | 7040ce56a475c95d2aa468ed1e27a10d6c6f8fc2a47fdb230c9a8af92ce25e5a |
| Blauth-san_francisco | 2000 | 21cca22b684efd686ab7b992b425c91862afee3529d5f11b1d54125cf8c8ebb9 |
| Blauth-sao_paulo | 2000 | 6b3ca7c2e94ddcd3f9e848ec0f1e73b16258ca5e2aa00ccfa3c95a367e0af27b |
| Blauth-seattle | 2000 | 58ca0959e055776c7c6ea6b0b61a331aa5b75573f40a414db5a2e5ba1f4d64ff |
All twenty n=1000/2000 pins are published above; each instance's own metadata.generator.upstream_files block additionally pins the sha256 of the exact upstream source files. The berlin and london pins at both sizes were additionally reproduced bit-identically by an independent conversion on a second machine.
Conversion semantics (value-exact port)¶
The converter performs a pure integer relabeling of the upstream data; no numeric transformation is applied to any travel-time value. The details, all recorded per instance in metadata:
- Upstream items "1".."n" map to customers 1..n, "depot" to node 0; upstream
atf_leave_time/atf_arrive_timebreakpoints are carried verbatim per arc. Identity self-arcs are dropped (MAMUT sidecars cover i != j only; a strict gate asserts each dropped self-arc is exactly the identity). - Arcs between co-located addresses (upstream encodes them as full identities) are kept as zero-travel arcs restricted to the horizon; the items stay distinct customers because each 3-minute service must begin within its own time window (
metadata.co_located_arcs). - Some upstream arc domains end before 22:00 (coverage is only guaranteed past 21:33). They are completed to 22:00 at constant travel time, which is provably value-identical: the latest time window ends at 21:00 and service takes 3 minutes, so no feasible departure exists after 21:03 and the completed region is unreachable (
metadata.domain_extended_arcs; arcs ending before 21:03 are refused). - The depot due date is midnight (
time_windows[0] = [54000000, 86400000]): upstream imposes no return deadline, and midnight is provably non-binding because every return arc evaluated exactly (integer rationals) at the 21:03 latest-departure bound arrives strictly before midnight (metadata.depot_due_date.max_feasible_return_ceil; family worst: london, 22.53 h). - The upstream fastest-path distance channel (
atf_dist_end_time/atf_distance, informative meters) is not carried into the sidecars; the upstream source files are sha-pinned per instance for anyone needing it.
Best-known solutions¶
- n=500, 1000, 2000: imported from the upstream reference solutions (BonnTour high-effort mode, credited to the seven Blauth et al. authors). The upstream per-tour
start_timeis dropped and each route's depot departure is re-optimized by the checker, so the imported costs are less than or equal to the published dollar values; the published Table 2 values of the paper are exactly the ceilings of the imported costs in dollars. Every imported solution passed a hard-time-window re-evaluation with the upstream evaluator's exact rational arithmetic before import. - n=10: upstream publishes no solutions at this size, so these entries are the first published results for the tier.
See CHANGELOG.md for the BKS history.