Пример #1
0
            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]);
            }