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); }
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); }