public Individual <double[]> Cross(Individual <double[]> a, Individual <double[]> b) { var random = new Random(); var dimension = a.Representation.Length; var child = new DoubleIndividual(dimension); for (var i = 0; i < dimension; i++) { var nextDouble = random.NextDouble(); child.Representation[i] = nextDouble * a.Representation[i] + (1 - nextDouble) * b.Representation[i]; } return(child); }
public Individual <double[]> Cross(Individual <double[]> a, Individual <double[]> b) { var dimension = a.Representation.Length; var child = new DoubleIndividual(dimension); const double alpha = 0.5; for (var i = 0; i < dimension; i++) { var min = Math.Min(a.Representation[i], b.Representation[i]); var max = Math.Max(a.Representation[i], b.Representation[i]); var difference = max - min; var lowerBound = min - difference * alpha; var upperBound = max + difference * alpha; child.Representation[i] = lowerBound + Random.NextDouble() * (upperBound - lowerBound); } return(child); }