/// <summary> /// Realizuje algorytm selekcji. /// </summary> /// <param name="population">Populacja poddawana selekcji.</param> /// <returns>Zbiór osobników populacji, wybranych w wyniku selekcji do następnej generacji.</returns> public IChromosome[] Select(IChromosome[] population) { if (population.Length < 2) { return population; } UInt32 tournamenSize = TournamentSize.ComputeSize(population); UInt32 populationSize = PopulationSize.ComputeSize(population); IChromosome[] result = new IChromosome[populationSize]; Parallel.For(0, populationSize, i => { IChromosome[] group = new IChromosome[tournamenSize]; for (Int32 j = 0; j < tournamenSize; ++j) { group[j] = population[RandomGenerator.Next(0, population.Length)]; } Array.Sort(group, comparer); result[i] = group.First(); }); return result; }