I'm creating a timetable generator using GA's, and I'm stuck in the crossover part.
Each generation, I just basically copy the best individuals (the 50% fittest individuals inside the population), and perform my crossover operator between them.
I'm using a 2 point crossover. I represent all my TT courses as a List. Each course has an assigned teacher, and an assigned position. The position is the index inside a 2D array. The first dimension represents times and the second represents classrooms.
When I perform the crossover, I choose a middle point inside the Course's list of each parent. Then I create 2 individuals mixing this Course's. If there are overlaps or other constraint violation, I repair the new individual.
My question is this, How can I ensure an optimal offspring?
Sometimes after the crossover and/or after the repair, the new offspring is not better than his parents. This makes the population gets stuck in high fitness values (I'm minimizing the errors, so, a low fitness score means a good individual), so, the GA never reach an optimal solution.
I've been reading an article about copy the fittest individuals in to the next generation, then perform the crossover, but I don't know if this is correct.