Abstract This paper introduces the notion of using co-evolution to adapt the penalty factors of a fitness function incorporated in a genetic algorithm (GA) for numerical optimization. The proposed approach produces solutions even better than those previously reported in the literature for other (GA-based and mathematical programming) techniques that have been particularly fine-tuned using a normally lengthy trial and error process to solve a certain problem or set of problems. The present technique is also easy to implement and suitable for parallelization, which is a necessary further step to improve its current performance.