//Генерация популяции public void GeneratePopulation() { for (int i = 0; i < size; i++) { var desc = new Descendant() { X = (rnd.NextDouble() - 0.5) * 100000 }; Population.Add(desc); } }
//Скрещивание двух потомков с использованием арифметического оператора кросинговерра 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); }
//Сравнения двух потомков для сортировки 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); }