Project structure
The project consists of the main and auxiliary crates. Additionally, there is some logical separation inside each group.
Main crates
The following crates are "the heart" of VRP solver:
rosomaxa
: contains key algorithms for solving optimization problems without locking to the VRP domain such as hyper heuristics, evolution strategies, etc.vrp_core
: this crate provides all core VRP models / features with various meta heuristics to solve rich VRPvrp_scientific
: has a building blocks to solve problems from some of scientific benchmarks. It is useful to evaluate the solver performance in terms of solution quality, search stability and running time.vrp_pragmatic
: provides models to support rich VRP. It includes:- pragmatic model, serializable in json
- solution checker
- problem validator
vrp_cli
: exposes VRP solve as command line interface or static library. Additionally, has some extra features, such as:- various extra commands
- pyO3 bindings to make library usable from Python
- WASM bindings to run solver directly in the browser
- ..
For these crates, you can find extra information normally published on docs.rs.
Helper crates/functionality
There are few:
experiments/heuristic-research
: my way to experiment with heuristic using some hooks and visualizations. Live version is exposed hereexamples/json-pragmatic
: provides example how to use the library as a crate + contains tests and benchmarks on test dataexamples/jvm-interop
/python-interop
: some examples how to call library from other languagesexamples/data
: various examples of problem definitions. Mostly used for testing and documentation