Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id BA69C200BDB for ; Mon, 12 Dec 2016 17:27:31 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id B94D0160B22; Mon, 12 Dec 2016 16:27:31 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 84DD2160B4E for ; Mon, 12 Dec 2016 17:27:27 +0100 (CET) Received: (qmail 53703 invoked by uid 500); 12 Dec 2016 16:27:26 -0000 Mailing-List: contact notifications-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list notifications@commons.apache.org Received: (qmail 53449 invoked by uid 99); 12 Dec 2016 16:27:26 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Dec 2016 16:27:26 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 19D1B3A3B26 for ; Mon, 12 Dec 2016 16:27:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1002658 [34/35] - in /websites/production/commons/content/proper/commons-rng: ./ commons-rng-client-api/ commons-rng-client-api/apidocs/ commons-rng-client-api/apidocs/org/apache/commons/rng/ commons-rng-client-api/apidocs/org/apache/commo... Date: Mon, 12 Dec 2016 16:27:20 -0000 To: notifications@commons.apache.org From: erans@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20161212162725.19D1B3A3B26@svn01-us-west.apache.org> archived-at: Mon, 12 Dec 2016 16:27:31 -0000 Modified: websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.html ============================================================================== --- websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.html (original) +++ websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.html Mon Dec 12 16:27:09 2016 @@ -27,125 +27,123 @@ 19 import org.apache.commons.rng.UniformRandomProvider; 20 21 /** -22 * <p> -23 * Sampling from the <a href="http://mathworld.wolfram.com/GammaDistribution.html">Gamma distribution</a>. -24 * <ul> -25 * <li> -26 * For {@code 0 < shape < 1}: -27 * <blockquote> -28 * Ahrens, J. H. and Dieter, U., -29 * <i>Computer methods for sampling from gamma, beta, Poisson and binomial distributions,</i> -30 * Computing, 12, 223-246, 1974. -31 * </blockquote> -32 * </li> -33 * <li> -34 * For {@code shape >= 1}: -35 * <blockquote> -36 * Marsaglia and Tsang, <i>A Simple Method for Generating -37 * Gamma Variables.</i> ACM Transactions on Mathematical Software, -38 * Volume 26 Issue 3, September, 2000. -39 * </blockquote> -40 * </li> -41 * </ul> -42 * </p> -43 */ -44 public class AhrensDieterMarsagliaTsangGammaSampler -45 extends SamplerBase -46 implements ContinuousSampler { -47 /** The shape parameter. */ -48 private final double theta; -49 /** The alpha parameter. */ -50 private final double alpha; -51 /** Gaussian sampling. */ -52 private final BoxMullerGaussianSampler gaussian; -53 -54 /** -55 * @param rng Generator of uniformly distributed random numbers. -56 * @param alpha Alpha parameter of the distribution. -57 * @param theta Theta parameter of the distribution. -58 */ -59 public AhrensDieterMarsagliaTsangGammaSampler(UniformRandomProvider rng, -60 double alpha, -61 double theta) { -62 super(rng); -63 this.alpha = alpha; -64 this.theta = theta; -65 gaussian = new BoxMullerGaussianSampler(rng, 0, 1); -66 } -67 -68 /** {@inheritDoc} */ -69 @Override -70 public double sample() { -71 if (theta < 1) { -72 // [1]: p. 228, Algorithm GS. -73 -74 while (true) { -75 // Step 1: -76 final double u = nextDouble(); -77 final double bGS = 1 + theta / Math.E; -78 final double p = bGS * u; -79 -80 if (p <= 1) { -81 // Step 2: -82 -83 final double x = Math.pow(p, 1 / theta); -84 final double u2 = nextDouble(); -85 -86 if (u2 > Math.exp(-x)) { -87 // Reject. -88 continue; -89 } else { -90 return alpha * x; -91 } -92 } else { -93 // Step 3: -94 -95 final double x = -1 * Math.log((bGS - p) / theta); -96 final double u2 = nextDouble(); -97 -98 if (u2 > Math.pow(x, theta - 1)) { -99 // Reject. -100 continue; -101 } else { -102 return alpha * x; -103 } -104 } -105 } -106 } +22 * Sampling from the <a href="http://mathworld.wolfram.com/GammaDistribution.html">Gamma distribution</a>. +23 * <ul> +24 * <li> +25 * For {@code 0 < shape < 1}: +26 * <blockquote> +27 * Ahrens, J. H. and Dieter, U., +28 * <i>Computer methods for sampling from gamma, beta, Poisson and binomial distributions,</i> +29 * Computing, 12, 223-246, 1974. +30 * </blockquote> +31 * </li> +32 * <li> +33 * For {@code shape >= 1}: +34 * <blockquote> +35 * Marsaglia and Tsang, <i>A Simple Method for Generating +36 * Gamma Variables.</i> ACM Transactions on Mathematical Software, +37 * Volume 26 Issue 3, September, 2000. +38 * </blockquote> +39 * </li> +40 * </ul> +41 */ +42 public class AhrensDieterMarsagliaTsangGammaSampler +43 extends SamplerBase +44 implements ContinuousSampler { +45 /** The shape parameter. */ +46 private final double theta; +47 /** The alpha parameter. */ +48 private final double alpha; +49 /** Gaussian sampling. */ +50 private final BoxMullerGaussianSampler gaussian; +51 +52 /** +53 * @param rng Generator of uniformly distributed random numbers. +54 * @param alpha Alpha parameter of the distribution. +55 * @param theta Theta parameter of the distribution. +56 */ +57 public AhrensDieterMarsagliaTsangGammaSampler(UniformRandomProvider rng, +58 double alpha, +59 double theta) { +60 super(rng); +61 this.alpha = alpha; +62 this.theta = theta; +63 gaussian = new BoxMullerGaussianSampler(rng, 0, 1); +64 } +65 +66 /** {@inheritDoc} */ +67 @Override +68 public double sample() { +69 if (theta < 1) { +70 // [1]: p. 228, Algorithm GS. +71 +72 while (true) { +73 // Step 1: +74 final double u = nextDouble(); +75 final double bGS = 1 + theta / Math.E; +76 final double p = bGS * u; +77 +78 if (p <= 1) { +79 // Step 2: +80 +81 final double x = Math.pow(p, 1 / theta); +82 final double u2 = nextDouble(); +83 +84 if (u2 > Math.exp(-x)) { +85 // Reject. +86 continue; +87 } else { +88 return alpha * x; +89 } +90 } else { +91 // Step 3: +92 +93 final double x = -1 * Math.log((bGS - p) / theta); +94 final double u2 = nextDouble(); +95 +96 if (u2 > Math.pow(x, theta - 1)) { +97 // Reject. +98 continue; +99 } else { +100 return alpha * x; +101 } +102 } +103 } +104 } +105 +106 // Now theta >= 1. 107 -108 // Now theta >= 1. -109 -110 final double d = theta - 0.333333333333333333; -111 final double c = 1 / (3 * Math.sqrt(d)); -112 -113 while (true) { -114 final double x = gaussian.sample(); -115 final double v = (1 + c * x) * (1 + c * x) * (1 + c * x); -116 -117 if (v <= 0) { -118 continue; -119 } -120 -121 final double x2 = x * x; -122 final double u = nextDouble(); -123 -124 // Squeeze. -125 if (u < 1 - 0.0331 * x2 * x2) { -126 return alpha * d * v; -127 } -128 -129 if (Math.log(u) < 0.5 * x2 + d * (1 - v + Math.log(v))) { -130 return alpha * d * v; -131 } -132 } -133 } -134 -135 /** {@inheritDoc} */ -136 @Override -137 public String toString() { -138 return "Ahrens-Dieter-Marsaglia-Tsang Gamma deviate [" + super.toString() + "]"; -139 } -140 } +108 final double d = theta - 0.333333333333333333; +109 final double c = 1 / (3 * Math.sqrt(d)); +110 +111 while (true) { +112 final double x = gaussian.sample(); +113 final double v = (1 + c * x) * (1 + c * x) * (1 + c * x); +114 +115 if (v <= 0) { +116 continue; +117 } +118 +119 final double x2 = x * x; +120 final double u = nextDouble(); +121 +122 // Squeeze. +123 if (u < 1 - 0.0331 * x2 * x2) { +124 return alpha * d * v; +125 } +126 +127 if (Math.log(u) < 0.5 * x2 + d * (1 - v + Math.log(v))) { +128 return alpha * d * v; +129 } +130 } +131 } +132 +133 /** {@inheritDoc} */ +134 @Override +135 public String toString() { +136 return "Ahrens-Dieter-Marsaglia-Tsang Gamma deviate [" + super.toString() + "]"; +137 } +138 }
Modified: websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/ContinuousInverseCumulativeProbabilityFunction.html ============================================================================== --- websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/ContinuousInverseCumulativeProbabilityFunction.html (original) +++ websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/ContinuousInverseCumulativeProbabilityFunction.html Mon Dec 12 16:27:09 2016 @@ -35,8 +35,8 @@ 27 * For a random variable {@code X} distributed according to this distribution, 28 * the returned value is 29 * <ul> -30 * <li>\( \inf_{x \in \mathcal{R}} P(X \le x) \ge p \) for \( 0 < p \le 1 \)</li> -31 * <li>\( \inf_{x \in \mathcal{R}} P(X \le x) > 0 \) for \( p = 0 \)</li> +30 * <li>\( \inf_{x \in \mathcal{R}} P(X \le x) \ge p \) for \( 0 \lt p \le 1 \)</li> +31 * <li>\( \inf_{x \in \mathcal{R}} P(X \le x) \gt 0 \) for \( p = 0 \)</li> 32 * </ul> 33 * 34 * @param p Cumulative probability. Modified: websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/DiscreteInverseCumulativeProbabilityFunction.html ============================================================================== --- websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/DiscreteInverseCumulativeProbabilityFunction.html (original) +++ websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/DiscreteInverseCumulativeProbabilityFunction.html Mon Dec 12 16:27:09 2016 @@ -35,8 +35,8 @@ 27 * For a random variable {@code X} distributed according to this distribution, 28 * the returned value is 29 * <ul> -30 * <li>\( \inf_{x \in \mathcal{Z}} P(X \le x) \ge p \) for \( 0 < p \le 1 \)</li> -31 * <li>\( \inf_{x \in \mathcal{Z}} P(X \le x) > 0 \) for \( p = 0 \)</li> +30 * <li>\( \inf_{x \in \mathcal{Z}} P(X \le x) \ge p \) for \( 0 \lt p \le 1 \)</li> +31 * <li>\( \inf_{x \in \mathcal{Z}} P(X \le x) \gt 0 \) for \( p = 0 \)</li> 32 * </ul> 33 * 34 * @param p Cumulative probability. Modified: websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InternalGamma.html ============================================================================== --- websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InternalGamma.html (original) +++ websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InternalGamma.html Mon Dec 12 16:27:09 2016 @@ -121,7 +121,7 @@ 113 114 final double sum = lanczos(x); 115 final double tmp = x + LANCZOS_G + 0.5; -116 return ((x + 0.5) * Math.log(tmp)) - tmp + HALF_LOG_2_PI + Math.log(sum / x); +116 return (x + 0.5) * Math.log(tmp) - tmp + HALF_LOG_2_PI + Math.log(sum / x); 117 } 118 119 /** Modified: websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.html ============================================================================== --- websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.html (original) +++ websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.html Mon Dec 12 16:27:09 2016 @@ -31,64 +31,62 @@ 23 * <a href="https://en.wikipedia.org/wiki/Inverse_transform_sampling"> 24 * inversion method</a>. 25 * -26 * <p> -27 * It can be used to sample any distribution that provides access to its -28 * <em>inverse cumulative probabilty function</em>. -29 * </p> -30 * -31 * <p>Example:</p> -32 * <pre><source> -33 * import org.apache.commons.math3.distribution.RealDistribution; -34 * import org.apache.commons.math3.distribution.ChiSquaredDistribution; -35 * -36 * import org.apache.commons.rng.simple.RandomSource; -37 * import org.apache.commons.rng.sampling.ContinuousSampler; -38 * import org.apache.commons.rng.sampling.distribution.InverseTransformContinuousSampler; -39 * import org.apache.commons.rng.sampling.distribution.ContinuousInverseCumulativeProbabilityFunction; -40 * -41 * // Distribution to sample. -42 * final RealDistribution dist = new ChiSquaredDistribution(9); -43 * // Create the sampler. -44 * final ContinuousSampler chiSquareSampler = -45 * new InverseTransformContinuousSampler(RandomSource.create(RandomSource.MT), -46 * new ContinuousInverseCumulativeProbabilityFunction() { -47 * public double inverseCumulativeProbability(double p) { -48 * return dist.inverseCumulativeProbability(p); -49 * } -50 * }); -51 * -52 * // Generate random deviate. -53 * double random = chiSquareSampler.sample(); -54 * </source></pre> -55 */ -56 public class InverseTransformContinuousSampler -57 extends SamplerBase -58 implements ContinuousSampler { -59 /** Inverse cumulative probability function. */ -60 private final ContinuousInverseCumulativeProbabilityFunction function; -61 -62 /** -63 * @param rng Generator of uniformly distributed random numbers. -64 * @param function Inverse cumulative probability function. -65 */ -66 public InverseTransformContinuousSampler(UniformRandomProvider rng, -67 ContinuousInverseCumulativeProbabilityFunction function) { -68 super(rng); -69 this.function = function; -70 } -71 -72 /** {@inheritDoc} */ -73 @Override -74 public double sample() { -75 return function.inverseCumulativeProbability(nextDouble()); -76 } -77 -78 /** {@inheritDoc} */ -79 @Override -80 public String toString() { -81 return function.toString() + " (inverse method) [" + super.toString() + "]"; -82 } -83 } +26 * It can be used to sample any distribution that provides access to its +27 * <em>inverse cumulative probabilty function</em>. +28 * +29 * <p>Example:</p> +30 * <pre><code> +31 * import org.apache.commons.math3.distribution.RealDistribution; +32 * import org.apache.commons.math3.distribution.ChiSquaredDistribution; +33 * +34 * import org.apache.commons.rng.simple.RandomSource; +35 * import org.apache.commons.rng.sampling.distribution.ContinuousSampler; +36 * import org.apache.commons.rng.sampling.distribution.InverseTransformContinuousSampler; +37 * import org.apache.commons.rng.sampling.distribution.ContinuousInverseCumulativeProbabilityFunction; +38 * +39 * // Distribution to sample. +40 * final RealDistribution dist = new ChiSquaredDistribution(9); +41 * // Create the sampler. +42 * final ContinuousSampler chiSquareSampler = +43 * new InverseTransformContinuousSampler(RandomSource.create(RandomSource.MT), +44 * new ContinuousInverseCumulativeProbabilityFunction() { +45 * public double inverseCumulativeProbability(double p) { +46 * return dist.inverseCumulativeProbability(p); +47 * } +48 * }); +49 * +50 * // Generate random deviate. +51 * double random = chiSquareSampler.sample(); +52 * </code></pre> +53 */ +54 public class InverseTransformContinuousSampler +55 extends SamplerBase +56 implements ContinuousSampler { +57 /** Inverse cumulative probability function. */ +58 private final ContinuousInverseCumulativeProbabilityFunction function; +59 +60 /** +61 * @param rng Generator of uniformly distributed random numbers. +62 * @param function Inverse cumulative probability function. +63 */ +64 public InverseTransformContinuousSampler(UniformRandomProvider rng, +65 ContinuousInverseCumulativeProbabilityFunction function) { +66 super(rng); +67 this.function = function; +68 } +69 +70 /** {@inheritDoc} */ +71 @Override +72 public double sample() { +73 return function.inverseCumulativeProbability(nextDouble()); +74 } +75 +76 /** {@inheritDoc} */ +77 @Override +78 public String toString() { +79 return function.toString() + " (inverse method) [" + super.toString() + "]"; +80 } +81 }
Modified: websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.html ============================================================================== --- websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.html (original) +++ websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.html Mon Dec 12 16:27:09 2016 @@ -31,64 +31,62 @@ 23 * <a href="https://en.wikipedia.org/wiki/Inverse_transform_sampling"> 24 * inversion method</a>. 25 * -26 * <p> -27 * It can be used to sample any distribution that provides access to its -28 * <em>inverse cumulative probabilty function</em>. -29 * </p> -30 * -31 * <p>Example:</p> -32 * <pre><source> -33 * import org.apache.commons.math3.distribution.IntegerDistribution; -34 * import org.apache.commons.math3.distribution.BinomialDistribution; -35 * -36 * import org.apache.commons.rng.simple.RandomSource; -37 * import org.apache.commons.rng.sampling.DiscreteSampler; -38 * import org.apache.commons.rng.sampling.distribution.InverseTransformDiscreteSampler; -39 * import org.apache.commons.rng.sampling.distribution.DiscreteInverseCumulativeProbabilityFunction; -40 * -41 * // Distribution to sample. -42 * final IntegerDistribution dist = new BinomialDistribution(11, 0.56); -43 * // Create the sampler. -44 * final DiscreteSampler binomialSampler = -45 * new InverseTransformDiscreteSampler(RandomSource.create(RandomSource.MT), -46 * new DiscreteInverseCumulativeProbabilityFunction() { -47 * public int inverseCumulativeProbability(double p) { -48 * return dist.inverseCumulativeProbability(p); -49 * } -50 * }); -51 * -52 * // Generate random deviate. -53 * int random = binomialSampler.sample(); -54 * </source></pre> -55 */ -56 public class InverseTransformDiscreteSampler -57 extends SamplerBase -58 implements DiscreteSampler { -59 /** Inverse cumulative probability function. */ -60 private final DiscreteInverseCumulativeProbabilityFunction function; -61 -62 /** -63 * @param rng Generator of uniformly distributed random numbers. -64 * @param function Inverse cumulative probability function. -65 */ -66 public InverseTransformDiscreteSampler(UniformRandomProvider rng, -67 DiscreteInverseCumulativeProbabilityFunction function) { -68 super(rng); -69 this.function = function; -70 } -71 -72 /** {@inheritDoc} */ -73 @Override -74 public int sample() { -75 return function.inverseCumulativeProbability(nextDouble()); -76 } -77 -78 /** {@inheritDoc} */ -79 @Override -80 public String toString() { -81 return function.toString() + " (inverse method) [" + super.toString() + "]"; -82 } -83 } +26 * It can be used to sample any distribution that provides access to its +27 * <em>inverse cumulative probabilty function</em>. +28 * +29 * <p>Example:</p> +30 * <pre><code> +31 * import org.apache.commons.math3.distribution.IntegerDistribution; +32 * import org.apache.commons.math3.distribution.BinomialDistribution; +33 * +34 * import org.apache.commons.rng.simple.RandomSource; +35 * import org.apache.commons.rng.sampling.distribution.DiscreteSampler; +36 * import org.apache.commons.rng.sampling.distribution.InverseTransformDiscreteSampler; +37 * import org.apache.commons.rng.sampling.distribution.DiscreteInverseCumulativeProbabilityFunction; +38 * +39 * // Distribution to sample. +40 * final IntegerDistribution dist = new BinomialDistribution(11, 0.56); +41 * // Create the sampler. +42 * final DiscreteSampler binomialSampler = +43 * new InverseTransformDiscreteSampler(RandomSource.create(RandomSource.MT), +44 * new DiscreteInverseCumulativeProbabilityFunction() { +45 * public int inverseCumulativeProbability(double p) { +46 * return dist.inverseCumulativeProbability(p); +47 * } +48 * }); +49 * +50 * // Generate random deviate. +51 * int random = binomialSampler.sample(); +52 * </code></pre> +53 */ +54 public class InverseTransformDiscreteSampler +55 extends SamplerBase +56 implements DiscreteSampler { +57 /** Inverse cumulative probability function. */ +58 private final DiscreteInverseCumulativeProbabilityFunction function; +59 +60 /** +61 * @param rng Generator of uniformly distributed random numbers. +62 * @param function Inverse cumulative probability function. +63 */ +64 public InverseTransformDiscreteSampler(UniformRandomProvider rng, +65 DiscreteInverseCumulativeProbabilityFunction function) { +66 super(rng); +67 this.function = function; +68 } +69 +70 /** {@inheritDoc} */ +71 @Override +72 public int sample() { +73 return function.inverseCumulativeProbability(nextDouble()); +74 } +75 +76 /** {@inheritDoc} */ +77 @Override +78 public String toString() { +79 return function.toString() + " (inverse method) [" + super.toString() + "]"; +80 } +81 }
Modified: websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.html ============================================================================== --- websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.html (original) +++ websites/production/commons/content/proper/commons-rng/xref/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.html Mon Dec 12 16:27:09 2016 @@ -43,8 +43,8 @@ 35 * @param shape Shape of the distribution. 36 */ 37 public InverseTransformParetoSampler(UniformRandomProvider rng, -38 double scale, -39 double shape) { +38 double scale, +39 double shape) { 40 super(rng); 41 this.scale = scale; 42 this.shape = shape;