RNG-30: Unit tests for continuous distributions.
Project: http://git-wip-us.apache.org/repos/asf/commons-rng/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-rng/commit/76e17009 Tree: http://git-wip-us.apache.org/repos/asf/commons-rng/tree/76e17009 Diff: http://git-wip-us.apache.org/repos/asf/commons-rng/diff/76e17009 Branch: refs/heads/master Commit: 76e17009a48665993d3b2952b436370716c88795 Parents: 3ece8fd Author: Gilles <er...@apache.org> Authored: Sat Nov 12 16:36:23 2016 +0100 Committer: Gilles <er...@apache.org> Committed: Sat Nov 12 16:36:23 2016 +0100 ---------------------------------------------------------------------- .../distribution/ContinuousSamplersList.java | 123 +++++++++++++++++++ 1 file changed, 123 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-rng/blob/76e17009/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java ---------------------------------------------------------------------- diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java index f310775..b660738 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java @@ -46,6 +46,129 @@ public class ContinuousSamplersList { add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(meanNormal, sigmaNormal), new BoxMullerGaussianSampler(RandomSource.create(RandomSource.MT), meanNormal, sigmaNormal)); + // Beta ("inverse method"). + final double alphaBeta = 4.3; + final double betaBeta = 2.1; + add(LIST, new org.apache.commons.math3.distribution.BetaDistribution(alphaBeta, betaBeta), + RandomSource.create(RandomSource.ISAAC)); + // Beta ("Cheng"). + add(LIST, new org.apache.commons.math3.distribution.BetaDistribution(alphaBeta, betaBeta), + new ChengBetaSampler(RandomSource.create(RandomSource.MWC_256), alphaBeta, betaBeta)); + + // Cauchy ("inverse method"). + final double medianCauchy = 0.123; + final double scaleCauchy = 4.5; + add(LIST, new org.apache.commons.math3.distribution.CauchyDistribution(medianCauchy, scaleCauchy), + RandomSource.create(RandomSource.WELL_19937_C)); + + // Chi-square ("inverse method"). + final int dofChi2 = 12; + add(LIST, new org.apache.commons.math3.distribution.ChiSquaredDistribution(dofChi2), + RandomSource.create(RandomSource.WELL_19937_A)); + + // Exponential ("inverse method"). + final double meanExp = 3.45; + add(LIST, new org.apache.commons.math3.distribution.ExponentialDistribution(meanExp), + RandomSource.create(RandomSource.WELL_44497_A)); + // Exponential. + add(LIST, new org.apache.commons.math3.distribution.ExponentialDistribution(meanExp), + new AhrensDieterExponentialSampler(RandomSource.create(RandomSource.MT), meanExp)); + + // F ("inverse method"). + final int numDofF = 4; + final int denomDofF = 7; + add(LIST, new org.apache.commons.math3.distribution.FDistribution(numDofF, denomDofF), + RandomSource.create(RandomSource.MT_64)); + + // Gamma ("inverse method"). + final double thetaGammaSmallerThanOne = 0.1234; + final double thetaGammaLargerThanOne = 2.345; + final double alphaGamma = 3.456; + add(LIST, new org.apache.commons.math3.distribution.GammaDistribution(thetaGammaLargerThanOne, alphaGamma), + RandomSource.create(RandomSource.SPLIT_MIX_64)); + // Gamma (theta < 1). + add(LIST, new org.apache.commons.math3.distribution.GammaDistribution(thetaGammaSmallerThanOne, alphaGamma), + new AhrensDieterMarsagliaTsangGammaSampler(RandomSource.create(RandomSource.XOR_SHIFT_1024_S), + alphaGamma, thetaGammaSmallerThanOne)); + // Gamma (theta > 1). + add(LIST, new org.apache.commons.math3.distribution.GammaDistribution(thetaGammaLargerThanOne, alphaGamma), + new AhrensDieterMarsagliaTsangGammaSampler(RandomSource.create(RandomSource.WELL_44497_B), + alphaGamma, thetaGammaLargerThanOne)); + + // Gumbel ("inverse method"). + final double muGumbel = -4.56; + final double betaGumbel = 0.123; + add(LIST, new org.apache.commons.math3.distribution.GumbelDistribution(muGumbel, betaGumbel), + RandomSource.create(RandomSource.WELL_1024_A)); + + // Laplace ("inverse method"). + final double muLaplace = 12.3; + final double betaLaplace = 5.6; + add(LIST, new org.apache.commons.math3.distribution.LaplaceDistribution(muLaplace, betaLaplace), + RandomSource.create(RandomSource.WELL_1024_A)); + + // Levy ("inverse method"). + final double muLevy = -1.098; + final double cLevy = 0.76; + add(LIST, new org.apache.commons.math3.distribution.LevyDistribution(muLevy, cLevy), + RandomSource.create(RandomSource.TWO_CMRES)); + + // Log normal ("inverse method"). + final double scaleLogNormal = 23.45; + final double shapeLogNormal = 0.1234; + add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(scaleLogNormal, shapeLogNormal), + RandomSource.create(RandomSource.KISS)); + // Log normal ("Box-Muller"). + add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(scaleLogNormal, shapeLogNormal), + new BoxMullerLogNormalSampler(RandomSource.create(RandomSource.XOR_SHIFT_1024_S), scaleLogNormal, shapeLogNormal)); + + // Logistic ("inverse method"). + final double muLogistic = -123.456; + final double sLogistic = 7.89; + add(LIST, new org.apache.commons.math3.distribution.LogisticDistribution(muLogistic, sLogistic), + RandomSource.create(RandomSource.TWO_CMRES_SELECT, null, 2, 6)); + + // Nakagami ("inverse method"). + final double muNakagami = 78.9; + final double omegaNakagami = 23.4; + add(LIST, new org.apache.commons.math3.distribution.NakagamiDistribution(muNakagami, omegaNakagami), + RandomSource.create(RandomSource.TWO_CMRES_SELECT, null, 5, 3)); + + // Pareto ("inverse method"). + final double scalePareto = 23.45; + final double shapePareto = 0.1234; + add(LIST, new org.apache.commons.math3.distribution.ParetoDistribution(scalePareto, shapePareto), + RandomSource.create(RandomSource.TWO_CMRES_SELECT, null, 9, 11)); + // Pareto. + add(LIST, new org.apache.commons.math3.distribution.ParetoDistribution(scalePareto, shapePareto), + new InverseMethodParetoSampler(RandomSource.create(RandomSource.XOR_SHIFT_1024_S), scalePareto, shapePareto)); + + // T ("inverse method"). + final double dofT = 0.76543; + add(LIST, new org.apache.commons.math3.distribution.TDistribution(dofT), + RandomSource.create(RandomSource.ISAAC)); + + // Triangular ("inverse method"). + final double aTriangle = -0.76543; + final double cTriangle = -0.65432; + final double bTriangle = -0.54321; + add(LIST, new org.apache.commons.math3.distribution.TriangularDistribution(aTriangle, cTriangle, bTriangle), + RandomSource.create(RandomSource.MT)); + + // Uniform ("inverse method"). + final double loUniform = -1.098; + final double hiUniform = 0.76; + add(LIST, new org.apache.commons.math3.distribution.UniformRealDistribution(loUniform, hiUniform), + RandomSource.create(RandomSource.TWO_CMRES)); + // Uniform. + add(LIST, new org.apache.commons.math3.distribution.UniformRealDistribution(loUniform, hiUniform), + new ContinuousUniformSampler(RandomSource.create(RandomSource.MT_64), loUniform, hiUniform)); + + // Weibull + final double alphaWeibull = 678.9; + final double betaWeibull = 98.76; + add(LIST, new org.apache.commons.math3.distribution.WeibullDistribution(alphaWeibull, betaWeibull), + RandomSource.create(RandomSource.WELL_44497_B)); } catch (Exception e) { System.err.println("Unexpected exception while creating the list of samplers: " + e); e.printStackTrace(System.err);