Ejemplo n.º 1
0
        /// <summary>
        /// Returns the corresponding distribution.
        /// </summary>
        /// <param name="wholeDistribution">the distribution of all configurations</param>
        /// <param name="allBuckets">all buckets of the distribution</param>
        /// <returns>the user-specified distribution (e.g., uniform)</returns>
        public override Dictionary <double, double> CreateDistribution(Dictionary <double, List <Configuration> > wholeDistribution, List <double> allBuckets)
        {
            // If a normal distribution is wanted, the parameters can be computed
            // from the whole population if available
            if (this.distribution is NormalDistribution && !this.strategyParameter[USE_WHOLE_POPULATION].Equals("false"))
            {
                Dictionary <double, int> distr = DistributionUtils.CountConfigurations(wholeDistribution);

                double sum   = 0;
                int    count = 0;
                foreach (double key in distr.Keys)
                {
                    sum   += key * distr[key];
                    count += distr[key];
                }

                // Compute the mean value of the whole distribution
                double mean = sum / count;

                // Compute the deviation
                double deviation = Math.Sqrt(distr.Sum(x => x.Value * Math.Pow(x.Key - mean, 2)) / count);

                return(((NormalDistribution)this.distribution).CreateDistribution(allBuckets, mean, deviation));
            }
            else
            {
                return(this.distribution.CreateDistribution(allBuckets));
            }
        }
        /// <summary>
        /// See <see cref="IDistribution.CreateDistribution(List{double})"/>.
        /// </summary>
        public Dictionary <double, double> CreateDistribution(List <double> allBuckets)
        {
            Dictionary <double, double> result = new Dictionary <double, double>();

            double previousResultCache = 0;

            for (int i = 0; i < allBuckets.Count; i++)
            {
                double currentResult = 1 - Math.Pow(1 - PROBABILITY, i + 1);
                result[allBuckets[i]] = currentResult - previousResultCache;
                previousResultCache   = currentResult;
            }

            return(DistributionUtils.AdjustToOne(result));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates the distribution by using the given mean and deviation value.
        /// </summary>
        /// <param name="allBuckets">All buckets.</param>
        /// <param name="mean">The mean for the normal distribution.</param>
        /// <param name="deviation">The standard deviation for the normal distribution.</param>
        public virtual Dictionary <double, double> CreateDistribution(List <double> allBuckets, double mean, double deviation)
        {
            Dictionary <double, double> result = new Dictionary <double, double>();

            double previousResultCache = 0;

            for (int i = 0; i < allBuckets.Count; i++)
            {
                double currentResult = Normal.CDF(mean, deviation, allBuckets[i]);
                result[allBuckets[i]] = currentResult - previousResultCache;
                previousResultCache   = currentResult;
            }

            return(DistributionUtils.AdjustToOne(result));
        }
        /// <summary>
        /// See <see cref="IDistribution.CreateDistribution(List{double})"/>.
        /// </summary>
        public Dictionary <double, double> CreateDistribution(List <double> allBuckets)
        {
            GeometricDistribution       geometricDistribution = new GeometricDistribution();
            Dictionary <double, double> original = geometricDistribution.CreateDistribution(allBuckets);
            Dictionary <double, double> result   = new Dictionary <double, double>();

            for (int i = 0; i < allBuckets.Count; i++)
            {
                double index        = allBuckets[i];
                double inverseIndex = allBuckets[allBuckets.Count - 1 - i];
                result[index] = original[index] + original[inverseIndex];
            }

            return(DistributionUtils.AdjustToOne(result));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// See <see cref="Distribution.CreateDistribution(List{double})"/>.
        /// </summary>
        public Dictionary <double, double> CreateDistribution(List <double> allBuckets)
        {
            Dictionary <double, double> result = new Dictionary <double, double>();

            int numberOfBuckets = allBuckets.Count - 1;


            for (int k = 0; k <= numberOfBuckets; k++)
            {
                double firstPart   = (Factorial(numberOfBuckets) / (Factorial(k) * Factorial(numberOfBuckets - k)));
                double secondPart  = Math.Pow(PROBABILITY, k) * Math.Pow((1 - PROBABILITY), (numberOfBuckets - k));
                double probability = firstPart * secondPart;

                result[allBuckets[k]] = probability;
            }

            // Adjust it to be 1.0 in the sum
            result = DistributionUtils.AdjustToOne(result);

            return(result);
        }