feat: add number of constraints as a generic
feat: add possibility to map EvolutionResult evaluations
chore: remove Copy from requirement of TournamentSelection
refactor(lib): Allow fitting whole population at once
The fitness function gets fit_population function. The default
implementation is going over fit() one by one, but it can be
reimplemented by specific types.
feat(lib): constraints along with evolutionary strategies
feat(lib): allow modifying fitness function in evolution_algorithm
chore: move population structs to separate module
feat: split params out of PerturbationOperator to allow for non-'static PerturbationOperator
This means PerturbationOperators can now hold non-'static references.
Right away, utilize this in the Random2OptPerturbation for the TSPInstance.
feat: add a lot of algorithm showcases
feat(lib): add evaluation count to EA stats
fix(lib): do not take mut self in population.iter()
feat(lib): add roulette wheel selection
feat(lib): add random search
feat(lib): add n consecutive bit flip perturbation for binary string
feat(lib): add two point and n point crossovers
refactor(lib): implement generic evolutionary strategy using .wrapped_mut
Thanks to wrapped_mut now the one_to_five strategy can be implemented
without relying on BoundedPerturbation etc.
feat: add possibility to evolve strategy during evolution_algorithm
refactor: generalize apply_to_mutations
refactor(lib): allow modifying mutation perturbation