Exemplo n.º 1
0
            public TIndividual Run(XFitnessFunction <TChromosome> fitnessFunction)
            {
                int generation = 0;

                var reproductionGroup = new List <TIndividual>();

                var currentPopulationsChromosomes = PopulationInitializer.Initialize();

                IReadOnlyList <TIndividual> currentPopulation = currentPopulationsChromosomes.Select(
                    chromosome => IndividualFactory.CreateIndividual(chromosome, fitnessFunction)
                    ).ToList();

                var bestSolution = currentPopulation[0];

                foreach (var individual in currentPopulation)
                {
                    if (individual.Fitness > bestSolution.Fitness)
                    {
                        bestSolution = individual;
                    }
                }

                while (ContinueCondition.ShouldContinue(currentPopulation, generation))
                {
                    var pairs = Breeding.Select(currentPopulation);

                    reproductionGroup.Clear();

                    foreach (var Compound in pairs.Select(pair => Crossover.Crossover(pair)))
                    {
                        reproductionGroup.AddRange(
                            Compound
                            .Select(chromosome => Mutation.Mutate(chromosome))
                            .Select(mutant => IndividualFactory.CreateIndividual(mutant, fitnessFunction)));
                    }

                    foreach (var individual in reproductionGroup)
                    {
                        if (individual.Fitness > bestSolution.Fitness)
                        {
                            bestSolution = individual;
                        }
                    }

                    currentPopulation = Strategy.NextGeneration(
                        currentPopulation,
                        reproductionGroup
                        );

                    generation++;
                }

                return(bestSolution);
            }
Exemplo n.º 2
0
        public IMeal Solve(IEnumerable <DietaryReferenceIntake> maxWeight, IEnumerable <Food> items, int iterationCount)
        {
            MaxWeight      = maxWeight;
            Items          = items;
            IterationCount = iterationCount;

            var population = PopulationInitializer.InitializePopulation(MaxWeight, items);

            for (int i = 0; i < IterationCount; i++)
            {
                if (IsDebug)
                {
                    Console.WriteLine($"{population.GetFittest().TotalCostSum:F2}");
                }

                population.RemoveNotFit();
                PopulationCrossoverer.CrossoverPopulation(population);
                PopulationMutator.MutatePopulation(population);
                population.MergeNewGeneration();
            }

            return(population.GetFittest());
        }