Good solutions, fast.
VROOM is an open-source optimization engine written in C++17 that aim at providing good solutions to various real-life vehicle routing problems (VRP) within a small computing time.
The project has been initiated by Verso to power its route optimization API.
VROOM can solve several well-known types of vehicle routing problems (VRP).
- TSP (travelling salesman problem)
- CVRP (capacitated VRP)
- VRPTW (VRP with time windows)
- MDHVRPTW (multi-depot heterogeneous vehicle VRPTW)
- PDPTW (pickup-and-delivery problem with TW)
VROOM can also solve any mix of the above problem types.
VROOM models a VRP with a description of resources (vehicles
),
single-location pickup and/or delivery tasks (jobs
) and
pickup-and-delivery tasks that should happen within the same route
(shipments
).
- Delivery/pickup amounts on arbitrary number of metrics
- Service time windows
- Service duration
- Skills
- Priority
- Capacity on arbitrary number of metrics
- Skills
- Working hours
- Driver breaks
- Start and end defined on a per-vehicle basis
- Start and end can be different
- Open trip optimization (only start or only end defined)
VROOM works out-of-the-box on top of several open-source routing engines.
VROOM can also use a custom cost matrix computed from any other source.
- The demo frontend provides a simple user interface for quick tests.
- The demo server makes it easy to send sample optimization requests for testing purposes.
Several options are available to get vroom
running on command-line.
- Build from source following the wiki instructions.
- Use
vroom-docker
.
Refer to this wiki page
vroom-express
is a
simple wrapper to use vroom
with http requests. It's already bundled
in the vroom-docker
setup.
The project can also used as a library from any C++ project, refer to this wiki page.
Github Actions are used to check the build across various compilers and settings.
Several sets of instances are used.
- Benchmark instances from papers (see wiki page with results).
- Custom random instances generated to target typical use-cases and constraints settings.
- Real-life instances.
Academic and custom benchmarks are heavily used during development for each new core feature. Every new release is checked against all benchmarks classes to spot potential regressions with regard to both solution quality and computing times.