public Individual <uint[][]> Cross(Individual <uint[][]> a, Individual <uint[][]> b)
        {
            var child = new BinaryIndividual(a.Representation.Length, a.LowerBound, a.UpperBound, a.Precision);

            var dimensions       = a.Representation.GetLength(0);
            var chromosomeLength = a.Representation[0].GetLength(0);

            for (var i = 0; i < dimensions; i++)
            {
                var randomChromosome = GenerateRandomChromosome(chromosomeLength);
                for (var j = 0; j < chromosomeLength; j++)
                {
                    child.Representation[i][j] = a.Representation[i][j] * b.Representation[i][j] +
                                                 randomChromosome[j] * Xor(a.Representation[i][j],
                                                                           b.Representation[i][j]);
                }
            }

            return(child);
        }
コード例 #2
0
        public Individual <uint[][]> Cross(Individual <uint[][]> a, Individual <uint[][]> b)
        {
            var child = new BinaryIndividual(a.Representation.Length, a.LowerBound, a.UpperBound, a.Precision);
            var genes = a.Representation.Length;
            var bits  = b.Representation[0].Length;

            for (var i = 0; i < genes; i++)
            {
                var parentGene1 = a.Representation[i];
                var parentGene2 = b.Representation[i];

                var crossoverPoint = Random.Next(bits - 1);

                for (var bit = 0; bit < bits; bit++)
                {
                    child.Representation[i][bit] = (bit <= crossoverPoint ? parentGene1[bit] : parentGene2[bit]);
                }
            }

            return(child);
        }