Пример #1
0
        public void Run(int generations, double crossoverProbability, double mutationProbability, int populationSize)
        {
            _simulationParameters.Items = PickItemsGreedy();
            var initialPopulation = InitializePopulation(populationSize).ToList();

            initialPopulation = _evaluator.EvaluatePopulation(initialPopulation, _simulationParameters).ToList();
            _logger.Log(0, initialPopulation);

            for (var i = 0; i < generations; i++)
            {
                var currentPopulation = _selector.SelectIndividuals(initialPopulation).ToList();

                currentPopulation.AddRange(_breeder.CrossOver(currentPopulation, crossoverProbability));

                if (currentPopulation.Count != populationSize)
                {
                    currentPopulation = FixPopulation(currentPopulation, populationSize).ToList();
                }

                currentPopulation = currentPopulation
                                    .Select(s => _mutator
                                            .MutateIndividualOrNot(s, mutationProbability))
                                    .ToList();

                currentPopulation = _evaluator.EvaluatePopulation(currentPopulation, _simulationParameters).ToList();
                initialPopulation = currentPopulation;

                _logger.Log(i + 1, currentPopulation);
            }
        }