feat(tsp): allow crossing bounds in reverse subsequence perturbation
Currently subsequence perturbation was capable only of changes
inside of bounds (left, right), but allow it going through
the right bound, ie. from element 8 to element 1 - swapping
8 with 1, 9 with 0, 10 with 10... this generalizes the perturbation.
Also, change the behavior to generate an index and a length instead
of two indices. This allows for constraining the length of
subsequences.
feat: add possibility to evolve strategy during evolution_algorithm
feat(tsp): Output csv statistics
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(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
refactor: pass rng as argument
Instead of having the Rng stored
inside the structs, pass it through
the functions. This means it's no longer
necessary to pass perturbations etc. as mutable.