Bump version to 1.21.0
Changed
* use hierarchical approach for local objective estimation
* avoid unsafe code project-wise:
* apply `#![forbid(unsafe_code)]` directive fori
rosomaxa/vrp-core/vrp-pragmatic/vrp-scientific
* apply `#![deny(unsafe_code)]` directive for vrp-cli
(due to FFI which is only one exception)
* allow unsafe code only when necessary in research crates which are
not used anyhow in production code
* make pyo3 an optional dependency and wrap python bindings under
`py_bindings` feature
* refactor `Deref` trait usage
* implement `Debug` for essential core types
* refactor job index to lower memory footprint for a large scale VRP
(tested on 30k CVRP instance)
* use proper objective for tsplib format problems (CVRP)
* error handling types
* fix sort stability issue in elitism's improvement detection method
* switch rosomaxa learning rate to cosine annealing
* rename `shiftTime` limit to `maxDuration`
Added
* experimental `compact-tour` objective which tries to shape routes based
on job neighbourhood.
* heuristic filtering extension
* simple tabu list implementation used by some ruin methods
* gene pool in rosomaxa to reintroduce some genes while search progresses