Constraint-handling techniques used with evolutionary algorithms