All notable changes to this project will be documented in this file.
- original job place index in activity place to simplify activity-job place matching
experimental
: a new type of location in pragmatic format to model zero distance/duration from it to any other location. This could be useful to model optional vehicle start location.- allow user to pass alternative objectives in goal context to guide the search
experimental
: a newfast-service
objective function to serve jobs as soon as possible
- experimental
dispatch
feature
- apply code style refactoring
- improve selection sampling search
- update dependencies
- improve a bit documentation
- double reload assignment when initial solution is used (#126)
- unexpected total_order behavior in dynamic heuristic (#128)
- improve validation rule for break with time offset (#129)
- fix issue with skills (#133)
- do not cluster jobs if they are defined in relations (#141)
v1.22.1- 2023-08-26
experimental
recharge stations feature to support basic electric VRP use case
- apply refactorings to some core api
- update dependencies
- reload is removed from the solution passed as initial (#126)
v1.22.0- 2023-08-08
This release focuses on algorithmic and some feature changes
breaking
replace MDP with multi-armed bandit RL algorithm- change
stops.activity.time.start
not to include waiting time - improve required break functionality
- improve managing packages with cargo's workspace
- update dependencies
breaking
: refactor internal models to simplify cost/telemetry handlingbreaking
change required break definition to support time range- change duration in csv import command from minutes to seconds
breaking
useGenericError
instead ofString
withinResult
- more experimental plots in
heuristic-research
playground - geojson output if the library is used from interop api
v1.21.1- 2023-06-09
This release brings experimental async-evolution
with other improvements.
- update dependencies
- fix documentation issues
- refactor
HeuristicContext
trait to avoid usingHeuristicPopulation
directly from it - improve non-determinism based selectors logic
- add experimental feature
async-evolution
v1.21.0- 2023-04-27
This release brings hierarchical approach for local objective estimation. Additionally, it focuses on refactoring, mostly to avoid usafe code. In memory of..
- use hierarchical approach for local objective estimation
- avoid unsafe code project-wise:
- apply
#![forbid(unsafe_code)]
directive for 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
- apply
- 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 tomaxDuration
- 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
v1.20.0- 2023-04-01
This release is focused on removing unsafe code from the solver core.
- refactor RouteContext to avoid using Arc and unsafe code
- refactor Network to avoid using Arc/RwLock and, as result, unsafe code in consumers
- adapt core api to required safety changes
v1.19.2 - 2023-03-22
This release introduces improvements in rosomaxa-heuristic.
- python binding with pyo3
- example how to use library with maturin
- cleaned area leftovers
- update dependencies
- update rust version on dev environment to 1.68
- fix clippy warnings
- bug fix in capacity feature
- change gsom compaction logic and adapt rosomaxa
v1.19.1 - 2022-12-14
breaking
: replaceLegSelector
withLegSelectionMode
- use different approach for leg selection: selection sampling search
- introduce initial weights in dynamic heuristic
- update dependencies
- update rust version on dev environment to the latest (1.65.0)
v1.19.0 - 2022-10-16
This release is focused on internal design improvements with some performance implications.
breaking
: combine objectives and constraint modules into feature concept- improve ruin limits logic
- change insertion position evaluation logic to speedup analysis
- update dependencies
- update rust version used for development (1.64)
breaking
: remove area constraint as it needs rework
v1.18.4 - 2022-08-21
breaking
: simplify unassigned job reason model- fix capacity violation issue related to reload feature
v1.18.3 - 2022-08-10
- add shared resource constraint for vehicle reload. Essentially, it is a limit for amount of deliveries picked from specific reload places.
- improve obsolete reload removal logic
- improve groups constraint
- refactor heuristic research crate
v1.18.2 - 2022-07-12
RedistributeSearch
heuristicdiversify
method to hyper-heuristics to increase population diversity when search stagnates
- use experimental mode to print dynamic heuristic statistics
- random trait internals
- refactor multi trip functionality
- use faster hash builders inside
RouteState
andDimensions
- update dependencies
v1.18.1 - 2022-05-13
- expose more than one reason of job unassignment. This should give more information why job was not assigned to existing tours.
- adapt weights in heuristics
v1.18.0 - 2022-05-07
This release focuses on performance improvements.
- adapt
RosomaxaWeighted
interface for weight caching - modify MDP reward of heuristic based on its execution time
breaking
: useSmallRng
as faster alternative toStdRng
and avoid initialization on each usage- improve slow search detection logic
- update dependencies
- fix issue: telemetry metrics are not included in solution file
- fix issue: capacity violation in rare cases when multi-jobs are used
WorstRouteRemoval
: removes routes with the smallest amount of jobs
- remove
MultiSelective
and useDynamicSelective
by default
v1.17.0 - 2022-04-25
This release focuses on internal algorithm improvements in direction of predictability.
- upgrade to 1.60 rust
- fix tour order issue related to break/reload activities
- fix limit violation issue in specific use cases
- improve rosomaxa and customized GSOM implementation
- use a new
Arc::new_cyclic
method to bind multi-single jobs - fix regression in runtime performance related to greediness of SWAP* heuristic implementation
- heuristic research playground with algorithm visualizations capabilities
v1.16.1 - 2022-03-10
- stopping by terminal signal
minimize-arrival-time
objective to prefer solutions where work is finished earlier.
v1.16.0 - 2022-03-03
breaking
: add required break functionality (experimental)- update dependencies
v1.15.0 - 2022-02-15
breaking
: rework area constraint
v1.14.0 - 2022-01-23
breaking
: extract rosomaxa crate with generalized heuristic implementation- update dependencies
v1.13.0 - 2021-12-05
- add
compatibility
property to the job definition - add new local search operator based on SWAP* algorithm
- migrate to 2021 edition
- update dependencies
- remove dependency on
chrono
in favor oftime
- use variable strategy for leg insertion analysis
- adjust route removal ruin methods to limit a bit amount of removed jobs
- order of initial heuristics
v1.12.0 - 2021-11-16
- a new local search operator: exchange sequence
- a vicinity job clustering: group close jobs in the same stop and visit them differently
- update dependencies
- bug fixes
v1.11.5 - 2021-09-27
- a limited support for TSPLIB95 format
- more validation rules for objective usage
- change defaults for initial solution building logic
- improve rosomaxa algorithm
- improve tour order objective logic
- update dependencies
v1.11.4 - 2021-09-10
- fix a memory leak
- update dependencies
v1.11.3 - 2021-09-07
analyze clusters
command to cli- break policy property
- a penalty property for skipping break in
maximize-value
objective
- improve clustering removal heuristic
- enhance rules for slow search detection and reduce search radius in case of it
- improve unassigned jobs handling logic
- update dependencies
v1.11.2 - 2021-08-22
group
constraint on job in pragmatic format
v1.11.1 - 2021-08-17
- slice recreate method
breaking
: move tag from task to place level in pragmatic formatbreaking
: adjust break definition to be consistent with job- update dependencies
v1.11.0 - 2021-08-08
- a metaheuristic which searches in infeasible solution space
- logic to swap objective with some small probability in rosomaxa algorithm
- refactor logging configuration
- change metaheuristic coefficients
v1.10.8 - 2021-07-21
- validation rule for any relation
v1.10.7 - 2021-07-12
- export validation function
v1.10.6 - 2021-06-27
- logging prefix in config
- minor changes in core logic
v1.10.5 - 2021-06-20
- finalize tour order implementation and make it work on job place level
- minor improvements in pragmatic format logic
- update dependencies
- undocumented
hre
format
v1.10.4 - 2021-05-15
- pre/post processing steps for problem and solution
- optimization which moves backward departure time
- coefficient of variation termination criteria is extended to support time period
- do not always try to move forward departure time
v1.10.3 - 2021-05-03
- new recreate method:
RecreateWithSkipRandom
min-cv
can be used in exploration search phase- improve rosomaxa algorithm
v1.10.2 - 2021-04-28
- introduce
min-cv
parameter instead ofcost-variation
- improved stability of some tests
- bug fixes
cost-variation
parameter
v1.10.1 - 2021-04-20
breaking
: rename job'spriority
property toorder
- change default objective behaviour when
value
property is used
v1.10.0 - 2021-04-02
This release has breaking changes in pragmatic format and internal apis.
- new objectives:
minimize-distance
andminimize-duration
- new CLI option:
init-size
to control amount of initial solutions to be built built - travelling duration scale on vehicle profile: it can be used to adjust durations for specific vehicle type
- optimize cluster ruin method
- improve unassigned code reason handling
breaking
: convert profile property on vehicle type to an object
type
property from matrix profile
v1.9.1 - 2021-03-24
- maximize value objective
- build multiple initial solutions
v1.9.0 - 2021-03-19
- use dynamic hyper-heuristic by default
- flatten objective functions definition
- rebalance coefficients of recreate methods
- reduce default population selection size
v1.8.1 - 2021-02-26
- a new ruin method which destroys closest routes
- more solution checker rules
- rebalance ruin methods
- fix an issue with huge amount of possible permutations in multi job
v1.8.0 - 2021-02-07
- a new mutation operator: decompose search which is used for bigger problem instances
- a new population type: greedy
breaking
: introduced hyper-heuristic model- an experimental dynamic selective hyper-heuristic (WIP)
- speedup processing of unassigned jobs
v1.7.4 - 2021-01-23
- introduced parallelism control options (experimental).
v1.7.3 - 2021-01-08
- update
hre
format support to v2 version - update dependencies
v1.7.2 - 2020-12-05
- update dependencies
- apply minor algorithm changes
v1.7.1 - 2020-11-29
This release focuses on improving performance and bug fixing.
- use
stale
flag internally to avoid route state updates on non-changed routes
- remove unstable push tour departure LS method
v1.7.0 - 2020-11-23
This release features a new solution space exploration algorithm called ROSOMAXA: Routing Optimizations with Self Organizing MAps and eXtrAs (pronounced as "rosomaha", from russian "росомаха" - "wolverine").
- add and use by default rosomaxa algorithm
- add a new LS method to push tour departure in the future
- add a Local Search mutation
- add farthest insertion heuristic
- move Local Search out of Ruin Recreate mutation
breaking
: use string as unassigned job reason code
v1.6.4 - 2020-10-27
- tour size constraint which limits amount of job activities per tour
v1.6.3 - 2020-10-21
- introduce dispatch feature to support vehicle dispatching functionality (depot replacement)
breaking
: removed depot feature
ExchangeIntraRouteRandom
now removes and reinserts with noise a single random job
v1.6.2 - 2020-10-18
breaking
: job skills are now defined byallOf
,oneOf
andnoneOf
conditions- use
hashbrown
library inpragmatic
crate - fixed minor bugs
config
property frompragmatic
format
v1.6.1 - 2020-10-15
breaks
property inminimize-unassigned
objective- dependencies audit by
github actions
- break assignment is made less strict by default. User has certain control on its assignment by the objective
- replaced
uniform_real(0., 1.)
usage withis_hit
method inRandom
trait - default parameters of local search operators
- minor tech debt
v1.6.0 - 2020-10-14
- cargo features to build
cli
library without certain dependencies - proper
k-regret
recreate method recreate-with-perturbation
recreate method- add
local search
operators to ruin recreate mutation:- inter route best
- inter route random
- intra route random
- renamed regret to
skip-best
method
- some issues in init readers
v1.5.0 - 2020-09-07
- accept location indices for routing matrix
- do not generate initial solutions when initial solution supplied
- ruin bug with zero-cost jobs
- population size performance issue
- incorrect checker expectations regarding
vehicleId
template
- Initial public release
- Initial commit