public IChromosome[] GetBestChromosomes(ChromosomePart chromosomePart, IPopulation population, int numberOfTournamentRounds) { var result = new IChromosome[numberOfTournamentRounds]; var random = new Random(); using (_profiler.Step($"{nameof(GetBestChromosomes)}{chromosomePart}")) { switch (chromosomePart) { case ChromosomePart.First: for (var i = 0; i < numberOfTournamentRounds; i++) { var(left, rigth) = RandomNumberGeneratorUtils.GenerateTwoRandomNumbers(random, 0, numberOfTournamentRounds); var leftChromosome = population.Members.FirstOrDefault(x => x.Id == population.GuidMap[left]); var rigthChromosome = population.Members.FirstOrDefault(x => x.Id == population.GuidMap[rigth]); result[i] = GetBestChromosomeBy(leftChromosome, rigthChromosome, keyComparer: ChromosomeFactor.EdgeCount).DeepCopy(); } break; case ChromosomePart.Second: for (var i = 0; i < numberOfTournamentRounds; i++) { var(left, rigth) = RandomNumberGeneratorUtils.GenerateTwoRandomNumbers(random, numberOfTournamentRounds, population.Members.Count()); var leftChromosome = population.Members.FirstOrDefault(x => x.Id == population.GuidMap[left]); var rigthChromosome = population.Members.FirstOrDefault(x => x.Id == population.GuidMap[rigth]); result[i] = GetBestChromosomeBy(leftChromosome, rigthChromosome, keyComparer: ChromosomeFactor.ConnectedEdgeWeigthSum).DeepCopy(); } break; case ChromosomePart.Unknown: default: break; } } return(result); }
public static int MapToLevel(ChromosomePart chromosomePart) => chromosomePart switch {