//Evolve population public static Population evolvePopulation(Population pop) { Population newPopulation = new Population(pop.size(), false); //keep your best individual if (Elitism) { newPopulation.saveIndividual(0, pop.getFittest()); } //Crossover population int elitismOffset; if (Elitism) { elitismOffset = 1; } else { elitismOffset = 0; } //loop over tje population size and create new individuals with crossover for(int i = elitismOffset; i<pop.size();i++) { Individual indiv1 = tournamentSelection(pop); Individual indiv2 = tournamentSelection(pop); Individual newIndiv = crossover(indiv1, indiv2); newPopulation.saveIndividual(i, newIndiv); } //Mutate population for (int i=elitismOffset; i<newPopulation.size();i++) { mutate(newPopulation.getIndividual(i)); } return newPopulation; }
// Select individuals for crossover private static Individual tournamentSelection(Population pop) { // Create a tournament population Population tournament = new Population(TournamentSize, false); // For each place in the tournament get a random individual for (int i = 0; i < TournamentSize; i++) { int randomId = (int)(Rnd.NextDouble() * pop.size()); tournament.saveIndividual(i, pop.getIndividual(randomId)); } // Get the fittest Individual fittest = tournament.getFittest(); return fittest; }