{"id":13478052,"url":"https://github.com/reinterpretcat/vrp","last_synced_at":"2025-05-14T15:03:58.642Z","repository":{"id":37726516,"uuid":"238436117","full_name":"reinterpretcat/vrp","owner":"reinterpretcat","description":"A Vehicle Routing Problem solver","archived":false,"fork":false,"pushed_at":"2025-04-09T19:40:10.000Z","size":10386,"stargazers_count":409,"open_issues_count":42,"forks_count":79,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-05-12T11:44:50.491Z","etag":null,"topics":["logistics-planning-problem","rich-vrp","transportation-planning","traveling-salesman-problem","vehicle-routing-problem","vrp","vrp-solver"],"latest_commit_sha":null,"homepage":"https://reinterpretcat.github.io/vrp/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reinterpretcat.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"reinterpretcat"}},"created_at":"2020-02-05T11:38:10.000Z","updated_at":"2025-05-10T18:10:04.000Z","dependencies_parsed_at":"2024-04-24T18:43:03.306Z","dependency_job_id":"35b496e0-e5af-40ff-94da-f093ccfa368e","html_url":"https://github.com/reinterpretcat/vrp","commit_stats":{"total_commits":2957,"total_committers":5,"mean_commits":591.4,"dds":0.001352722353736846,"last_synced_commit":"a6dcfeaacfbde757de04d6a54b56e66f8819c8a1"},"previous_names":[],"tags_count":78,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinterpretcat%2Fvrp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinterpretcat%2Fvrp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinterpretcat%2Fvrp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinterpretcat%2Fvrp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reinterpretcat","download_url":"https://codeload.github.com/reinterpretcat/vrp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254168688,"owners_count":22026206,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["logistics-planning-problem","rich-vrp","transportation-planning","traveling-salesman-problem","vehicle-routing-problem","vrp","vrp-solver"],"created_at":"2024-07-31T16:01:51.823Z","updated_at":"2025-05-14T15:03:58.597Z","avatar_url":"https://github.com/reinterpretcat.png","language":"Rust","funding_links":["https://github.com/sponsors/reinterpretcat"],"categories":["Rust"],"sub_categories":[],"readme":"[![](https://docs.rs/vrp-core/badge.svg)](https://docs.rs/vrp-core)\n[![crates.io](https://img.shields.io/crates/v/vrp-cli.svg)](https://crates.io/crates/vrp-cli)\n![build](https://github.com/reinterpretcat/vrp/actions/workflows/build.yaml/badge.svg)\n[![downloads](https://img.shields.io/crates/d/vrp-core)](https://crates.io/crates/vrp-core)\n[![codecov](https://codecov.io/gh/reinterpretcat/vrp/branch/master/graph/badge.svg)](https://codecov.io/gh/reinterpretcat/vrp)\n[![CodeScene Code Health](https://codescene.io/projects/46594/status-badges/code-health)](https://codescene.io/projects/46594)\n[![dependency status](https://deps.rs/crate/vrp-cli/1.25.0/status.svg)](https://deps.rs/crate/vrp-cli/1.25.0)\n[![DOI](https://zenodo.org/badge/238436117.svg)](https://zenodo.org/badge/latestdoi/238436117)\n\n![VRP example](docs/resources/vrp-example.png \"VRP with Route Balance\")\n\n# Description\n\nThis project provides a way to solve multiple variations of **Vehicle Routing Problem** known as rich VRP. It provides\ncustom hyper- and meta-heuristic implementations, shortly described [here](https://reinterpretcat.github.io/vrp/internals/index.html).\n\nIf you use the project in academic work, please consider citing:\n\n```\n@misc{builuk_rosomaxa_2023,\n    author       = {Ilya Builuk},\n    title        = {{A new solver for rich Vehicle Routing Problem}},\n    year         = 2023,\n    doi          = {10.5281/zenodo.4624037},\n    publisher    = {Zenodo},\n    url          = {https://doi.org/10.5281/zenodo.4624037}\n}\n```\n\n# Design goal\n\nAlthough performance is constantly in focus, the main idea behind design is extensibility: the project\naims to support a wide range of VRP variations known as Rich VRP. This is achieved through various extension\npoints: custom constraints, objective functions, acceptance criteria, etc.\n\n\n# Getting started\n\nFor general installation steps and basic usage options, please check the next sections. More detailed overview of the features\nand full description of the usage is presented in [A Vehicle Routing Problem Solver Documentation](https://reinterpretcat.github.io/vrp).\n\nProbably, the easiest way to learn how to use the solver `as is`, would be to play with [interactive tutorial](https://github.com/reinterpretcat/vrp/tree/master/examples/python-interop/tutorial.ipynb),\nwritten as jupyter notebook.\n\nAdditionally, you can check `vrp-core/examples` to see how to use the library and extend it within a new functionality.\n\n# Installation\n\nYou can install the latest release of the vrp solver using four different ways:\n\n## Install with Python\n\nThe functionality of `vrp-cli` is published to [pypi.org](https://pypi.org/project/vrp-cli/), so you can just install it\nusing pip and use from python:\n\n```shell\npip install vrp-cli\npython examples/python-interop/example.py # run test example\n```\n\nAlternatively, you can use [maturin](https://github.com/PyO3/maturin) tool to build solver locally. You need to enable\n`py_bindings` feature which is not enabled by default.\n\nAdditionally, to jupyter notebook mentioned above, you can find extra information in [python example section](https://reinterpretcat.github.io/vrp/examples/interop/python.html)\nof the docs. The [full source code](./examples/python-interop/example.py) of python example is available in the repo which\ncontains useful model wrappers with help of `pydantic` lib (reused by tutorial as well).\n\n\n## Install from Docker\n\nAnother fast way to try vrp solver on your environment is to use `docker` image (not performance optimized):\n\n* **run public image** from `Github Container Registry`:\n\n```bash\n    docker run -it -v $(pwd):/repo --name vrp-cli --rm ghcr.io/reinterpretcat/vrp/vrp-cli:1.25.0\n```\n\n* **build image locally** using `Dockerfile` provided:\n\n```bash\ndocker build -t vrp_solver .\ndocker run -it -v $(pwd):/repo --rm vrp_solver\n```\n\nPlease note that the docker image is built using `musl`, not `glibc` standard library. So there might be some performance\nimplications.\n\n\n## Install from Cargo\n\nYou can install vrp solver `cli` tool directly with `cargo install`:\n\n    cargo install vrp-cli\n\nEnsure that your `$PATH` is properly configured to source the crates binaries, and then run solver using the `vrp-cli` command.\n\n\n## Install from source\n\nOnce pulled the source code, you can build it using `cargo`:\n\n    cargo build --release\n\nBuilt binaries can be found in the `./target/release` directory and can be run using `vrp-cli` executable, e.g.:\n\n    ./target/release/vrp-cli solve solomon examples/data/scientific/solomon/C101.100.txt --log\n\nAlternatively, you can try to run the following script from the project root (with `pragmatic` format only):\n\n    ./solve_problem.sh examples/data/pragmatic/objectives/berlin.default.problem.json\n\nIt will build the executable and automatically launch the solver with the specified VRP definition. Results are\nstored in the folder where a problem definition is located.\n\nPlease note, that `master` branch normally contains not yet released changes.\n\n# Usage\n\n## Using from code\n\nIf you're using rust, you have multiple options for how the project can be used:\n\n### Use customization capabilities\n\nThe `vrp-core` provides API to compose a VRP formulation from various building blocks and even add your own. Start with\nbasic `vrp-core/examples`, then check the user documentation and code for more details.\n\n### Use built-in formats\n\nYou can use `vrp-scientific`, `vrp-pragmatic` crates to solve a VRP problem defined in `pragmatic` or `scientific`\nformat using default metaheuristic. Or you can use CLI interface for that (see below).\n\nIf you're using some other language, e.g. java, kotlin, javascript, python, please check\n[interop](https://reinterpretcat.github.io/vrp/examples/interop/index.html) section in documentation examples to see how\nto call the library from it (currently, limited to `pragmatic` format).\n\n## Using from command line\n\n`vrp-cli` crate is designed to use on problems defined in scientific or custom json (aka `pragmatic`) format:\n\n    vrp-cli solve pragmatic problem_definition.json -m routing_matrix.json --max-time=120\n\nPlease refer to [getting started](https://reinterpretcat.github.io/vrp/getting-started/index.html) section in\nthe documentation for more details.\n\n\n# Contribution policy\n\n*open source, limited contribution*\n\nThe goal is to reduce burnout by limiting the maintenance overhead of reviewing and validating third-party code.\n\nPlease submit an [issue](https://github.com/reinterpretcat/vrp/issues/new) or [discussion](https://github.com/reinterpretcat/vrp/discussions/new/choose)\nif you have ideas for improvement.\n\n# Status\n\nPermanently experimental. This is my pet project, and I'm not paid for it, so expect a very limited support.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freinterpretcat%2Fvrp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freinterpretcat%2Fvrp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freinterpretcat%2Fvrp/lists"}