https://github.com/vroom-project/pyvroom
Vehicle Routing Open-source Optimization Machine
https://github.com/vroom-project/pyvroom
Last synced: about 1 year ago
JSON representation
Vehicle Routing Open-source Optimization Machine
- Host: GitHub
- URL: https://github.com/vroom-project/pyvroom
- Owner: VROOM-Project
- License: bsd-2-clause
- Created: 2021-12-16T12:59:41.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-03-12T09:36:00.000Z (over 1 year ago)
- Last Synced: 2025-03-28T11:06:30.284Z (about 1 year ago)
- Language: Python
- Size: 332 KB
- Stars: 73
- Watchers: 8
- Forks: 14
- Open Issues: 17
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
Python Vehicle Routing Open-source Optimization Machine
=======================================================
|gh_action| |codecov| |pypi|
.. |gh_action| image:: https://img.shields.io/github/checks-status/VROOM-Project/pyvroom/main
:target: https://github.com/VROOM-Project/pyvroom/actions
.. |codecov| image:: https://img.shields.io/codecov/c/github/VROOM-Project/pyvroom
:target: https://codecov.io/gh/VROOM-Project/pyvroom
.. |pypi| image:: https://img.shields.io/pypi/v/pyvroom
:target: https://pypi.org/project/pyvroom
*Good solution, fast... in Python.*
Pyvroom is an Python wrapper to the excellent `VROOM
`_ optimization engine for solving
`vehicle routing problems
`_.
The library aims to solve several well-known types of vehicle routing problems,
including:
* Travelling salesman.
* Capacitated vehicle routing.
* Routing with time windows.
* Multi-depot heterogeneous vehicle.
* Pickup-and-delivery.
VROOM can also solve any mix of the above problem types.
Basic usage
-----------
.. code:: python
>>> import vroom
>>> problem_instance = vroom.Input()
>>> problem_instance.set_durations_matrix(
... profile="car",
... matrix_input=[[0, 2104, 197, 1299],
... [2103, 0, 2255, 3152],
... [197, 2256, 0, 1102],
... [1299, 3153, 1102, 0]],
... )
>>> problem_instance.add_vehicle([vroom.Vehicle(47, start=0, end=0),
... vroom.Vehicle(48, start=2, end=2)])
>>> problem_instance.add_job([vroom.Job(1414, location=0),
... vroom.Job(1515, location=1),
... vroom.Job(1616, location=2),
... vroom.Job(1717, location=3)])
>>> solution = problem_instance.solve(exploration_level=5, nb_threads=4)
>>> solution.summary.cost
6411
>>> solution.routes.columns
Index(['vehicle_id', 'type', 'arrival', 'duration', 'setup', 'service',
'waiting_time', 'location_index', 'id', 'description'],
dtype='object')
>>> solution.routes[["vehicle_id", "type", "arrival", "location_index", "id"]]
vehicle_id type arrival location_index id
0 47 start 0 0
1 47 job 2104 1 1515
2 47 job 4207 0 1414
3 47 end 4207 0
4 48 start 0 2
5 48 job 1102 3 1717
6 48 job 2204 2 1616
7 48 end 2204 2
Usage with a routing engine
---------------------------
.. code:: python
>>> import vroom
>>> problem_instance = vroom.Input(
... servers={"auto": "valhalla1.openstreetmap.de:443"},
... router=vroom._vroom.ROUTER.VALHALLA
... )
>>> problem_instance.add_vehicle(vroom.Vehicle(1, start=(2.44, 48.81), profile="auto"))
>>> problem_instance.add_job([
... vroom.Job(1, location=(2.44, 48.81)),
... vroom.Job(2, location=(2.46, 48.7)),
... vroom.Job(3, location=(2.42, 48.6)),
... ])
>>> sol = problem_instance.solve(exploration_level=5, nb_threads=4)
>>> print(sol.summary.duration)
4041
Installation
------------
Pyvroom currently makes binaries for on macOS and Linux. There is also a
Windows build that can be used, but it is somewhat experimental.
Installation of the pre-compiled releases should be as simple as:
.. code:: bash
pip install pyvroom
The current minimal requirements are as follows:
* Python at least version 3.9.
* Intel MacOS (or Rosetta2) at least version 14.0.
* Apple Silicon MacOS at least version 14.0.
* Windows on AMD64.
* Linux on x86_64 and Aarch64 given glibc at least version 2.28.
Outside this it might be possible to build your own binaries.
Building from source
====================
Building the source distributions requires:
* Download the Pyvroom repository on you local machine:
.. code:: bash
git clone --recurse-submodules https://github.com/VROOM-Project/pyvroom
* Install the Python dependencies:
.. code:: bash
pip install -r pyvroom/build-requirements.txt
* Install ``asio`` headers, and ``openssl`` and ``crypto`` libraries and headers.
For mac, this would be::
brew install openssl@1.1
brew install asio
For RHEL::
yum module enable mariadb-devel:10.3
yum install -y openssl-devel asio
For Musllinux::
apk add asio-dev
apk add openssl-dev
* The installation can then be done with:
.. code:: bash
pip install pyvroom/
Alternatively it is also possible to install the package from source using
`Conan `_. This is also likely the only
option if installing on Windows.
To install using Conan, do the following:
.. code:: bash
cd pyvroom/
conan install --build=openssl --install-folder conan_build .
Documentation
-------------
The code is currently only documented with Pydoc. This means that the best way
to learn Pyvroom for now is to either look at the source code or use ``dir()``
and ``help()`` to navigate the interface.
It is also useful to take a look at the
`VROOM API documentation `_.
The interface there is mostly the same.