### 16 releases (6 breaking)

0.7.2 | Dec 22, 2023 |
---|---|

0.7.1 | Aug 26, 2023 |

0.6.0 | Jun 9, 2023 |

0.3.0 | Mar 22, 2023 |

0.1.1 | Mar 10, 2022 |

#**1036** in Algorithms

**265** downloads per month

Used in **5** crates
(via vrp-core)

**Apache-2.0**

245KB

5.5K
SLoC

# Description

This crate exposes generalized hyper heuristics and some helper functionality which can be used to build a solver for various optimization problems.

More details are coming.

###
`lib.rs`

:

This crate exposes a generalized hyper heuristics and some helper functionality which can be used to build a solver for optimization problems.

# Examples

This example demonstrates the usage of example models and heuristics to minimize Rosenbrock function. For the sake of minimalism, there is a pre-built solver and heuristic operator models. Check example module to see how to use functionality of the crate for an arbitrary domain.

`use` `rosomaxa``::``prelude``::``*``;`
`use` `rosomaxa``::``example``::``*``;`
`let` random `=` `Arc``::`new`(``DefaultRandom``::`default`(``)``)``;`
`//` examples of heuristic operator, they are domain specific. Essentially, heuristic operator
`//` is responsible to produce a new, potentially better solution from the given one.
`let` noise_op `=` `VectorHeuristicOperatorMode``::`JustNoise`(``Noise``::`new_with_ratio`(``1.``,` `(``-``0.``1``,` `0.``1``)``,` random`)``)``;`
`let` delta_op `=` `VectorHeuristicOperatorMode``::`JustDelta`(``-``0.``1``..``0.``1``)``;`
`let` delta_power_op `=` `VectorHeuristicOperatorMode``::`JustDelta`(``-``0.``5``..``0.``5``)``;`
`//` add some configuration and run the solver
`let` `(`solutions`,` `_``)` `=` `Solver``::`default`(``)`
`.``with_fitness_fn``(``create_rosenbrock_function``(``)``)`
`.``with_init_solutions``(``vec!``[``vec!``[``2.``,` `2.``]``]``)`
`.``with_search_operator``(`noise_op`,` `"`noise`"``,` `1.``)`
`.``with_search_operator``(`delta_op`,` `"`delta`"``,` `0.``2``)`
`.``with_diversify_operator``(`delta_power_op`)`
`.``with_termination``(``Some``(``5``)``,` `Some``(``1000``)``,` `None``,` `None``)`
`.``solve``(``)`
`.``expect``(``"`cannot build and use solver`"``)``;`
`//` expecting at least one solution with fitness close to 0
`assert_eq!``(`solutions`.``len``(``)``,` `1``)``;`
`let` `(``_``,` fitness`)` `=` solutions`.``first``(``)``.``unwrap``(``)``;`
`assert!``(``*`fitness `<` `0.``001``)``;`

#### Dependencies

~2.1–4MB

~71K SLoC