chore: do not clone for no reason in local search
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
chore: move env to codes/eoa_lib
tests: use random initializer in a test
feat: add new terminating conditions (or, lower than, maximum cycles)
refactor: Add dimension generic to BinaryString
chore: remove unused imports
refactor: properly handle errors in local_search
tests: Add test for sphere real representation
feat: add simple plotting of local search
refactor: abstract LocalSearch stats into LocalSearchStats
refactor: Use OVector instead of SVector in library
feat: add evolutionary strategies to local search
feat: add test for local search with PatternPerturbation
tests: add test for Linear fitness function
refactor: extend local search to accept any inputs Instead of accepting only BinaryString, accept anything. Extend the operators to accept anything.
tests: move all tests to separate submodules
tests: add rosenbrock test
chore: guard test imports by #[cfg(test)]