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);
        }
        public void TestResultsCache()
        {
            var stopwatch = new Stopwatch();

            Simulation.NumberOfSamples = 100000000;
            var distr = new ContinuousUniformDistribution(1, 1000);

            stopwatch.Start();
            distr.GetResult();
            stopwatch.Stop();
            long test1Milliseconds = stopwatch.ElapsedMilliseconds;

            stopwatch.Restart();
            distr.GetResult();
            stopwatch.Stop();
            long test2Milliseconds = stopwatch.ElapsedMilliseconds;

            Assert.IsTrue(test2Milliseconds < 0.1 * test1Milliseconds);
        }
Exemple #3
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 #4
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());
        }
        public void ContinuousUniformDistribution_Result()
        {
            Simulation.NumberOfSamples = ExpectedResults.NumberOfSamples;

            var testInfo     = ExpectedResults.Data["DistributionResults"]["ContinuousUniformDistribution"];
            var inputs       = testInfo["ConstructorInputs"];
            var resultsArray = testInfo["Results"]
                               .Select(jv => (double)jv).ToArray();

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

            Vector <double> expectedResults = Vector <double> .Build.DenseOfArray(resultsArray);

            Assert.AreEqual(expectedResults, distr.GetResult());
        }
        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);
            }
        }