feat: add possibility to evolve strategy during evolution_algorithm
refactor: generalize apply_to_mutations
refactor(lib): allow modifying mutation perturbation
refactor(lib): add methods to get wrapped perturbations instead of traits.
Remove WrapperPerturbation and ListWrapperPerturbation in favor of
wrapped and wrapped_mut functions on PerturbationOperator. This
allows for easier handling as it's not easy to downcast Any into
WrapperPerturbation or ListWrapperPerturbation. So instead
always return dyn PerturbationOperator instead of dyn Any.
Use dyn Any only for downstasting to concrete types.
This finally allows for apply_to_mutations to be implemented
under MutationPerturbation, allowing to modify the arguments.
feat(tsp): Output csv statistics
chore: do not clone for no reason in local search
chore: remove city ids from chart
feat(tsp): add BinaryString representation of TSP
tests(tsp): add tests for reverse subsequence
fix(tsp): reverse properly in reverse subsequence perturbatio
feat: add loading of optimal cost from solutions.txt
feat: add edge recombination crossover
feat: add into_iter for population
chore: add instances to run the algorithm on
feat(tsp): add data loading
chore: add constructor for TSPRandomInitializer
fix: iterate city positions by rows
refactor: use swap_rows in SwapPerturbaiton instead of swapping by indices
feat: add plotting of TSP