You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2018/09/22 17:50:37 UTC
[5/8] commons-rng git commit: Merge branch 'master' of
git://github.com/apache/commons-rng into improvement-RNG-51
Merge branch 'master' of git://github.com/apache/commons-rng into improvement-RNG-51
Project: http://git-wip-us.apache.org/repos/asf/commons-rng/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rng/commit/21927cbc
Tree: http://git-wip-us.apache.org/repos/asf/commons-rng/tree/21927cbc
Diff: http://git-wip-us.apache.org/repos/asf/commons-rng/diff/21927cbc
Branch: refs/heads/master
Commit: 21927cbc3005e5a7f3a45c527597a5733d735b4d
Parents: 120d275 f559915
Author: aherbert <a....@sussex.ac.uk>
Authored: Fri Sep 21 14:55:37 2018 +0100
Committer: aherbert <a....@sussex.ac.uk>
Committed: Fri Sep 21 14:55:37 2018 +0100
----------------------------------------------------------------------
README.md | 2 +-
RELEASE-NOTES.txt | 99 ++++++
commons-rng-client-api/pom.xml | 5 +-
commons-rng-client-api/src/site/site.xml | 2 +
commons-rng-core/pom.xml | 6 +-
commons-rng-core/src/site/site.xml | 2 +
commons-rng-examples/examples-jmh/pom.xml | 4 +-
.../examples-jpms/jpms-app/pom.xml | 6 +-
.../examples-jpms/jpms-lib/pom.xml | 4 +-
commons-rng-examples/examples-jpms/pom.xml | 4 +-
commons-rng-examples/examples-jpms/runApp.sh | 2 +-
.../examples-quadrature/pom.xml | 4 +-
commons-rng-examples/examples-sampling/pom.xml | 4 +-
commons-rng-examples/examples-stress/pom.xml | 4 +-
commons-rng-examples/pom.xml | 10 +-
commons-rng-sampling/pom.xml | 8 +-
.../commons/rng/sampling/UnitSphereSampler.java | 13 +
.../AhrensDieterExponentialSampler.java | 15 +-
.../AhrensDieterMarsagliaTsangGammaSampler.java | 17 +-
.../distribution/BoxMullerGaussianSampler.java | 15 +-
.../distribution/BoxMullerLogNormalSampler.java | 27 +-
.../BoxMullerNormalizedGaussianSampler.java | 11 +-
.../sampling/distribution/ChengBetaSampler.java | 15 +-
...ousInverseCumulativeProbabilityFunction.java | 2 +
.../distribution/ContinuousSampler.java | 2 +
.../distribution/ContinuousUniformSampler.java | 11 +-
...eteInverseCumulativeProbabilityFunction.java | 2 +
.../sampling/distribution/DiscreteSampler.java | 2 +
.../distribution/DiscreteUniformSampler.java | 13 +-
.../InverseTransformContinuousSampler.java | 11 +-
.../InverseTransformDiscreteSampler.java | 11 +-
.../InverseTransformParetoSampler.java | 11 +-
.../distribution/LargeMeanPoissonSampler.java | 11 +-
.../MarsagliaNormalizedGaussianSampler.java | 11 +-
.../distribution/NormalizedGaussianSampler.java | 2 +
.../sampling/distribution/PoissonSampler.java | 7 +-
.../RejectionInversionZipfSampler.java | 9 +-
.../rng/sampling/distribution/SamplerBase.java | 5 +
.../distribution/SmallMeanPoissonSampler.java | 11 +-
.../ZigguratNormalizedGaussianSampler.java | 49 ++-
commons-rng-sampling/src/site/site.xml | 2 +
.../rng/sampling/UnitSphereSamplerTest.java | 23 ++
.../ZigguratNormalizedGaussianSamplerTest.java | 48 +++
commons-rng-simple/pom.xml | 6 +-
commons-rng-simple/src/site/site.xml | 2 +
dist-archive/pom.xml | 342 ++++++++++++-------
dist-archive/src/assembly/bin.xml | 13 +
dist-archive/src/assembly/src.xml | 9 +-
pom.xml | 51 ++-
src/assembly/bin.xml | 45 +--
src/assembly/src.xml | 42 +--
src/changes/changes.xml | 30 +-
.../release-notes/RELEASE-NOTES-1.0.txt | 22 ++
.../release-notes/RELEASE-NOTES-1.1.txt | 99 ++++++
src/site/site.xml | 1 +
src/site/xdoc/download_rng.xml | 28 +-
src/site/xdoc/release-history.xml | 38 +++
57 files changed, 918 insertions(+), 332 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rng/blob/21927cbc/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
----------------------------------------------------------------------
diff --cc commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
index f07eb94,6a70113..6604015
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
@@@ -100,13 -101,9 +103,13 @@@ public class LargeMeanPoissonSample
*/
public LargeMeanPoissonSampler(UniformRandomProvider rng,
double mean) {
- super(rng);
+ this.rng = rng;
if (mean <= 0) {
- throw new IllegalArgumentException(mean + " <= " + 0);
+ throw new IllegalArgumentException(mean + " <= " + 0);
+ }
+ // The algorithm is not valid if Math.floor(mean) is not an integer.
+ if (mean > Integer.MAX_VALUE) {
+ throw new IllegalArgumentException(mean + " > " + Integer.MAX_VALUE);
}
gaussian = new ZigguratNormalizedGaussianSampler(rng);
@@@ -249,155 -205,6 +252,155 @@@
/** {@inheritDoc} */
@Override
public String toString() {
- return "Large Mean Poisson deviate [" + super.toString() + "]";
+ return "Large Mean Poisson deviate [" + rng.toString() + "]";
}
+
+ /**
+ * Gets the initialisation state of the sampler.
+ *
+ * <p>The state is computed using an integer {@code lambda} value of
+ * {@code lambda = (int)Math.floor(mean)}.
+ *
+ * <p>The state will be suitable for reconstructing a new sampler with a mean
+ * in the range {@code lambda <= mean < lambda+1} using
+ * {@link #LargeMeanPoissonSampler(UniformRandomProvider, LargeMeanPoissonSamplerState, double)}.
+ *
+ * @return the state
+ */
+ LargeMeanPoissonSamplerState getState() {
+ return new LargeMeanPoissonSamplerState(lambda, logLambda, logLambdaFactorial,
+ delta, halfDelta, twolpd, p1, p2, c1);
+ }
+
+ /**
+ * Encapsulate the state of the sampler. The state is valid for construction of
+ * a sampler in the range {@code lambda <= mean < lambda+1}.
+ *
+ * <p>This class is immutable.
+ *
+ * @see #getLambda()
+ */
+ static final class LargeMeanPoissonSamplerState {
+ /** Algorithm constant {@code lambda}. */
+ private final double lambda;
+ /** Algorithm constant {@code logLambda}. */
+ private final double logLambda;
+ /** Algorithm constant {@code logLambdaFactorial}. */
+ private final double logLambdaFactorial;
+ /** Algorithm constant {@code delta}. */
+ private final double delta;
+ /** Algorithm constant {@code halfDelta}. */
+ private final double halfDelta;
+ /** Algorithm constant {@code twolpd}. */
+ private final double twolpd;
+ /** Algorithm constant {@code p1}. */
+ private final double p1;
+ /** Algorithm constant {@code p2}. */
+ private final double p2;
+ /** Algorithm constant {@code c1}. */
+ private final double c1;
+
+ /**
+ * Creates the state.
+ *
+ * <p>The state is valid for construction of a sampler in the range
+ * {@code lambda <= mean < lambda+1} where {@code lambda} is an integer.
+ *
+ * @param lambda the lambda
+ * @param logLambda the log lambda
+ * @param logLambdaFactorial the log lambda factorial
+ * @param delta the delta
+ * @param halfDelta the half delta
+ * @param twolpd the two lambda plus delta
+ * @param p1 the p1 constant
+ * @param p2 the p2 constant
+ * @param c1 the c1 constant
+ */
+ private LargeMeanPoissonSamplerState(double lambda, double logLambda,
+ double logLambdaFactorial, double delta, double halfDelta, double twolpd,
+ double p1, double p2, double c1) {
+ this.lambda = lambda;
+ this.logLambda = logLambda;
+ this.logLambdaFactorial = logLambdaFactorial;
+ this.delta = delta;
+ this.halfDelta = halfDelta;
+ this.twolpd = twolpd;
+ this.p1 = p1;
+ this.p2 = p2;
+ this.c1 = c1;
+ }
+
+ /**
+ * Get the lambda value for the state.
+ *
+ * <p>Equal to {@code floor(mean)} for a Poisson sampler.
+ * @return the lambda value
+ */
+ int getLambda() {
+ return (int) getLambdaRaw();
+ }
+
+ /**
+ * @return algorithm constant {@code lambda}
+ */
+ double getLambdaRaw() {
+ return lambda;
+ }
+
+ /**
+ * @return algorithm constant {@code logLambda}
+ */
+ double getLogLambda() {
+ return logLambda;
+ }
+
+ /**
+ * @return algorithm constant {@code logLambdaFactorial}
+ */
+ double getLogLambdaFactorial() {
+ return logLambdaFactorial;
+ }
+
+ /**
+ * @return algorithm constant {@code delta}
+ */
+ double getDelta() {
+ return delta;
+ }
+
+ /**
+ * @return algorithm constant {@code halfDelta}
+ */
+ double getHalfDelta() {
+ return halfDelta;
+ }
+
+ /**
+ * @return algorithm constant {@code twolpd}
+ */
+ double getTwolpd() {
+ return twolpd;
+ }
+
+ /**
+ * @return algorithm constant {@code p1}
+ */
+ double getP1() {
+ return p1;
+ }
+
+ /**
+ * @return algorithm constant {@code p2}
+ */
+ double getP2() {
+ return p2;
+ }
+
+ /**
+ * @return algorithm constant {@code c1}
+ */
+ double getC1() {
+ return c1;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/commons-rng/blob/21927cbc/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
----------------------------------------------------------------------
diff --cc commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
index 8bab0f0,246d2cf..2889108
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
@@@ -35,16 -35,15 +35,19 @@@ import org.apache.commons.rng.UniformRa
* </blockquote>
* </li>
* </ul>
+ *
+ * @since 1.0
*/
public class PoissonSampler
+ extends SamplerBase
implements DiscreteSampler {
- /** Value for switching sampling algorithm. */
- private static final double PIVOT = 40;
+ /**
+ * Value for switching sampling algorithm.
+ *
+ * <p>Package scope for the {@link PoissonSamplerCache}.
+ */
+ static final double PIVOT = 40;
/** The internal Poisson sampler. */
private final DiscreteSampler poissonSampler;