chore: split constr main to multiple files
feat: implement improved nsga for constraints with archive of feasible solutions
fix: use two objectives in nsga_constr
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