Example #1
0
        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);
        }
Example #2
0
 public static int MapToLevel(ChromosomePart chromosomePart) => chromosomePart switch
 {