Constraint-Handling Techniques used with Evolutionary Algorithms