template <int N, int N_obj> void GA<N, N_obj>::crossover_scattered (const Individual &parent1, const Individual &parent2, Individual &child) { for(int i = 0; i < N; ++i) { if(dist01(rnd_generator) >= 0.5) { child[i] = parent1[i]; } else { child[i] = parent2[i]; } } if( !feasible(child) ) crossover_arithmetic(parent1, parent2, child); }
char *init_crossover(char *p1, char *p2) { /* see http://www.obitko.com/tutorials/genetic-algorithms/crossover-mutation.php * for the definition of the crossover modes */ switch (BINARY_ENCODING_CROSSOVER_MODE) { case SINGLE_POINT_CROSSOVER: return crossover_single_point(p1, p2); break; case TWO_POINT_CROSSOVER: return crossover_two_point(p1, p2); break; case UNIFORM_CROSSOVER: return crossover_uniform(p1, p2); break; case ARITHMETIC_CROSSOVER: return crossover_arithmetic(p1, p2); break; default: die("Programmed error in switch/case statement"); break; } }