Ejemplo n.º 1
0
        public IChromosome[] MutateChromosomeByNodeFlipping(IChromosome[] chromosomesByEdgeCount, IChromosome[] chromosomesByConnectedEdge, IMatrix matrix, int maxDiffBetweenNode)
        {
            var numberOfTimes = (int)chromosomesByEdgeCount.Length / 3.0;
            var random        = new Random();

            using (_profiler.Step(nameof(MutateChromosomeByNodeFlipping)))
            {
                for (var i = 0; i < numberOfTimes; i++)
                {
                    var(left, rigth) = RandomNumberGeneratorUtils.GenerateTwoRandomNumbers(random, 0, chromosomesByEdgeCount.Length);

                    chromosomesByEdgeCount[left]      = _chromosomeService.FlipNodeOnChromosoe(chromosomesByEdgeCount[left], maxDiffBetweenNode, matrix);
                    chromosomesByConnectedEdge[rigth] = _chromosomeService.FlipNodeOnChromosoe(chromosomesByConnectedEdge[rigth], maxDiffBetweenNode, matrix);
                }
            }

            var result = new List <IChromosome>();

            foreach (var chromosome in chromosomesByEdgeCount)
            {
                result.Add(chromosome.DeepCopy());
            }
            foreach (var chromosome in chromosomesByConnectedEdge)
            {
                result.Add(chromosome.DeepCopy());
            }

            return(result.ToArray());
        }