예제 #1
0
 //Генерация популяции
 public void GeneratePopulation()
 {
     for (int i = 0; i < size; i++)
     {
         var desc = new Descendant()
         {
             X = (rnd.NextDouble() - 0.5) * 100000
         };
         Population.Add(desc);
     }
 }
예제 #2
0
        //Скрещивание двух потомков с использованием арифметического оператора кросинговерра
        public (Descendant, Descendant) CrossingDesc(Descendant x, Descendant y)
        {
            var lambda = rnd.NextDouble();
            var cx     = new Descendant()
            {
                X = lambda * x.X + (1 - lambda) * y.X
            };
            var cy = new Descendant()
            {
                X = lambda * y.X + (1 - lambda) * x.X
            };

            return(cx, cy);
        }
예제 #3
0
        //Сравнения двух потомков для сортировки
        public int Compare(Descendant x, Descendant y)
        {
            var delta = x.Y - y.Y;

            if (delta > 0)
            {
                return(1);
            }
            if (delta < 0)
            {
                return(-1);
            }
            return(0);
        }