Exemple #1
0
        //End of ui.cs file Contents

        //-------------------------------------------------------------------------

        //Begin of Random.cs file contents
        /// <summary>
        /// Initializes the random-number generator with a specific seed.
        /// </summary>
        public void Initialize(uint seed)
        {
            RandomNumberGenerator = new MT19937Generator(seed);
            betaDist              = new BetaDistribution(RandomNumberGenerator);
            betaPrimeDist         = new BetaPrimeDistribution(RandomNumberGenerator);
            cauchyDist            = new CauchyDistribution(RandomNumberGenerator);
            chiDist               = new ChiDistribution(RandomNumberGenerator);
            chiSquareDist         = new ChiSquareDistribution(RandomNumberGenerator);
            continuousUniformDist = new ContinuousUniformDistribution(RandomNumberGenerator);
            erlangDist            = new ErlangDistribution(RandomNumberGenerator);
            exponentialDist       = new ExponentialDistribution(RandomNumberGenerator);
            fisherSnedecorDist    = new FisherSnedecorDistribution(RandomNumberGenerator);
            fisherTippettDist     = new FisherTippettDistribution(RandomNumberGenerator);
            gammaDist             = new GammaDistribution(RandomNumberGenerator);
            laplaceDist           = new LaplaceDistribution(RandomNumberGenerator);
            lognormalDist         = new LognormalDistribution(RandomNumberGenerator);
            normalDist            = new NormalDistribution(RandomNumberGenerator);
            paretoDist            = new ParetoDistribution(RandomNumberGenerator);
            powerDist             = new PowerDistribution(RandomNumberGenerator);
            rayleighDist          = new RayleighDistribution(RandomNumberGenerator);
            studentsTDist         = new StudentsTDistribution(RandomNumberGenerator);
            triangularDist        = new TriangularDistribution(RandomNumberGenerator);
            weibullDist           = new WeibullDistribution(RandomNumberGenerator);
            poissonDist           = new PoissonDistribution(RandomNumberGenerator);

            // generator.randomGenerator = new MT19937Generator(seed);
        }
        public void LogProbabilityDensityFunctionTest()
        {
            double a = -5;
            double b = 11;
            ContinuousUniformDistribution target = new ContinuousUniformDistribution(a, b);
            double x        = 4.2;
            double expected = System.Math.Log(0.0625);
            double actual   = target.LogProbabilityDensityFunction(x);

            Assert.AreEqual(expected, actual);

            x        = -5;
            expected = System.Math.Log(0.0625);
            actual   = target.LogProbabilityDensityFunction(x);
            Assert.AreEqual(expected, actual);

            x        = -6;
            expected = System.Math.Log(0.0);
            actual   = target.LogProbabilityDensityFunction(x);
            Assert.AreEqual(expected, actual);

            x        = 11;
            expected = System.Math.Log(0.0625);
            actual   = target.LogProbabilityDensityFunction(x);
            Assert.AreEqual(expected, actual);

            x        = 12;
            expected = System.Math.Log(0.0);
            actual   = target.LogProbabilityDensityFunction(x);
            Assert.AreEqual(expected, actual);
        }
Exemple #3
0
        /// <summary>
        /// Build linear samples.
        /// </summary>
        /// <param name="x">X sample values.</param>
        /// <param name="y">Y samples values.</param>
        /// <param name="xtest">X test values.</param>
        /// <param name="ytest">Y test values.</param>
        /// <param name="samples">Sample values.</param>
        /// <param name="sampleOffset">Sample offset.</param>
        /// <param name="slope">Slope number.</param>
        /// <param name="intercept">Intercept criteria.</param>
        public static void Build(out double[] x, out double[] y, out double[] xtest, out double[] ytest, int samples = 3, double sampleOffset = -0.5, double slope = 2.0, double intercept = -1.0)
        {
            // Fixed-seed "random" distribution to ensure we always test with the same data
            var uniform = new ContinuousUniformDistribution(0.0, 1.0, new Random(42));

            // build linear samples
            x = new double[samples];
            y = new double[samples];
            for (int i = 0; i < x.Length; i++)
            {
                x[i] = i + sampleOffset;
                y[i] = (x[i] * slope) + intercept;
            }
            // build linear test vectors randomly between the sample points
            xtest = new double[samples + 1];
            ytest = new double[samples + 1];
            if (samples == 1)
            {
                // y = const
                xtest[0] = sampleOffset - uniform.Sample();
                xtest[1] = sampleOffset + uniform.Sample();
                ytest[0] = ytest[1] = (sampleOffset * slope) + intercept;
            }
            else
            {
                for (int i = 0; i < xtest.Length; i++)
                {
                    xtest[i] = (i - 1) + sampleOffset + uniform.Sample();
                    ytest[i] = (xtest[i] * slope) + intercept;
                }
            }
        }
Exemple #4
0
        public void ContinuousUniformDistribution()
        {
            Simulation.NumberOfSamples = 5;
            JsonSerializer serializer = JsonSerializer.Create(JsonSettings.SerializerSettings);

            string name = "My Distribution";

            var val = new ContinuousUniformDistribution(1.0, 5.0, 0)
            {
                Name = name
            };

            Guid guid = val.Guid;

            string json = JObject.FromObject(val, serializer).ToString();

            Simulation.ClearDistributionList();
            var newVal = JObject.Parse(json).ToObject <ContinuousUniformDistribution>(serializer);

            Assert.AreEqual(val.Guid, newVal.Guid);
            Assert.AreEqual(val.ConstrainedToInt, newVal.ConstrainedToInt);
            Assert.AreEqual(val.RandomSeed, newVal.RandomSeed);
            Assert.AreEqual(val.Min.ScalarValue, newVal.Min.ScalarValue);
            Assert.AreEqual(val.Minimum, newVal.Minimum);
            Assert.AreEqual(val.Max.ScalarValue, 5);
            Assert.AreEqual(val.Maximum, newVal.Maximum);
            Assert.AreEqual(val.Mean, newVal.Mean);
            Assert.AreEqual(val.Name, name);
        }
Exemple #5
0
        public static double ContinuousUniform(double min, double max, bool cache)
        {
            if (min == max)
            {
                return(min);
            }
            Debug.Assert(min < max);
            ContinuousUniformDistribution uniform;
            Pair <double, double>         key = new Pair <double, double>(min, max);

            if (!continuousUniformGenerators.ContainsKey(key))
            {
                uniform = new ContinuousUniformDistribution(generator);
                AlphaAndBeta(uniform, min, max);
                // Beta must always be greater than alpha, so we set them this way round
                if (cache)
                {
                    continuousUniformGenerators.Add(key, uniform);
                }
            }
            else
            {
                uniform = continuousUniformGenerators[key];
            }
            Debug.Assert(uniform != null);
            Debug.Assert(uniform.Alpha == min);
            Debug.Assert(uniform.Beta == max);
            double value = uniform.NextDouble();

            Debug.Assert(value >= min && value <= max);
            return(value);
        }
        public void TestStatistics()
        {
            Simulation.NumberOfSamples = 100000;

            var distr = new ContinuousUniformDistribution(1, 12345);

            Assert.AreEqual(Statistics.Mean(distr.GetResult()), distr.Mean);
            Assert.AreEqual(Statistics.Median(distr.GetResult()), distr.Median);
            Assert.AreEqual(Statistics.StandardDeviation(distr.GetResult()), distr.StandardDeviation);
            Assert.AreEqual(Statistics.Variance(distr.GetResult()), distr.Variance);
            Assert.AreEqual(Statistics.Minimum(distr.GetResult()), distr.Minimum);
            Assert.AreEqual(Statistics.Maximum(distr.GetResult()), distr.Maximum);
            Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 0), distr.Percentile(0));
            Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 5), distr.Percentile(5));
            Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 50), distr.Percentile(50));
            Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 95), distr.Percentile(95));
            Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 100), distr.Percentile(100));

            var histogram = new Histogram(distr.GetResult(), 100);

            for (int i = 0; i < histogram.BucketCount; i++)
            {
                Assert.AreEqual(histogram[i].LowerBound, distr.Histogram[i].LowerBound);
                Assert.AreEqual(histogram[i].UpperBound, distr.Histogram[i].UpperBound);
            }
        }
        static void BuildLinearCase(int start, int stop, out double[] x, out double[] y, out double[] xtest, out double[] ytest)
        {
            const double yOffset = 2.0;
            int          samples = stop - start + 1;
            ContinuousUniformDistribution uniform = new ContinuousUniformDistribution();

            // build linear samples
            x = new double[samples];
            y = new double[samples];
            for (int i = 0; i < x.Length; i++)
            {
                int z = start + i;
                x[i] = z;
                y[i] = z + yOffset; // arbitrary small y-axis offset
            }

            // build linear test vectors randomly between the sample points
            xtest = new double[samples + 1];
            ytest = new double[samples + 1];
            if (samples == 1)
            {
                xtest[0] = start - uniform.NextDouble();
                xtest[1] = start + uniform.NextDouble();
                ytest[0] = ytest[1] = start + yOffset;
            }
            else
            {
                for (int i = 0; i < xtest.Length; i++)
                {
                    double z = (i - 1) + uniform.NextDouble();
                    xtest[i] = z;
                    ytest[i] = z + yOffset;
                }
            }
        }
Exemple #8
0
        public void CreateIntaceOfAttractRepulseGenerator_PassEachParameterAsNullAndOtherIsCorrect_ArgumentNullExceptionThrown(
            Solution bestSolution, IEnumerable <Dimension> dimensions, ContinuousUniformDistribution distribution, System.Random randomizer, string expectedParamName)
        {
            ArgumentNullException exeption = Assert.Throws <ArgumentNullException>(
                () => new AttractRepulseSparkGenerator(bestSolution, dimensions, distribution, randomizer));

            Assert.Equal(expectedParamName, exeption.ParamName);
        }
        public void UniformDistributionConstructorTest()
        {
            double a = 1;
            double b = 5;
            ContinuousUniformDistribution target = new ContinuousUniformDistribution(a, b);

            Assert.AreEqual(target.Minimum, a);
            Assert.AreEqual(target.Maximum, b);
        }
Exemple #10
0
 public RandomizerOptions(double min, double max, double sigma = 0.25)
 {
     Min     = min;
     Max     = max;
     Mean    = (Min + Max) / 2.0;
     Sigma   = sigma;
     Normal  = new NormalDistribution(Mean, Sigma);
     Uniform = new ContinuousUniformDistribution(Min, Max);
 }
Exemple #11
0
        public void TestOptimalVariance()
        {
            ContinuousUniformDistribution dist = new ContinuousUniformDistribution(0, 10);
            Histogram h = Histogram.OptimalVariance(10, new List <double>(dist.EnumerateDoubles(1000)));

            Assert.That(h.Count, Is.EqualTo(10));

            Console.WriteLine(h.ToString());
        }
        public void MeanTest()
        {
            double a = -1;
            double b = 5;
            ContinuousUniformDistribution target = new ContinuousUniformDistribution(a, b);
            double expected = (a + b) / 2.0;
            double actual   = target.Mean;

            Assert.AreEqual(expected, actual);
        }
        public void VarianceTest()
        {
            double a = 5;
            double b = 10;
            ContinuousUniformDistribution target = new ContinuousUniformDistribution(a, b);
            double actual   = target.Variance;
            double expected = System.Math.Pow(b - a, 2) / 12.0;

            Assert.AreEqual(expected, actual);
        }
        public void ResetSampleGeneration()
        {
            phi = new double[frequencyIntervals];
            var Phi = new ContinuousUniformDistribution(0d, 2d * Math.PI);

            for (int i = 0; i < frequencyIntervals; i++)
            {
                phi[i] = Phi.NextDouble();
            }
        }
        public void EntropyTest()
        {
            double a = 1;
            double b = 6;
            ContinuousUniformDistribution target = new ContinuousUniformDistribution(a, b);
            double expected = System.Math.Log(b - a);
            double actual   = target.Entropy;

            Assert.AreEqual(expected, actual);
        }
        public void FitTest()
        {
            ContinuousUniformDistribution target = new ContinuousUniformDistribution();

            double[] observations = { -1, 2, 5, 2, 3, 1, 4 };
            double[] weights      = null;
            target.Fit(observations, weights);
            Assert.AreEqual(-1.0, target.Minimum);
            Assert.AreEqual(5.0, target.Maximum);
        }
Exemple #17
0
        // A routine to work around the mis-feature in setting alpha and beta
        private static void AlphaAndBeta(ContinuousUniformDistribution distribution, double alpha, double beta)
        {
            distribution.Alpha = Math.Min(alpha, distribution.Alpha);
            distribution.Beta  = Math.Max(beta, distribution.Beta);

            distribution.Alpha = alpha;
            distribution.Beta  = beta;
            Debug.Assert(distribution.Alpha == alpha);
            Debug.Assert(distribution.Beta == beta);
        }
Exemple #18
0
        public static ISparkGenerator CreateAttractRepulseSparkGenerator()
        {
            Solution                      bestSolution = Substitute.For <Solution>(0);
            IList <Dimension>             dimensions   = Substitute.For <IList <Dimension> >();
            ContinuousUniformDistribution distribution = Substitute.For <ContinuousUniformDistribution>(Amplitude - Delta, Amplitude + Delta);

            System.Random randomizer = Substitute.For <System.Random>();
            AttractRepulseSparkGenerator generator = Substitute.For <AttractRepulseSparkGenerator>(bestSolution, dimensions, distribution, randomizer);

            return(generator);
        }
Exemple #19
0
        private void precomputeSeeds(int seed, int amount)
        {
            var g = new MT19937Generator(seed);
            ContinuousUniformDistribution rand = new ContinuousUniformDistribution(g);

            seedList = new int[amount];
            for (int i = 0; i < seedList.Length; i++)
            {
                seedList[i] = (int)(rand.NextDouble() * MAX);
            }
        }
        public void UniformDistributionConstructorTest1()
        {
            double a = 6;
            double b = 5;

            bool thrown = false;

            try { ContinuousUniformDistribution target = new ContinuousUniformDistribution(a, b); }
            catch (ArgumentOutOfRangeException) { thrown = true; }

            Assert.IsTrue(thrown);
        }
Exemple #21
0
        public void ImplicitOperatorDistributionDouble()
        {
            Simulation.NumberOfSamples = ExpectedResults.NumberOfSamples;

            ContinuousUniformDistribution distr = new ContinuousUniformDistribution(1.0, 1000.0);

            QrtValue qrtVal = distr;

            Assert.IsTrue(qrtVal.IsDistribution);
            Assert.IsFalse(qrtVal.ConstrainedToInt);
            Assert.AreEqual(qrtVal.ScalarValue, 0);
            Assert.AreEqual(qrtVal.DistributionValue.GetResult(), distr.GetResult());
        }
Exemple #22
0
        public void IndexDistribution()
        {
            Simulation.NumberOfSamples = ExpectedResults.NumberOfSamples;

            ContinuousUniformDistribution distr = new ContinuousUniformDistribution(1.0, 1000.0);

            QrtValue qrtVal = distr;

            for (int i = 0; i < ExpectedResults.NumberOfSamples; i++)
            {
                Assert.AreEqual(distr.GetResult()[i], qrtVal[i]);
            }
        }
Exemple #23
0
        static Rng()
        {
            // Create a commonly-used and quicly locatable zeroOrOne distribution,
            // and also reference it in the discreteUniformGeneratirs dictionary
            zeroOrOne = new DiscreteUniformDistribution(generator);
            AlphaAndBeta(zeroOrOne, 0, 1);
            discreteUniformGenerators.Add(new Pair <int, int>(0, 1), zeroOrOne);

            // Create a commonly-used and quickly locatable zeroToOne distribution,
            // and also reference it in the continuousUniformGenerators dictionary
            zeroToOne = new ContinuousUniformDistribution(generator);
            AlphaAndBeta(zeroToOne, 0.0, 1.0);
            continuousUniformGenerators.Add(new Pair <double, double>(0.0, 1.0), zeroToOne);
        }
Exemple #24
0
        public int HabitiationParameter(HabitationParameterType habitationParameterType)
        {
            switch (habitationParameterType)
            {
            case HabitationParameterType.Gravity:
            case HabitationParameterType.Temperature:
                return((int)Math.Round(TrapezoidalDistribution.Sample(this.rng, -49.5, 49.5, -40, 40)));

            case HabitationParameterType.Radiation:
                return((int)Math.Round(ContinuousUniformDistribution.Sample(this.rng, -49.5, 49.5)));

            default:
                throw new ArgumentOutOfRangeException(nameof(habitationParameterType), habitationParameterType, null);
            }
        }
        public void CloneTest()
        {
            double a = 12;
            double b = 72;
            ContinuousUniformDistribution target = new ContinuousUniformDistribution(a, b);

            ContinuousUniformDistribution clone = (ContinuousUniformDistribution)target.Clone();

            Assert.AreNotSame(target, clone);
            Assert.AreEqual(target.Entropy, clone.Entropy);
            Assert.AreEqual(target.Maximum, clone.Maximum);
            Assert.AreEqual(target.Minimum, clone.Minimum);
            Assert.AreEqual(target.StandardDeviation, clone.StandardDeviation);
            Assert.AreEqual(target.Variance, clone.Variance);
        }
Exemple #26
0
        public void TestOptimalSquaredFreedom()
        {
            ContinuousUniformDistribution dist = new ContinuousUniformDistribution(0, 10);
            Histogram h = Histogram.OptimalSquaredFreedom(10, new List <double>(dist.EnumerateDoubles(1000)));

            h.JoinBuckets();
            Assert.That(h.GetContainerOf(8).LowerBound, Is.LessThanOrEqualTo(8.0));
            Assert.That(h.GetContainerOf(8).UpperBound, Is.GreaterThanOrEqualTo(8.0));
            Assert.That(h.GetContainerIndexOf(11), Is.LessThan(0.0));
            Assert.That(h.GetContainerIndexOf(-1), Is.LessThan(0.0));
            Assert.That(delegate { h.GetContainerOf(11); }, Throws.TypeOf(typeof(ArgumentException)));
            Assert.That(delegate { h.GetContainerOf(-1); }, Throws.TypeOf(typeof(ArgumentException)));
            Assert.That(h.Count, Is.EqualTo(10));

            Console.WriteLine(h.ToString());
        }
Exemple #27
0
        public Form1()
        {
            InitializeComponent();

            //--
            mTranslations   = new Dictionary <string, Translations>();
            mPlainListWords = new PlainWords();

            //--
            mBinominalDistr  = new BinomialDistribution();
            mTriangleDistr   = new TriangularDistribution();
            mUniformDistr    = new DiscreteUniformDistribution();
            mContUniformDist = new ContinuousUniformDistribution();
            mRnd             = new Random();

            mStopTimer = false;
        }
Exemple #28
0
 public void TestContinuousUniformDistribution()
 {
     double[][] para =
     {
         new double[] { 3, 5, 3.500000000000000000000000, 0.5000000000000000000000000, 4.900000000000000000000000, 0.5000000000000000000000000 }
     };
     for (int i = 0; i < para.Length; i++)
     {
         var tester = new ContDistTester(para[i], delegate(double a, double b)
         {
             var ret = new ContinuousUniformDistribution(a, b);
             return(ret);
         }
                                         );
         tester.Test(1E-14);
     }
 }
        public void KolmogorovSmirnovTestConstructorTest()
        {
            // Test against a Uniform distribution
            // References: http://www.math.nsysu.edu.tw/~lomn/homepage/class/92/kstest/kolmogorov.pdf

            double[] sample = { 0.621, 0.503, 0.203, 0.477, 0.710, 0.581, 0.329, 0.480, 0.554, 0.382 };

            ContinuousUniformDistribution distribution = ContinuousUniformDistribution.Standard;
            var target = new KolmogorovSmirnovTest(sample, distribution);

            Assert.AreEqual(distribution, target.TheoreticalDistribution);
            Assert.AreEqual(Hypothesis.TwoTail, target.Hypothesis);

            Assert.AreEqual(0.29, target.Statistic, 1e-16);
            Assert.AreEqual(0.3067, target.PValue, 1e-4);
            Assert.IsFalse(Double.IsNaN(target.Statistic));
        }
        public void Distribution_Resample()
        {
            Simulation.NumberOfSamples = 100000;

            var testInfo = ExpectedResults.Data["DistributionResults"]["ContinuousUniformDistribution"];
            var inputs   = testInfo["ConstructorInputs"];

            ContinuousUniformDistribution distr = new ContinuousUniformDistribution(
                inputs["min"].Value <double>(),
                inputs["max"].Value <double>(),
                inputs["randomSeed"].Value <int>());

            var resampledDist = distr.Resample();

            Assert.AreEqual(distr.Maximum, resampledDist.Maximum);
            Assert.AreEqual(distr.Minimum, resampledDist.Minimum);
            Assert.AreEqual(distr.Mean, resampledDist.Mean, 10);
            Assert.AreEqual(distr.Median, resampledDist.Median);
            Assert.AreEqual(distr.StandardDeviation, resampledDist.StandardDeviation, 10);
            Assert.AreEqual(distr.Variance, resampledDist.Variance, 10);

            Assert.AreEqual(distr.ConstrainedToInt, resampledDist.ConstrainedToInt);

            Assert.IsTrue(
                distr.GetResult()[0] != resampledDist.GetResult()[0] ||
                distr.GetResult()[1] != resampledDist.GetResult()[1] ||
                distr.GetResult()[2] != resampledDist.GetResult()[2] ||
                distr.GetResult()[3] != resampledDist.GetResult()[3] ||
                distr.GetResult()[4] != resampledDist.GetResult()[4]);

            Assert.AreEqual(distr.Percentile(0), resampledDist.Percentile(0));
            Assert.AreEqual(distr.Percentile(25), resampledDist.Percentile(25));
            Assert.AreEqual(distr.Percentile(50), resampledDist.Percentile(50));
            Assert.AreEqual(distr.Percentile(75), resampledDist.Percentile(75));
            Assert.AreEqual(distr.Percentile(100), resampledDist.Percentile(100));

            // Force recalculation by changing seed on original distribution
            distr.RandomSeed = distr.RandomSeed + 1;
            Assert.AreEqual(distr.Maximum, resampledDist.Maximum);
            Assert.AreEqual(distr.Minimum, resampledDist.Minimum);
            Assert.AreEqual(distr.Mean, resampledDist.Mean, 10);
            Assert.AreEqual(distr.Median, resampledDist.Median);
            Assert.AreEqual(distr.StandardDeviation, resampledDist.StandardDeviation, 10);
            Assert.AreEqual(distr.Variance, resampledDist.Variance, 10);
        }
 void InitDistributions()
 {
     _uniformDistribution = new ContinuousUniformDistribution(RandomSource);
     _uniformDistribution.SetDistributionParameters(-Constants.Pi_2, Constants.Pi_2);
     _exponentialDistribution = new ExponentialDistribution(RandomSource);
     _exponentialDistribution.SetDistributionParameters(1.0);
 }