Пример #1
0
        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);
        }