public void CanSampleSequence() { var n = new Triangular(0.1, 0.3, 0.2); var ied = n.Samples(); GC.KeepAlive(ied.Take(5).ToArray()); }
public double[] getSamples(int num) // 获取指定个数的样本 { double[] ret = new double[num]; int[] ret_int = new int[num]; switch (DistributionName) { case "Normal": normalDis.Samples(ret); break; case "ContinuousUniform": continuousUniformDis.Samples(ret); break; case "Triangular": triangularDis.Samples(ret); break; case "StudentT": studentTDis.Samples(ret); break; case "DiscreteUniform": discreteUniform.Samples(ret_int); for (int i = 0; i < num; i++) { ret[i] = ret_int[i]; } break; } return(ret); }
public void CanSampleSequenceStatic() { var ied = Triangular.Samples(new Random(0), 2.0, 3.0, 2.5); GC.KeepAlive(ied.Take(5).ToArray()); ied = Triangular.Samples(10.0, 100.0, 30.0); GC.KeepAlive(ied.Take(5).ToArray()); }
public static double[] triangular(double v1, double v2, double v3, int num) { var t = new Triangular(v1, v2, v3); double[] ret = new double[num]; t.Samples(ret); return(ret); }
public void Setup() { // Debug // Random rnd = new Random(0); // for repetability // Triangular.Samples(rnd, damageJitter, 0.9, 1.1, 1.0); Triangular.Samples(damageJitter, 0.9, 1.1, 1.0); for (int i = 5000; i < 25000; i += 2500) { multipliersLarge.Add(i); } for (int i = 500; i < 3500; i += 500) { multipliers.Add(i); } }
public void FailSampleSequenceStatic() { Assert.That(() => Triangular.Samples(new Random(0), 1.0, -1.0, 0.1).First(), Throws.ArgumentException); }
/// <summary> /// Run example /// </summary> /// <a href="https://en.wikipedia.org/wiki/Triangular_distribution">Triangular distribution</a> public void Run() { // 1. Initialize var triangular = new Triangular(0, 1, 0.3); Console.WriteLine(@"1. Initialize the new instance of the Triangular distribution class with parameters Lower = {0}, Upper = {1}, Mode = {2}", triangular.LowerBound, triangular.UpperBound, triangular.Mode); Console.WriteLine(); // 2. Distributuion properties: Console.WriteLine(@"2. {0} distributuion properties:", triangular); // Cumulative distribution function Console.WriteLine(@"{0} - Сumulative distribution at location '0.3'", triangular.CumulativeDistribution(0.3).ToString(" #0.00000;-#0.00000")); // Probability density Console.WriteLine(@"{0} - Probability density at location '0.3'", triangular.Density(0.3).ToString(" #0.00000;-#0.00000")); // Log probability density Console.WriteLine(@"{0} - Log probability density at location '0.3'", triangular.DensityLn(0.3).ToString(" #0.00000;-#0.00000")); // Entropy Console.WriteLine(@"{0} - Entropy", triangular.Entropy.ToString(" #0.00000;-#0.00000")); // Largest element in the domain Console.WriteLine(@"{0} - Largest element in the domain", triangular.Maximum.ToString(" #0.00000;-#0.00000")); // Smallest element in the domain Console.WriteLine(@"{0} - Smallest element in the domain", triangular.Minimum.ToString(" #0.00000;-#0.00000")); // Mean Console.WriteLine(@"{0} - Mean", triangular.Mean.ToString(" #0.00000;-#0.00000")); // Median Console.WriteLine(@"{0} - Median", triangular.Median.ToString(" #0.00000;-#0.00000")); // Mode Console.WriteLine(@"{0} - Mode", triangular.Mode.ToString(" #0.00000;-#0.00000")); // Variance Console.WriteLine(@"{0} - Variance", triangular.Variance.ToString(" #0.00000;-#0.00000")); // Standard deviation Console.WriteLine(@"{0} - Standard deviation", triangular.StdDev.ToString(" #0.00000;-#0.00000")); // Skewness Console.WriteLine(@"{0} - Skewness", triangular.Skewness.ToString(" #0.00000;-#0.00000")); Console.WriteLine(); // 10 samples Console.WriteLine(@"3. Generate 10 samples of the Triangular distribution"); for (var i = 0; i < 10; i++) { Console.Write(triangular.Sample().ToString("N05") + @" "); } Console.WriteLine(); Console.WriteLine(); // 10000 samples with starting parameters Console.WriteLine(@"4. Generate 100000 samples of the Triangular(0, 1, 0.3) distribution and display histogram"); var data = new double[100000]; Triangular.Samples(data, 0.0, 1.0, 0.3); ConsoleHelper.DisplayHistogram(data); Console.WriteLine(); // 10000 with different parameters Console.WriteLine(@"4. Generate 100000 samples of the Triangular(2, 10, 8) distribution and display histogram"); Triangular.Samples(data, 2.0, 10.0, 8.0); ConsoleHelper.DisplayHistogram(data); }
public double[] GetSampleData(string distType, double mostLikelyEstimate, double lowEstimate, double highEstimate) { if (Iterations > 10000) { Iterations = 10000; } if (Iterations <= 2) { Iterations = 1000; } if (this.CILevel < 10) { this.CILevel = 90; } if (this.CILevel > 99) { this.CILevel = 99; } Random rnd = new Random(Random); mostLikelyEstimate = Math.Round(mostLikelyEstimate, 4); lowEstimate = Math.Round(lowEstimate, 4); highEstimate = Math.Round(highEstimate, 4); var sampledata = new double[Iterations]; if (distType == Calculator1.RUC_TYPES.triangle.ToString()) { if (lowEstimate >= mostLikelyEstimate || lowEstimate == 0) { //arbitrary rules (25%) lowEstimate = mostLikelyEstimate * .75; //no errors: lowEstimate = 0 is often the case //sb.AppendLine(Errors.GetMessage("DATA_BADDISTRIBUTION")); } if (highEstimate <= mostLikelyEstimate || highEstimate == 0) { //arbitrary rules (25%) highEstimate = mostLikelyEstimate * 1.25; } if (Random != 0) { //generate samples of the Triangular(low, high, mode) distribution; Triangular.Samples(rnd, sampledata, lowEstimate, highEstimate, mostLikelyEstimate); } else { //generate samples of the Triangular(low, high, mode) distribution; Triangular.Samples(sampledata, lowEstimate, highEstimate, mostLikelyEstimate); } } else if (distType == Calculator1.RUC_TYPES.normal.ToString()) { //generate samples of the Normal(mean, sd) distribution; if (Random != 0) { Normal.Samples(rnd, sampledata, lowEstimate, highEstimate); } else { Normal.Samples(sampledata, lowEstimate, highEstimate); } } else if (distType == Calculator1.RUC_TYPES.lognormal.ToString()) { if (Random != 0) { LogNormal.Samples(rnd, sampledata, lowEstimate, highEstimate); } else { LogNormal.Samples(sampledata, lowEstimate, highEstimate); } } else if (distType == Calculator1.RUC_TYPES.weibull.ToString()) { if (Random != 0) { Weibull.Samples(rnd, sampledata, lowEstimate, highEstimate); } else { Weibull.Samples(sampledata, lowEstimate, highEstimate); } } else if (distType == Calculator1.RUC_TYPES.beta.ToString()) { if (Random != 0) { Beta.Samples(rnd, sampledata, lowEstimate, highEstimate); } else { Beta.Samples(sampledata, lowEstimate, highEstimate); } } else if (distType == Calculator1.RUC_TYPES.pareto.ToString()) { if (Random != 0) { Pareto.Samples(rnd, sampledata, lowEstimate, highEstimate); } else { Pareto.Samples(sampledata, lowEstimate, highEstimate); } } else if (distType == Calculator1.RUC_TYPES.uniform.ToString()) { var sampleints = new int[Iterations]; int iLower = CalculatorHelpers.ConvertStringToInt(lowEstimate.ToString()); int iUpper = CalculatorHelpers.ConvertStringToInt(highEstimate.ToString()); if (Random != 0) { DiscreteUniform.Samples(rnd, sampleints, iLower, iUpper); } else { DiscreteUniform.Samples(sampleints, iLower, iUpper); } for (int i = 0; i < sampleints.Count(); i++) { sampledata[i] = sampleints[i]; } } else if (distType == Calculator1.RUC_TYPES.bernoulli.ToString()) { var sampleints = new int[Iterations]; if (Random != 0) { Bernoulli.Samples(rnd, sampleints, lowEstimate); } else { Bernoulli.Samples(sampleints, lowEstimate); } for (int i = 0; i < sampleints.Count(); i++) { sampledata[i] = sampleints[i]; } } else if (distType == Calculator1.RUC_TYPES.poisson.ToString()) { var sampleints = new int[Iterations]; if (Random != 0) { Poisson.Samples(rnd, sampleints, lowEstimate); } else { Poisson.Samples(sampleints, lowEstimate); } for (int i = 0; i < sampleints.Count(); i++) { sampledata[i] = sampleints[i]; } } else if (distType == Calculator1.RUC_TYPES.binomial.ToString()) { var sampleints = new int[Iterations]; int iUpperEstimate = CalculatorHelpers.ConvertStringToInt(highEstimate.ToString()); if (Random != 0) { Binomial.Samples(rnd, sampleints, lowEstimate, iUpperEstimate); } else { Binomial.Samples(sampleints, lowEstimate, iUpperEstimate); } for (int i = 0; i < sampleints.Count(); i++) { sampledata[i] = sampleints[i]; } } else if (distType == Calculator1.RUC_TYPES.gamma.ToString()) { //generate samples of the Gamma(shape, scale) distribution; if (Random != 0) { Gamma.Samples(rnd, sampledata, lowEstimate, highEstimate); } else { Gamma.Samples(sampledata, lowEstimate, highEstimate); } } else { //don't force them to use distribution } //hold for possible infernet use //else if (distType == Calculator1.RUC_TYPES.dirichlet.ToString()) //{ // //generate samples of the Dirichlet(random, alpha) distribution; // Dirichlet.Sample(sampledata, lowEstimate); //} //else if (distType == Calculator1.RUC_TYPES.wishart.ToString()) //{ // //generate samples of the Wishart(random, degrees of freedom, scale) distribution; // Wishart.Sample(sampledata, lowEstimate, highEstimate); //} //the mathlibrary supports more than a dozen additional distributions return(sampledata); }