public IndividualBase Execute() { // Clears the Individual Population population = new Population_MonoObjective_AG(Problem, InitialPopulationSize); population.RandomInitialize(); // Make the Population become the Current Generation Population_MonoObjective_AG currentGeneration = population; Population_MonoObjective_AG newGeneration = null; for (int idxGeracao = 0; idxGeracao < NumberOfGenerations; ++idxGeracao) { newGeneration = RunGeneration(currentGeneration, selectionMethod, crossoverMethod, reinsertionMethod); newGeneration.BestFirstSort(); currentGeneration = newGeneration; } return currentGeneration.BestIndividual; }
public IndividualBase Execute() { // Clears the Individual Population population = new Population_MonoObjective_AG(Problem, InitialPopulationSize); population.RandomInitialize(); // Make the Population become the Current Generation Population_MonoObjective_AG currentGeneration = population; Population_MonoObjective_AG newGeneration = null; for (int idxGeracao = 0; idxGeracao < NumberOfGenerations; ++idxGeracao) { newGeneration = RunGeneration(currentGeneration, selectionMethod, crossoverMethod, reinsertionMethod); newGeneration.BestFirstSort(); currentGeneration = newGeneration; } return(currentGeneration.BestIndividual); }
private Population_MonoObjective_AG RunGeneration(Population_MonoObjective_AG currentGeneration, SelectionMethodBase selectionMethod, CrossoverMethodBase crossoverMethod, /*IReinsertionMethod reinsertionMethod, */ ReinsertionMethodBase reinsertionMethod) { Population_MonoObjective_AG recentlyBorn = new Population_MonoObjective_AG(Problem, InitialPopulationSize); int expectedChildCount = ((InitialPopulationSize * reinsertionMethod.OffspringPercentage) / 100); while (recentlyBorn.IndividualCount < expectedChildCount) { IndividualBase parent1 = null, parent2 = null, child1 = null, child2 = null; selectionMethod.Execute(currentGeneration, out parent1, out parent2); crossoverMethod.Execute(parent1, parent2, out child1, out child2); recentlyBorn.AddIndividual(child1); recentlyBorn.AddIndividual(child2); } int mutatedChildCount = ((recentlyBorn.IndividualCount * mutationPct) / 100); for (int idx = 0; idx < mutatedChildCount; ++idx) { IndividualBase randomIndividual = recentlyBorn.GetRandomIndividual(); Problem.MutateIndividual(randomIndividual); } IndividualBase individual = null; for (int idx = 0; idx < recentlyBorn.IndividualCount; ++idx) { individual = recentlyBorn.Content[idx]; Problem.ValidateIndividual(individual); IndividualEvaluator.Execute(individual, Problem); } Population_MonoObjective_AG newGeneration = reinsertionMethod.Execute(currentGeneration, recentlyBorn); return(newGeneration); }
private Population_MonoObjective_AG RunGeneration(Population_MonoObjective_AG currentGeneration, SelectionMethodBase selectionMethod, CrossoverMethodBase crossoverMethod, /*IReinsertionMethod reinsertionMethod, */ReinsertionMethodBase reinsertionMethod) { Population_MonoObjective_AG recentlyBorn = new Population_MonoObjective_AG(Problem, InitialPopulationSize); int expectedChildCount = ((InitialPopulationSize * reinsertionMethod.OffspringPercentage) / 100); while (recentlyBorn.IndividualCount < expectedChildCount) { IndividualBase parent1 = null, parent2 = null, child1 = null, child2 = null; selectionMethod.Execute(currentGeneration, out parent1, out parent2); crossoverMethod.Execute(parent1, parent2, out child1, out child2); recentlyBorn.AddIndividual(child1); recentlyBorn.AddIndividual(child2); } int mutatedChildCount = ((recentlyBorn.IndividualCount * mutationPct) / 100); for (int idx = 0; idx < mutatedChildCount; ++idx) { IndividualBase randomIndividual = recentlyBorn.GetRandomIndividual(); Problem.MutateIndividual(randomIndividual); } IndividualBase individual = null; for (int idx = 0; idx < recentlyBorn.IndividualCount; ++idx) { individual = recentlyBorn.Content[idx]; Problem.ValidateIndividual(individual); IndividualEvaluator.Execute(individual, Problem); } Population_MonoObjective_AG newGeneration = reinsertionMethod.Execute(currentGeneration, recentlyBorn); return newGeneration; }
public abstract Population_MonoObjective_AG Execute(Population_MonoObjective_AG lastGeneration, Population_MonoObjective_AG generatedChildren);