public void NewGeneration(int numNewDNA = 0, bool crossoverNewDNA = false) { int finalCount = Population.Count + numNewDNA; if (finalCount <= 0) { return; } if (Population.Count > 0) { CalculateFitness(); Population.Sort(CompareDNA); } newPopulation.Clear(); for (int i = 0; i < Population.Count; i++) { if (i < Elitism && i < Population.Count) { newPopulation.Add(Population[i]); } else if (i < Population.Count || crossoverNewDNA) { DNA <T> parent1 = Select_Parent(); DNA <T> parent2 = Select_Parent(); DNA <T> child = parent1.Crossing_Over(parent2); child.Mutation_Function(MutationRate); newPopulation.Add(child); } else { newPopulation.Add(new DNA <T>(sizeofDNA, random, getRandomGene, fitnessFunction, shouldInitGenes: true)); } } List <DNA <T> > tmpList = Population; Population = newPopulation; newPopulation = tmpList; Generation++; }