public void NextGeneration() { Bots.Sort((a, b) => a.Best.CompareTo(b.Best)); var count = Math.Max(1, Math.Min(BestCount, Bots.Count)); var bestBots = Bots.Take(count).ToArray(); Bots.Clear(); var i = 0; while (Bots.Count < TotalCount) { var child = new Bot(_model, _checker.Solve(_model)) { Dna = bestBots[i].Dna, }; // Вероятностная мутация if (_random.Next(100) <= 35) { // Количество ячеек мутации var mutationsCount = _random.Next(1, child.Dna.Length / 8); for (var j = 0; j < mutationsCount; j++) { var k = _random.Next(child.Dna.Length); child.Dna[k] = BotCommandExtension.GetRandomCommand(); } child.IsMutant = true; } Bots.Add(child); if (++i >= bestBots.Length) { i = 0; } } Generation++; }