Skip to contents

vrpr 0.2.3

  • Custom travel distances and durations are now a first-class feature: vrp_solve() gains distance and duration arguments (forwarded to vrp_problem_data()), so matrices from a road network or a routing engine can be used without assembling the problem data by hand (#4).
  • vrp_problem_data() documents the location order of the matrices, checks them on the R side (square, finite, non-negative, integer-valued) and explains how to round or scale non-integer matrices instead of failing with a terse error at the C++ boundary.
  • When an explicit distance matrix is reused as duration and the model has temporal features (time windows, service times, duration limits), a warning points out that those are then measured in distance units.
  • New “Distances and durations” section in the Getting started vignette and the README.

vrpr 0.2.2

CRAN release: 2026-10-06

  • Fixes the installation failure in CRAN’s additional clang23 checks (LLVM 23 libc++, which no longer provides <algorithm> transitively): the vendored Client.cpp and VehicleType.cpp use std::any_of without including it. tools/vendor.R now adds the include, as it already did for <iterator>.

vrpr 0.2.1

CRAN release: 2026-09-30

  • Fixes the installation failure on the CRAN macOS builders that use Apple’s MacOSX11.3 SDK (r-release-macos-x86_64, r-oldrel-macos-arm64 and r-oldrel-macos-x86_64): a lambda in the vendored SearchSpace.cpp captured a structured binding, which older Apple clang rejects (allowed only from C++20). tools/vendor.R now copies the binding into a plain reference before the lambda.

vrpr 0.2.0

CRAN release: 2026-09-28

Upgrades the vendored solver core to PyVRP 0.14.0 (from 0.13.4), a major upstream release that reworks the data model and the search engine.

New features

  • Pickup and delivery (shipments): add_shipments() adds paired pickup/delivery visits (same vehicle, pickup first, same trip), enabling the PDP/PDPTW family of problems. Solutions report num_shipments and num_missing_shipments.
  • New unplanned() accessor: a tidy view of the optional clients and shipments left out of the solution (prize collecting).
  • routes() now also reports activity ("client", "pickup" or "delivery"), shipment and trip columns; client rows keep the previous columns, so pure client instances read as before.

Upstream changes tracked

  • The search engine follows PyVRP 0.14’s design: a single operator family (Relocate/Swap plus explicit optional-client/shipment/group operators) replaces the old node/route operator split; the granular neighbourhood is now computed by upstream C++ code (default num_neighbours = 50).
  • The penalty manager follows PyVRP 0.14: midpoint initial penalties, violation-magnitude registration, update every 500 solutions and penalty_decrease = 0.90. The init_load/init_tw/init_dist arguments of ils_params() were removed accordingly.
  • Internally, routes are sequences of typed activities; reload depots (multi trip) appear as depot activities inside the route.

Breaking changes

  • ils_params() lost init_load, init_tw and init_dist (see above); num_neighbours now defaults to 50 (PyVRP’s default).
  • routes() gains columns; code that relied on the exact column set should select explicitly.

vrpr 0.1.1

CRAN release: 2026-08-27

Portability fixes for CRAN builders; no user-facing changes.

  • Fixed compilation with LLVM 23’s libc++ (CRAN’s clang23 additional checks), which no longer provides std::back_inserter transitively: the vendored search/LocalSearch.cpp and Solution.cpp now include <iterator> explicitly.
  • Fixed compilation on the CRAN macOS builders that use Apple’s MacOSX11.3 SDK (r-release-macos-x86_64 and r-oldrel-macos), whose libc++ <concepts> lacks std::convertible_to: a small compatibility shim (vrpr_compat.h) supplies the concept where the standard library does not.
  • Route::Iterator in the vendored sources now declares all five iterator member typedefs, as required by pre-C++20 std::iterator_traits on the same older libc++ (verified by compiling every translation unit against the MacOSX11.3 SDK’s libc++ headers).
  • These fixups are applied by tools/vendor.R on top of the verbatim PyVRP sources, so they survive re-vendoring.

vrpr 0.1.0

CRAN release: 2026-07-04

First release.

  • A tidy, pipe-friendly R interface to the ‘PyVRP’ vehicle routing solver. PyVRP’s high-performance C++ core is vendored and rewired through ‘cpp11’, with no ‘Python’ runtime dependency.
  • Supports the capacitated VRP, time windows (VRPTW), heterogeneous fleets, multiple depots (MDVRP), prize-collecting (optional clients and mutually exclusive client groups), simultaneous pickup and delivery / backhaul, and multi-trip routes.
  • read_vrplib() and read_solomon() read standard VRPLIB/TSPLIB and Solomon instances; plot() draws solutions with ‘ggplot2’.
  • The solver is a faithful port of PyVRP’s iterated local search; objective and solution-quality parity with PyVRP is verified in tools/benchmark/.