public Plan Solve(List <Lesson> pairs) { //создаем популяцию var pop = new Population(pairs, PopulationCount); if (pop.Count == 0) { throw new Exception("Can not create any plan"); } // var count = MaxIterations; while (count-- > 0) { //считаем фитнесс функцию для всех планов pop.ForEach(p => p.FitnessValue = Fitness(p)); //сортируем популяцию по фитнесс функции pop.Sort((p1, p2) => p1.FitnessValue.CompareTo(p2.FitnessValue)); //найден идеальный план? if (pop[0].FitnessValue == 0) { return(pop[0]); } //отбираем 25% лучших планов pop.RemoveRange(pop.Count / 4, pop.Count - pop.Count / 4); //от каждого создаем трех потомков с мутациями var c = pop.Count; for (int i = 0; i < c; i++) { pop.AddChildOfParent(pop[i]); pop.AddChildOfParent(pop[i]); pop.AddChildOfParent(pop[i]); } } Console.WriteLine(count); //считаем фитнесс функцию для всех планов pop.ForEach(p => p.FitnessValue = Fitness(p)); //сортруем популяцию по фитнесс функции pop.Sort((p1, p2) => p1.FitnessValue.CompareTo(p2.FitnessValue)); //возвращаем лучший план return(pop[0]); }