private String ga(Set<String> population, FitnessFunction fitnessFn)
{
// new_population <- empty set
HashSet<String> newPopulation = new HashSet<String>();
// for i = 1 to SIZE(population) do
for (int i = 0; i < population.Count; i++)
{
// x <- RANDOM-SELECTION(population, FITNESS-FN)
String x = randomSelection(population, fitnessFn);
// y <- RANDOM-SELECTION(population, FITNESS-FN)
String y = randomSelection(population, fitnessFn);
// child <- REPRODUCE(x, y)
String child = reproduce(x, y);
// if (small random probability) then child <- MUTATE(child)
if (random.nextDouble() <= this.mutationProbability)
{
child = mutate(child);
}
// add child to new_population
newPopulation.Add(child);
}
// population <- new_population
population.clear();
population.AddRange(newPopulation);
return retrieveBestIndividual(population, fitnessFn);
}