public void OptimizeStep(Delegates.Crossover crossover, Delegates.Mutator mutator) { //Console.WriteLine($"Поколение №{population.currentGenerationNumber}"); //К этому моменту начальная случайно сгенерированная популяция уже создана, далее выполняется отбор int[] selectedIndexes = RouletteSelection(); population.PerformCrossingover(crossover, selectedIndexes); //Кроссинговер population.PerformMutation(mutator); //Мутация population.SwitchGenerations(); //Поменять поколения в популяции местами //Console.WriteLine("Лучший в поколении №" + currentGenerationNumber + "\n" + population.GetBestIndividual()); currentGenerationNumber++; }
public void PerformMutation(Delegates.Mutator mutator) { AbstractIndividual bestOne = GetBestIndividual(); foreach (AbstractIndividual individual in CurrentGeneration) { if (individual != bestOne) { individual.Mutate(mutator); } } }
public void Optimize(Delegates.Crossover crossover, Delegates.Mutator mutator, int maxPopulationNumber) { //К этому моменту начальная случайно сгенерированная популяция уже создана, далее выполняется отбор for (int i = 0; i < maxPopulationNumber; i++) { int[] selectedIndexes = RouletteSelection(); population.PerformCrossingover(crossover, selectedIndexes); //Кроссинговер population.PerformMutation(mutator); //Мутация population.SwitchGenerations(); //Поменять поколения в популяции местами currentGenerationNumber++; } Console.ReadLine(); //Выполнять определённое количество раз }
public void Mutate(Delegates.Mutator mutator) { mutator(_Segments); }