refactor: Use OVector instead of SVector in library
feat: add evolutionary strategies to local search
fix: put Rng to Box instead of generics
feat: add test for local search with PatternPerturbation
feat: add PatternPerturbation Move by +/- d in random single coordinate.
feat: add uniform constructor for RandomDistributionPerturbation
feat: remove min, max from bounded perturbation
tests: add test for Linear fitness function
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.
feat: add real fitness functions Add linear, step, rastrigin, griewank and schwefel fitness functions along with the tests for them. Try using static vector where appropriate, but use OVector for those where filling with zeros won't work. This is mostly a constrain for the tests... rather than a real constrain. In the end the dimensions will be given for each problem.
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
feat: add MaximizingOperator
chore: guard test imports by #[cfg(test)]
chore: split types and functions to separate module files
tests: let EqualTerminatingCondition remember matches to return even if no longer equal
tests: For local search test, wait 100 cycles after optimum found
feat: add AndTerminatingConditions that ands multiple conditions