feat: implement feasible crossover wrapper
feat(constr_hw02): Add nsga_constr algorithm
feat: implement constrained nsga
feat: save constraint violation average
feat(constr_hw02): g04, g05, g09 and g21
Lots of changes I lost track of
feat: use stochastic ranking for constr_hw02
fix: implement possibility of best candidate not being found
fi: stochastic ranking properly compares constraints only
feat: add bounded crossover similar to bounded perturbation
feat: declare problems for hw02
fix: constraint for ArithmeticCrossover
feat: Add BlendCrossover for reals
feat: add ArithmeticCrossover for reals
fix: make sure both parents are used for ovector one point
feat: add convenient function for stochastic ranking evaluation
refactor: add possibility to use different logic for obtaining best candidate
fix(eoa_lib): extract random distribution parameter out of perturbation
feat: add multi objective; NSGA