コード例 #1
0
 public void RandomInitialize()
 {
     // Generate Initial Population
     for (int idx = 0; idx < this.InitialPopulationSize; ++idx)
     {
         IndividualBase individual = problem.CreateRandomSolution();
         IndividualEvaluator.Execute(individual, problem);
         AddIndividual(individual);
     }
 }
        protected override void EvaluateObjectiveValues()
        {
            // Create Temporary Individuals
            List <IndividualBase> temporaryList = new List <IndividualBase>();

            for (int iCount = 0; iCount < 200; ++iCount)
            {
                IndividualBase i = Problem.CreateRandomSolution();
                IndividualEvaluator.Execute(i, Problem);
                temporaryList.Add(i);
            }
            double maxValueFound   = temporaryList.Max(I => I.GetFitnessForObjective(Problem.MonoObjectiveGoal));
            double adaptedMaxValue = Math.Abs(maxValueFound) * 2;

            Problem.MonoObjectiveGoal.BigValueForMaximization = adaptedMaxValue;
        }
        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);
        }