// Этап скрещивания. private void Crossing() { List <int> crossed = new List <int>(); for (int i = 0; i < _population.Count; i++) { if (_rndWorker.NextDouble() <= _pc) { int ind1 = _rndWorker.NextInt(_population.Count); int ind2 = _rndWorker.NextInt(_population.Count); int x = _population[ind1], y = _population[ind2]; int[] path = _graphContext.GetPath(x, y); crossed.Add(path[path.Length / 2]); } } _population.AddRange(crossed); }