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;
        }
Esempio n. 5
0
 public abstract Population_MonoObjective_AG Execute(Population_MonoObjective_AG lastGeneration, Population_MonoObjective_AG generatedChildren);
 public abstract Population_MonoObjective_AG Execute(Population_MonoObjective_AG lastGeneration, Population_MonoObjective_AG generatedChildren);