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.
refactor: do perturbation in place instead of cloning
feat: add mutation and combined perturbations
chore: move env to codes/eoa_lib
refactor: Add dimension generic to BinaryString
feat: add simple plotting of local search
feat: add evolutionary strategies to local search
fix: put Rng to Box instead of generics
feat: add PatternPerturbation Move by +/- d in random single coordinate.
feat: add uniform constructor for RandomDistributionPerturbation
feat: remove min, max from bounded perturbation
feat: add BoundedPerturbation applies bounds on real numbers when performing the perturbation.
feat: add RandomDistributionPerturbation For vectors of reals, perturb by a random distribution with expectation in 0.
tests: move all tests to separate submodules
chore: split types and functions to separate module files