Exemplo n.º 1
0
        public override double[] Probabilities(Population <TGene, TAllele> population, int count)
        {
            var fitness = new double[population.Count];

            for (var i = population.Count; --i >= 0;)
            {
                fitness[i] = population[i].GetFitness().ToDouble(null);
            }

            var worst = Math.Min(Statistics.Min(fitness), 0.0);
            var sum   = DoubleAdder.Sum(fitness) - worst * population.Count;

            if (Equality.Eq(sum, 0.0))
            {
                for (var i = 0; i < fitness.Length; i++)
                {
                    fitness[i] = 1.0 / population.Count;
                }
            }
            else
            {
                for (var i = population.Count; --i >= 0;)
                {
                    fitness[i] = (fitness[i] - worst) / sum;
                }
            }

            return(fitness);
        }
Exemplo n.º 2
0
        public static bool Sum2One(double[] probabilities)
        {
            var sum = probabilities.Length > 0
                ? DoubleAdder.Sum(probabilities)
                : 1.0;

            return(Math.Abs(Base.UlpDistance(sum, 1.0)) < MaxUlpDistance);
        }
Exemplo n.º 3
0
        public static double[] Incremental(double[] values)
        {
            var adder = new DoubleAdder(values[0]);

            for (var i = 1; i < values.Length; ++i)
            {
                values[i] = adder.Add(values[i]).DoubleValue;
            }
            return(values);
        }