Highlights
- Support for heterogeneous vehicle capacities.
- Support for client release times.
- A simpler modelling interface in the form of `pyvrp.Model`.
- Various documentation and performance improvements.
What's Changed
* Logos in README and docs by N-Wouda in https://github.com/PyVRP/PyVRP/pull/225
* Simplify SREX by N-Wouda in https://github.com/PyVRP/PyVRP/pull/228
* Explicit cost, distance, and duration types by N-Wouda in https://github.com/PyVRP/PyVRP/pull/210
* Speed up greedyRepair, improve deltaCost evaluation by N-Wouda in https://github.com/PyVRP/PyVRP/pull/232
* Add support for double precision by N-Wouda in https://github.com/PyVRP/PyVRP/pull/234
* Base route angle on centroid of client locations by N-Wouda in https://github.com/PyVRP/PyVRP/pull/237
* Remove C++ LS dependency on rng, use separate shuffle method by N-Wouda in https://github.com/PyVRP/PyVRP/pull/238
* Simpler modelling interface by N-Wouda in https://github.com/PyVRP/PyVRP/pull/236
* Only store non-empty routes in Individual by wouterkool in https://github.com/PyVRP/PyVRP/pull/240
* Remove distances and prizes from Individual string representation by leonlan in https://github.com/PyVRP/PyVRP/pull/243
* Introduction to VRP and HGS documentation by leonlan in https://github.com/PyVRP/PyVRP/pull/242
* Rename Individual to Solution by N-Wouda in https://github.com/PyVRP/PyVRP/pull/246
* Rename pyvrp.educate to pyvrp.search by N-Wouda in https://github.com/PyVRP/PyVRP/pull/248
* Heterogeneous vehicle type by wouterkool in https://github.com/PyVRP/PyVRP/pull/245
* Release times by leonlan in https://github.com/PyVRP/PyVRP/pull/254
**Full Changelog**: https://github.com/PyVRP/PyVRP/compare/v0.3.0...v0.4.0