public void ConstructorTest1()
        {
            var trig = new TriangularDistribution(a: 1, b: 6, c: 3);

            double mean   = trig.Mean;                                  // 3.3333333333333335
            double median = trig.Median;                                // 3.2613872124741694
            double mode   = trig.Mode;                                  // 3.0
            double var    = trig.Variance;                              // 1.0555555555555556

            double cdf  = trig.DistributionFunction(x: 2);              // 0.10000000000000001
            double pdf  = trig.ProbabilityDensityFunction(x: 2);        // 0.20000000000000001
            double lpdf = trig.LogProbabilityDensityFunction(x: 2);     // -1.6094379124341003

            double ccdf = trig.ComplementaryDistributionFunction(x: 2); // 0.90000000000000002
            double icdf = trig.InverseDistributionFunction(p: cdf);     // 2.0000000655718773

            double hf  = trig.HazardFunction(x: 2);                     // 0.22222222222222224
            double chf = trig.CumulativeHazardFunction(x: 2);           // 0.10536051565782628

            string str = trig.ToString(CultureInfo.InvariantCulture);   // Triangular(x; a = 1, b = 6, c = 3)

            Assert.AreEqual(3.3333333333333335, mean);
            Assert.AreEqual(3.2613872124741694, median);
            Assert.AreEqual(1.0555555555555556, var);
            Assert.AreEqual(0.10536051565782628, chf);
            Assert.AreEqual(0.10000000000000001, cdf);
            Assert.AreEqual(0.20000000000000001, pdf);
            Assert.AreEqual(-1.6094379124341003, lpdf);
            Assert.AreEqual(0.22222222222222224, hf);
            Assert.AreEqual(0.90000000000000002, ccdf);
            Assert.AreEqual(2.0000000655718773, icdf);
            Assert.AreEqual("Triangular(x; a = 1, b = 6, c = 3)", str);
        }
Пример #2
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);
        }
Пример #3
0
        private IServer CreateProcessStep(string name, double min, double mean, double max)
        {
            IDoubleDistribution triangle  = new TriangularDistribution(m_model, name + "_distribution", Guid.NewGuid(), min, mean, max);
            IPeriodicity        svcPeriod = new Periodicity(triangle, Periodicity.Units.Minutes);

            return(new BufferedServer(m_model, name, Guid.NewGuid(), svcPeriod, null, true, false));
        }
        public void ConstructorTest1()
        {
            var trig = new TriangularDistribution(a: 1, b: 6, c: 3);

            double mean = trig.Mean;     // 3.3333333333333335
            double median = trig.Median; // 3.2613872124741694
            double mode = trig.Mode;     // 3.0
            double var = trig.Variance;  // 1.0555555555555556

            double cdf = trig.DistributionFunction(x: 2); // 0.10000000000000001
            double pdf = trig.ProbabilityDensityFunction(x: 2); // 0.20000000000000001
            double lpdf = trig.LogProbabilityDensityFunction(x: 2); // -1.6094379124341003

            double ccdf = trig.ComplementaryDistributionFunction(x: 2); // 0.90000000000000002
            double icdf = trig.InverseDistributionFunction(p: cdf); // 2.0000000655718773

            double hf = trig.HazardFunction(x: 2); // 0.22222222222222224
            double chf = trig.CumulativeHazardFunction(x: 2); // 0.10536051565782628

            string str = trig.ToString(CultureInfo.InvariantCulture); // Triangular(x; a = 1, b = 6, c = 3)

            Assert.AreEqual(3.3333333333333335, mean);
            Assert.AreEqual(3.2613872124741694, median);
            Assert.AreEqual(1.0555555555555556, var);
            Assert.AreEqual(0.10536051565782628, chf);
            Assert.AreEqual(0.10000000000000001, cdf);
            Assert.AreEqual(0.20000000000000001, pdf);
            Assert.AreEqual(-1.6094379124341003, lpdf);
            Assert.AreEqual(0.22222222222222224, hf);
            Assert.AreEqual(0.90000000000000002, ccdf);
            Assert.AreEqual(2.0000000655718773, icdf);
            Assert.AreEqual("Triangular(x; a = 1, b = 6, c = 3)", str);
        }
Пример #5
0
        public override double getIncome()
        {
            double pos = 0.01 * Math.Pow(popularity + members.Count, 2);
            TriangularDistribution t = new TriangularDistribution(-0.5, 3, 1);

            pos *= t.Sample(rand);
            return(pos * 2.5);
        }
Пример #6
0
        public void TriangularDistributionGeneratorTest(double begin, double end,
                                                        double distributionEpsilon, double statEpsilon, int totalValues, int totalIntervals)
        {
            var dist      = new TriangularDistribution(begin, end);
            var generator = new TriangularDistributionGenerator(dist);

            CheckAssert(
                generator, dist,
                distributionEpsilon, statEpsilon,
                totalValues, totalIntervals);
        }
Пример #7
0
        public int MineralConcentration(int highConcBias = 0)
        {
            var lowChance = 30 - (highConcBias * 5);

            if (this.Next(100) < lowChance)
            {
                return(this.Next(1, 31));
            }

            return((int)TriangularDistribution.Sample(this.rng, 31, 75, 120));
        }
Пример #8
0
        public void DistributionBase()
        {
            // test that implementations on base Distribution classes function and agree with overridden implementations

            ContinuousDistribution d = new TestDistribution();
            ContinuousDistribution t = new TriangularDistribution(0.0, 1.0, 1.0);

            Assert.IsTrue(TestUtilities.IsNearlyEqual(d.Mean, t.Mean));
            Assert.IsTrue(TestUtilities.IsNearlyEqual(d.StandardDeviation, t.StandardDeviation));
            Assert.IsTrue(TestUtilities.IsNearlyEqual(d.Skewness, t.Skewness));
            Assert.IsTrue(TestUtilities.IsNearlyEqual(d.Median, t.Median));
        }
Пример #9
0
        public void ConstructorTest1()
        {
            var tri = new TriangularDistribution(min: 1, max: 6, mode: 3);

            double mean   = tri.Mean;                                  // 3.3333333333333335
            double median = tri.Median;                                // 3.2613872124741694
            double mode   = tri.Mode;                                  // 3.0
            double var    = tri.Variance;                              // 1.0555555555555556

            double cdf  = tri.DistributionFunction(x: 2);              // 0.10000000000000001
            double pdf  = tri.ProbabilityDensityFunction(x: 2);        // 0.20000000000000001
            double lpdf = tri.LogProbabilityDensityFunction(x: 2);     // -1.6094379124341003

            double ccdf = tri.ComplementaryDistributionFunction(x: 2); // 0.90000000000000002
            double icdf = tri.InverseDistributionFunction(p: cdf);     // 2.0000000655718773

            double hf  = tri.HazardFunction(x: 2);                     // 0.22222222222222224
            double chf = tri.CumulativeHazardFunction(x: 2);           // 0.10536051565782628

            string str = tri.ToString(CultureInfo.InvariantCulture);   // Triangular(x; a = 1, b = 6, c = 3)

            Assert.AreEqual(3.3333333333333335, mean);
            Assert.AreEqual(3.0, mode);
            Assert.AreEqual(3.2613872124741694, median);
            Assert.AreEqual(1.0555555555555556, var);
            Assert.AreEqual(0.10536051565782628, chf);
            Assert.AreEqual(0.10000000000000001, cdf);
            Assert.AreEqual(0.20000000000000001, pdf);
            Assert.AreEqual(-1.6094379124341003, lpdf);
            Assert.AreEqual(0.22222222222222224, hf);
            Assert.AreEqual(0.90000000000000002, ccdf);
            Assert.AreEqual(2.0000000655718773, icdf);
            Assert.AreEqual("Triangular(x; a = 1, b = 6, c = 3)", str);

            var range1 = tri.GetRange(0.95);
            var range2 = tri.GetRange(0.99);
            var range3 = tri.GetRange(0.01);

            Assert.AreEqual(1.7071067704914942, range1.Min);
            Assert.AreEqual(5.1339745973005186, range1.Max);
            Assert.AreEqual(1.3162277235820534, range2.Min);
            Assert.AreEqual(5.6127016687540774, range2.Max);
            Assert.AreEqual(1.3162277235820532, range3.Min);
            Assert.AreEqual(5.6127016687540774, range3.Max);

            Assert.AreEqual(1, tri.Support.Min);
            Assert.AreEqual(6, tri.Support.Max);

            Assert.AreEqual(tri.InverseDistributionFunction(0), tri.Support.Min);
            Assert.AreEqual(tri.InverseDistributionFunction(1), tri.Support.Max);
        }
Пример #10
0
        /// <summary>
        /// Calculates the income of this company, updates popularity based on astroturfs, and removes sold stock
        /// </summary>
        /// <returns>the amount of money the company earned in this turn</returns>
        public double getIncome()
        {
            TriangularDistribution t = new TriangularDistribution(0.5, 2, 1.2);
            double sellRate          = popularityToModifier(popularity * t.Sample());
            double output            = 0;

            foreach (string key in productStock.Keys.ToList())
            {
                int sold = (int)(productStock[key] * sellRate);
                productStock[key] -= sold;
                output            += products[key] * sold;
            }

            //Dividends
            output -= getDividendCost(output, true);

            //Update popularity
            if (astroturfs < 1)
            {
                astroturfs = 1;
            }
            popularity *= (1 + (astroturfs)) / (2 + (astroturfs));
            if (astroturfs > 1)
            {
                astroturfs--;
            }

            //Update stock history
            stock_history.Add(stock_price);

            foreach (string p in automation)
            {
                if (productStock.ContainsKey(p))
                {
                    productStock[p]++;
                }
                else
                {
                    //Remove discontinued/errored products
                    //automation.Remove(p);
                    //Never mind, it doesn't like when you delete stuff in its own foreach loop
                }
            }

            //Update owner
            updateOwner();
            return(output);
        }
Пример #11
0
 public void TestTriangularDistribution()
 {
     double[][] para =
     {
         new double[] {}
     };
     for (int i = 0; i < para.Length; i++)
     {
         var tester = new ContDistTester(para[i], delegate(double a, double b)
         {
             var ret = new TriangularDistribution(a, 0.5 * (a + b), b);
             return(ret);
         }
                                         );
         tester.Test(1E-14);
     }
 }
Пример #12
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;
        }
        public void ConstructorTest1()
        {
            var tri = new TriangularDistribution(min: 1, max: 6, mode: 3);

            double mean = tri.Mean;     // 3.3333333333333335
            double median = tri.Median; // 3.2613872124741694
            double mode = tri.Mode;     // 3.0
            double var = tri.Variance;  // 1.0555555555555556

            double cdf = tri.DistributionFunction(x: 2); // 0.10000000000000001
            double pdf = tri.ProbabilityDensityFunction(x: 2); // 0.20000000000000001
            double lpdf = tri.LogProbabilityDensityFunction(x: 2); // -1.6094379124341003

            double ccdf = tri.ComplementaryDistributionFunction(x: 2); // 0.90000000000000002
            double icdf = tri.InverseDistributionFunction(p: cdf); // 2.0000000655718773

            double hf = tri.HazardFunction(x: 2); // 0.22222222222222224
            double chf = tri.CumulativeHazardFunction(x: 2); // 0.10536051565782628

            string str = tri.ToString(CultureInfo.InvariantCulture); // Triangular(x; a = 1, b = 6, c = 3)

            Assert.AreEqual(3.3333333333333335, mean);
            Assert.AreEqual(3.0, mode);
            Assert.AreEqual(3.2613872124741694, median);
            Assert.AreEqual(1.0555555555555556, var);
            Assert.AreEqual(0.10536051565782628, chf);
            Assert.AreEqual(0.10000000000000001, cdf);
            Assert.AreEqual(0.20000000000000001, pdf);
            Assert.AreEqual(-1.6094379124341003, lpdf);
            Assert.AreEqual(0.22222222222222224, hf);
            Assert.AreEqual(0.90000000000000002, ccdf);
            Assert.AreEqual(2.0000000655718773, icdf);
            Assert.AreEqual("Triangular(x; a = 1, b = 6, c = 3)", str);

            var range1 = tri.GetRange(0.95);
            var range2 = tri.GetRange(0.99);
            var range3 = tri.GetRange(0.01);

            Assert.AreEqual(1.7071067704914942, range1.Min);
            Assert.AreEqual(5.1339745973005186, range1.Max);
            Assert.AreEqual(1.3162277235820534, range2.Min);
            Assert.AreEqual(5.6127016687540774, range2.Max);
            Assert.AreEqual(1.3162277235820532, range3.Min);
            Assert.AreEqual(5.6127016687540774, range3.Max);
        }
Пример #14
0
        public void TestDistributionTriangular()
        {
            IDoubleDistribution dist = new TriangularDistribution(m_model, "TriangularDistribution", Guid.NewGuid(), 2.0, 5.0, 9.0);

            Assert.IsTrue(dist.GetValueWithCumulativeProbability(0.50) == 5.2583426132260591);
            dist.SetCDFInterval(0.5, 0.5);
            Assert.IsTrue(dist.GetNext() == 5.2583426132260591);
            dist.SetCDFInterval(0.0, 1.0);

            System.IO.StreamWriter tw = new System.IO.StreamWriter(Environment.GetEnvironmentVariable("TEMP") + "\\DistributionTriangular.csv");
            Debug.WriteLine("Generating raw data.");
            int DATASETSIZE = 1500000;

            double[] rawData = new double[DATASETSIZE];
            for (int x = 0; x < DATASETSIZE; x++)
            {
                rawData[x] = dist.GetNext();
                //tw.WriteLine(rawData[x]);
            }

            Debug.WriteLine("Performing histogram analysis.");
            Histogram1D_Double hist = new Histogram1D_Double(rawData, 1.0, 10.0, 450, "distribution");

            hist.LabelProvider = new LabelProvider(((Histogram1D_Double)hist).DefaultLabelProvider);
            hist.Recalculate();

            Debug.WriteLine("Writing data dump file.");
            int[] bins = (int[])hist.Bins;
            for (int i = 0; i < bins.Length; i++)
            {
                //Debug.WriteLine(hist.GetLabel(new int[]{i}) + ", " + bins[i]);
                tw.WriteLine(hist.GetLabel(new int[] { i }) + ", " + bins[i]);
            }
            tw.Flush();
            tw.Close();

            if (m_visuallyVerify)
            {
                System.Diagnostics.Process.Start("excel.exe", Environment.GetEnvironmentVariable("TEMP") + "\\DistributionTriangular.csv");
            }
        }
Пример #15
0
        public void GenerateTest2()
        {
            Accord.Math.Tools.SetupGenerator(0);

            var target = new TriangularDistribution(-4.2, 7, 1);

            double[] samples = target.Generate(10000000);

            for (int i = 0; i < samples.Length; i++)
            {
                samples[i] = System.Math.Round(samples[i], 2);
            }

            double min  = samples.Min();
            double max  = samples.Max();
            double mode = samples.Mode();

            Assert.AreEqual(min, target.Min, 1e-2);
            Assert.AreEqual(max, target.Max, 1e-2);
            Assert.AreEqual(mode, target.Mode, 0.035);
        }
 /// <summary>
 /// Shows a new chart in a default form.
 /// </summary>
 /// <param name="dist">The distribution.</param>
 /// <param name="function">The distribution function to plot.</param>
 /// <param name="numInterpolatedValues">The number of interpolated values.</param>
 /// <remarks>
 /// Equivalent to:
 /// <code>
 /// NMathStatsChart.Show( ToChart( dist, function, numInterpolatedValues ) );
 /// </code>
 /// </remarks>
 public static void Show( TriangularDistribution dist, DistributionFunction function = DistributionFunction.PDF, int numInterpolatedValues = 100 )
 {
     Show( ToChart( dist, function, numInterpolatedValues ) );
 }
        public void GenerateTest2()
        {
            Accord.Math.Tools.SetupGenerator(0);

            var target = new TriangularDistribution(-4.2, 7, 1);

            double[] samples = target.Generate(10000000);

            for (int i = 0; i < samples.Length; i++)
                samples[i] = System.Math.Round(samples[i], 2);

            double min = samples.Min();
            double max = samples.Max();
            double mode = samples.Mode();

            Assert.AreEqual(min, target.Min, 1e-2);
            Assert.AreEqual(max, target.Max, 1e-2);
            Assert.AreEqual(mode, target.Mode, 0.035);
        }
Пример #18
0
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            string error;

            if (!ValidateInput(out error))
            {
                MessageBox.Show(error);
                return;
            }

            Distribution distribution = null;
            var          generator    = new Generator();

            switch (distributionType)
            {
            case DistributionType.Uniform:
                var a = double.Parse(textBoxA.Text);
                var b = double.Parse(textBoxB.Text);
                distribution = new UniformDistribution(generator, a, b);
                break;

            case DistributionType.Gaussian:
                var mean = double.Parse(textBoxMParameter.Text);
                var standartDeviation = double.Parse(textBoxQParameter.Text);
                distribution = new GaussianDistribution(generator, mean, standartDeviation);
                break;

            case DistributionType.Exponential:
                var lambda = double.Parse(textBoxLambda.Text);
                distribution = new ExponentialDistribution(generator, lambda);
                break;

            case DistributionType.Gamma:
                var eta     = Convert.ToInt32(numericUpDownEta.Text);
                var lambdaG = double.Parse(textBoxLambdaG.Text);
                distribution = new GammaDistribution(generator, eta, lambdaG);
                break;

            case DistributionType.Triangular:
                var aT             = double.Parse(textBoxAT.Text);
                var bT             = double.Parse(textBoxBT.Text);
                var isFirstVariant = radioBtnVariant1.Checked;
                distribution = new TriangularDistribution(generator, aT, bT, isFirstVariant);
                break;

            case DistributionType.Simpsons:
                var aS = double.Parse(textBoxAS.Text);
                var bS = double.Parse(textBoxBS.Text);
                distribution = new SimpsonsDistribution(generator, aS, bS);
                break;

            default:
                distribution = null;
                break;
            }

            if (ReferenceEquals(distribution, null))
            {
                MessageBox.Show("Error: distribution is undefined");
                return;
            }

            var n = Convert.ToInt32(numericUpDownLength.Text);

            generatedValues = new List <double>();
            listBoxGeneratedValues.Items.Clear();

            for (int i = 0; i < n; i++)
            {
                var value = distribution.GetNext();
                generatedValues.Add(value);
                listBoxGeneratedValues.Items.Add(value);
            }

            DrawChart();

            var m = CalcM(generatedValues);
            var d = CalcD(generatedValues, m);
            var q = Math.Sqrt(d);

            textBoxMActual.Text = m.ToString(CultureInfo.InvariantCulture);
            textBoxDActual.Text = d.ToString(CultureInfo.InvariantCulture);
            textBoxQActual.Text = q.ToString(CultureInfo.InvariantCulture);
        }
Пример #19
0
    /// <summary>
    /// Sets the distribution for operations using the current genrator
    /// </summary>
    /// <param name="distx">Distx.</param>
    public void setDistribution(distributions distx, Dictionary <string, double> args)
    {
        //TODO check arguments to ensure they are making a change to the distribution
        //otherwise throw an exception see laplace as a example of implementing this
        switch (distx)
        {
        case distributions.Bernoili:
            BernoulliDistribution x0 = new BernoulliDistribution(gen);
            if (args.ContainsKey("alpha"))
            {
                x0.Alpha = args["alpha"];
            }
            else
            {
                throw new System.Exception("for Bernoili distribution you must provide an alpha");
            }
            dist = x0;
            break;

        case distributions.Beta:
            BetaDistribution x1 = new BetaDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x1.Alpha = args["alpha"];
                x1.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception(" for beta distribution you must provide alpha and beta");
            }
            dist = x1;
            break;

        case distributions.BetaPrime:
            BetaPrimeDistribution x2 = new BetaPrimeDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x2.Alpha = args["alpha"];
                x2.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception(" for betaPrime distribution you must provide alpha and beta");
            }
            dist = x2;
            break;

        case distributions.Cauchy:
            CauchyDistribution x3 = new CauchyDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("gamma"))
            {
                x3.Alpha = args["alpha"];
                x3.Gamma = args["gamma"];
            }
            else
            {
                throw new System.Exception("for cauchy dist you must provide alpha and gamma");
            }
            dist = x3;
            break;

        case distributions.Chi:
            ChiDistribution x4 = new ChiDistribution(gen);
            if (args.ContainsKey("alpha"))
            {
                x4.Alpha = (int)args["alpha"];
            }
            else
            {
                throw new System.Exception("for chi you must provide alpha");
            }
            dist = x4;
            break;

        case distributions.ChiSquared:
            ChiSquareDistribution x5 = new ChiSquareDistribution(gen);
            if (args.ContainsKey("alpha"))
            {
                x5.Alpha = (int)args["alpha"];
            }
            else
            {
                throw new System.Exception("for chiSquared you must provide alpha");
            }
            dist = x5;
            break;

        case distributions.ContinuousUniform:
            ContinuousUniformDistribution x6 = new ContinuousUniformDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x6.Alpha = args["alpha"];
                x6.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception("for ContinuousUniform you must provide alpha and beta");
            }
            dist = x6;
            break;

        case distributions.DiscreteUniform:
            DiscreteUniformDistribution x7 = new DiscreteUniformDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x7.Alpha = (int)args["alpha"];
                x7.Beta  = (int)args["beta"];
            }
            else
            {
                throw new System.Exception("for discrete uniform distribution you must provide alpha and beta");
            }
            dist = x7;
            break;

        case distributions.Erlang:
            ErlangDistribution x8 = new ErlangDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("lambda"))
            {
                x8.Alpha  = (int)args["alpha"];
                x8.Lambda = (int)args["lambda"];
            }
            else
            {
                throw new System.Exception("for Erlang dist you must provide alpha and lambda");
            }
            dist = x8;
            break;

        case distributions.Exponential:
            ExponentialDistribution x9 = new ExponentialDistribution(gen);
            if (args.ContainsKey("lambda"))
            {
                x9.Lambda = args["lambda"];
            }
            else
            {
                throw new System.Exception("for exponential dist you must provide lambda");
            }
            dist = x9;
            break;

        case distributions.FisherSnedecor:
            FisherSnedecorDistribution x10 = new FisherSnedecorDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x10.Alpha = (int)args["alpha"];
                x10.Beta  = (int)args["beta"];
            }
            else
            {
                throw new System.Exception("for FisherSnedecor you must provide alpha and beta");
            }
            dist = x10;
            break;

        case distributions.FisherTippett:
            FisherTippettDistribution x11 = new FisherTippettDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("mu"))
            {
                x11.Alpha = args["alpha"];
                x11.Mu    = args["mu"];
            }
            else
            {
                throw new System.Exception("for FisherTippets you must provide alpha and mu");
            }
            dist = x11;
            break;

        case distributions.Gamma:
            GammaDistribution x12 = new GammaDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("theta"))
            {
                x12.Alpha = args["alpha"];
                x12.Theta = args["theta"];
            }
            else
            {
                throw new System.Exception("for Gamma dist you must provide alpha and theta");
            }
            dist = x12;
            break;

        case distributions.Geometric:
            GeometricDistribution x13 = new GeometricDistribution(gen);
            if (args.ContainsKey("alpha"))
            {
                x13.Alpha = args["alpha"];
            }
            else
            {
                throw new System.Exception("Geometric distribution requires alpha value");
            }
            dist = x13;
            break;

        case distributions.Binomial:
            BinomialDistribution x14 = new BinomialDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x14.Alpha = args["alpha"];
                x14.Beta  = (int)args["beta"];
            }
            else
            {
                throw new System.Exception("binomial distribution requires alpha and beta");
            }
            dist = x14;
            break;

        case distributions.None:
            break;

        case distributions.Laplace:
            LaplaceDistribution x15 = new LaplaceDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("mu"))
            {
                if (x15.IsValidAlpha(args["alpha"]) && x15.IsValidMu(args["mu"]))
                {
                    x15.Alpha = args["alpha"];
                    x15.Mu    = args["mu"];
                }
                else
                {
                    throw new ArgumentException("alpha must be greater than zero");
                }
            }
            else
            {
                throw new System.Exception("Laplace dist requires alpha and mu");
            }
            dist = x15;
            break;

        case distributions.LogNormal:
            LognormalDistribution x16 = new LognormalDistribution(gen);
            if (args.ContainsKey("mu") && args.ContainsKey("sigma"))
            {
                x16.Mu    = args["mu"];
                x16.Sigma = args["sigma"];
            }
            else
            {
                throw new System.Exception("lognormal distribution requires mu and sigma");
            }
            dist = x16;
            break;

        case distributions.Normal:
            NormalDistribution x17 = new NormalDistribution(gen);
            if (args.ContainsKey("mu") && args.ContainsKey("sigma"))
            {
                x17.Mu    = args["mu"];
                x17.Sigma = args["sigma"];
            }
            else
            {
                throw new System.Exception("normal distribution requires mu and sigma");
            }
            dist = x17;
            break;

        case distributions.Pareto:
            ParetoDistribution x18 = new ParetoDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x18.Alpha = args["alpha"];
                x18.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception("pareto distribution requires alpha and beta");
            }
            dist = x18;
            break;

        case distributions.Poisson:
            PoissonDistribution x19 = new PoissonDistribution(gen);
            if (args.ContainsKey("lambda"))
            {
                x19.Lambda = args["lambda"];
            }
            else
            {
                throw new System.Exception("Poisson distribution requires lambda");
            }
            dist = x19;
            break;

        case distributions.Power:
            PowerDistribution x20 = new PowerDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x20.Alpha = args["alpha"];
                x20.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception("Power dist requires alpha and beta");
            }
            dist = x20;
            break;

        case distributions.RayLeigh:
            RayleighDistribution x21 = new RayleighDistribution(gen);
            if (args.ContainsKey("sigma"))
            {
                x21.Sigma = args["sigma"];
            }
            else
            {
                throw new System.Exception("Rayleigh dist requires sigma");
            }
            dist = x21;
            break;

        case distributions.StudentsT:
            StudentsTDistribution x22 = new StudentsTDistribution(gen);
            if (args.ContainsKey("nu"))
            {
                x22.Nu = (int)args["nu"];
            }
            else
            {
                throw new System.Exception("StudentsT dist requirres nu");
            }
            dist = x22;
            break;

        case distributions.Triangular:
            TriangularDistribution x23 = new TriangularDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta") && args.ContainsKey("gamma"))
            {
                x23.Alpha = args["alpha"];
                x23.Beta  = args["beta"];
                x23.Gamma = args["gamma"];
            }
            else
            {
                throw new System.Exception("Triangular distribution requires alpha, beta and gamma");
            }
            dist = x23;
            break;

        case distributions.WeiBull:
            WeibullDistribution x24 = new WeibullDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("lambda"))
            {
                x24.Alpha  = args["alpha"];
                x24.Lambda = args["lambda"];
            }
            else
            {
                throw new System.Exception("WeiBull dist requires alpha and lambda");
            }
            dist = x24;
            break;

        default:
            throw new NotImplementedException("the distribution you want has not yet been implemented " +
                                              "you could help everyone out by going and implementing it");
        }
    }
 /// <summary>
 /// Updates the given chart with the specified distribution.
 /// </summary>
 /// <param name="chart">A chart.</param>
 /// <param name="dist">The distribution.</param>
 /// <param name="function">The distribution function to plot.</param>
 /// <param name="numInterpolatedValues">The number of interpolated values.</param>
 /// <returns>A new chart.</returns>
 /// <remarks>
 /// Plots the specified function of the given distribution for 0.0001 &lt;= p &lt;= 0.9999.
 /// <br/>
 /// Titles are added only if chart does not currently contain any titles.
 /// <br/>
 /// chart.Series[0] is replaced, or added if necessary.
 /// </remarks>
 public static void Update( ref ChartControl chart, TriangularDistribution dist, DistributionFunction function = DistributionFunction.PDF, int numInterpolatedValues = 100 )
 {
     List<string> titles = new List<string>()
       {
     "TriangularDistribution",
     String.Format("lower={0}, upper={1}, mode={2}", dist.LowerLimit, dist.UpperLimit, dist.Mode)
       };
       UpdateContinuousDistribution( ref chart, dist, titles, function, numInterpolatedValues );
 }
 /// <summary>
 /// Returns a new line chart plotting the specified function of the given distribution for 0.0001 &lt;= p &lt;= 0.9999.
 /// </summary>
 /// <param name="dist">The distribution.</param>
 /// <param name="function">The distribution function to plot.</param>
 /// <param name="numInterpolatedValues">The number of interpolated values.</param>
 /// <returns>A new chart.</returns>
 public static ChartControl ToChart( TriangularDistribution dist, DistributionFunction function = DistributionFunction.PDF, int numInterpolatedValues = 100 )
 {
     ChartControl chart = GetDefaultChart();
       Update( ref chart, dist, function, numInterpolatedValues );
       return chart;
 }