Class SmallMeanPoissonSampler
java.lang.Object
org.apache.commons.rng.sampling.distribution.SmallMeanPoissonSampler
- All Implemented Interfaces:
DiscreteSampler, SharedStateDiscreteSampler, SharedStateSampler<SharedStateDiscreteSampler>
Sampler for the Poisson distribution.
-
For small means, a Poisson process is simulated using uniform deviates, as described in
Knuth (1969). Seminumerical Algorithms. The Art of Computer Programming, Volume 2. Chapter 3.4.1.F.3 Important integer-valued distributions: The Poisson distribution. Addison Wesley.
The Poisson process (and hence, the returned value) is bounded by1000 * mean.
This sampler is suitable for mean < 40.
For large means, LargeMeanPoissonSampler should be used instead.
Sampling uses UniformRandomProvider.nextDouble() and requires on average
mean + 1 deviates per sample.
- Since:
- 1.1
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final intPre-compute1000 * meanas the upper limit of the sample.private final doublePre-computeMath.exp(-mean).private final UniformRandomProviderUnderlying source of randomness. -
Constructor Summary
ConstructorsModifierConstructorDescriptionSmallMeanPoissonSampler(UniformRandomProvider rng, double mean) Create an instance.privateSmallMeanPoissonSampler(UniformRandomProvider rng, double mean, double p0) Instantiates a new small mean poisson sampler.private -
Method Summary
Modifier and TypeMethodDescriptionprivate static doublecomputeP0(double mean) ComputeMath.exp(-mean).static SharedStateDiscreteSamplerof(UniformRandomProvider rng, double mean) Creates a new sampler for the Poisson distribution.intsample()Creates anintsample.toString()Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface DiscreteSampler
samples, samples
-
Field Details
-
p0
private final double p0Pre-computeMath.exp(-mean). Note: This is the probability of the Poisson sampleP(n=0). -
limit
private final int limitPre-compute1000 * meanas the upper limit of the sample. -
rng
Underlying source of randomness.
-
-
Constructor Details
-
SmallMeanPoissonSampler
Create an instance.- Parameters:
rng- Generator of uniformly distributed random numbers.mean- Mean.- Throws:
IllegalArgumentException- ifmean <= 0orMath.exp(-mean) == 0
-
SmallMeanPoissonSampler
Instantiates a new small mean poisson sampler.- Parameters:
rng- Generator of uniformly distributed random numbers.mean- Mean.p0-Math.exp(-mean).
-
SmallMeanPoissonSampler
- Parameters:
rng- Generator of uniformly distributed random numbers.source- Source to copy.
-
-
Method Details
-
sample
public int sample()Creates anintsample.- Specified by:
samplein interfaceDiscreteSampler- Returns:
- a sample.
-
toString
-
withUniformRandomProvider
Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.- Specified by:
withUniformRandomProviderin interfaceSharedStateSampler<SharedStateDiscreteSampler>- Parameters:
rng- Generator of uniformly distributed random numbers.- Returns:
- the sampler
- Since:
- 1.3
-
of
Creates a new sampler for the Poisson distribution.- Parameters:
rng- Generator of uniformly distributed random numbers.mean- Mean of the distribution.- Returns:
- the sampler
- Throws:
IllegalArgumentException- ifmean <= 0orMath.exp(-mean) == 0.- Since:
- 1.3
-
computeP0
private static double computeP0(double mean) ComputeMath.exp(-mean).This method exists to raise an exception before invocation of the private constructor; this mitigates Finalizer attacks (see SpotBugs CT_CONSTRUCTOR_THROW).
- Parameters:
mean- Mean.- Returns:
- the mean
- Throws:
IllegalArgumentException- ifmean <= 0orMath.exp(-mean) == 0
-