A genetic algorithm with multi-parent crossover using quaternion representation for numerical function optimization