Class GuideTableDiscreteSampler
- java.lang.Object
-
- org.apache.commons.rng.sampling.distribution.GuideTableDiscreteSampler
-
- All Implemented Interfaces:
DiscreteSampler
,SharedStateDiscreteSampler
,SharedStateSampler<SharedStateDiscreteSampler>
public final class GuideTableDiscreteSampler extends Object implements SharedStateDiscreteSampler
Compute a sample fromn
values each with an associated probability. If all unique items are assigned the same probability it is more efficient to use theDiscreteUniformSampler
.The cumulative probability distribution is searched using a guide table to set an initial start point. This implementation is based on:
Devroye, Luc (1986). Non-Uniform Random Variate Generation. New York: Springer-Verlag. Chapter 3.2.4 "The method of guide tables" p. 96.
The size of the guide table can be controlled using a parameter. A larger guide table will improve performance at the cost of storage space.
Sampling uses
UniformRandomProvider.nextDouble()
.- Since:
- 1.3
- See Also:
- Discrete probability distribution (Wikipedia)
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static SharedStateDiscreteSampler
of(UniformRandomProvider rng, double[] probabilities)
Create a new sampler for an enumerated distribution using the givenprobabilities
.static SharedStateDiscreteSampler
of(UniformRandomProvider rng, double[] probabilities, double alpha)
Create a new sampler for an enumerated distribution using the givenprobabilities
.int
sample()
Creates a sample.String
toString()
SharedStateDiscreteSampler
withUniformRandomProvider(UniformRandomProvider rng)
Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.
-
-
-
Method Detail
-
sample
public int sample()
Creates a sample.- Specified by:
sample
in interfaceDiscreteSampler
- Returns:
- a sample.
-
withUniformRandomProvider
public SharedStateDiscreteSampler withUniformRandomProvider(UniformRandomProvider rng)
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:
withUniformRandomProvider
in interfaceSharedStateSampler<SharedStateDiscreteSampler>
- Parameters:
rng
- Generator of uniformly distributed random numbers.- Returns:
- the sampler
-
of
public static SharedStateDiscreteSampler of(UniformRandomProvider rng, double[] probabilities)
Create a new sampler for an enumerated distribution using the givenprobabilities
. The samples corresponding to each probability are assumed to be a natural sequence starting at zero.The size of the guide table is
probabilities.length
.- Parameters:
rng
- Generator of uniformly distributed random numbers.probabilities
- The probabilities.- Returns:
- the sampler
- Throws:
IllegalArgumentException
- ifprobabilities
is null or empty, a probability is negative, infinite orNaN
, or the sum of all probabilities is not strictly positive.
-
of
public static SharedStateDiscreteSampler of(UniformRandomProvider rng, double[] probabilities, double alpha)
Create a new sampler for an enumerated distribution using the givenprobabilities
. The samples corresponding to each probability are assumed to be a natural sequence starting at zero.The size of the guide table is
alpha * probabilities.length
.- Parameters:
rng
- Generator of uniformly distributed random numbers.probabilities
- The probabilities.alpha
- The alpha factor used to set the guide table size.- Returns:
- the sampler
- Throws:
IllegalArgumentException
- ifprobabilities
is null or empty, a probability is negative, infinite orNaN
, the sum of all probabilities is not strictly positive, oralpha
is not strictly positive.
-
-