Libraries for constrained genetics algorithm

Rather than relaxing the constraints in the objective function (you have to steer the penalty parameter and it can be pretty funky), you can build a selection operator that compares the objective values and the constraint violations of two individuals and determines which individual is the best (see for example Differential evolution: a practical approach to global optimization).