T
- type of the elements in the sample space.public class EnumeratedDistribution<T>
extends java.lang.Object
implements java.io.Serializable
A generic implementation of a discrete probability distribution (Wikipedia) over a finite sample space, based on an enumerated list of <value, probability> pairs. Input probabilities must all be non-negative, but zero values are allowed and their sum does not have to equal one. Constructors will normalize input probabilities to make them sum to one.
The list of
Modifier and Type | Field and Description |
---|---|
private double[] |
cumulativeProbabilities
Cumulative probabilities, cached to speed up sampling.
|
private double[] |
probabilities
Probabilities of respective random variable values.
|
protected RandomGenerator |
random
RNG instance used to generate samples from the distribution.
|
private static long |
serialVersionUID
Serializable UID.
|
private java.util.List<T> |
singletons
List of random variable values.
|
Constructor and Description |
---|
EnumeratedDistribution(java.util.List<Pair<T,java.lang.Double>> pmf)
Create an enumerated distribution using the given probability mass function
enumeration.
|
EnumeratedDistribution(RandomGenerator rng,
java.util.List<Pair<T,java.lang.Double>> pmf)
Create an enumerated distribution using the given random number generator
and probability mass function enumeration.
|
Modifier and Type | Method and Description |
---|---|
java.util.List<Pair<T,java.lang.Double>> |
getPmf()
Return the probability mass function as a list of
|
(package private) double |
probability(T x)
For a random variable
X whose values are distributed according to
this distribution, this method returns P(X = x) . |
void |
reseedRandomGenerator(long seed)
Reseed the random generator used to generate samples.
|
T |
sample()
Generate a random value sampled from this distribution.
|
java.lang.Object[] |
sample(int sampleSize)
Generate a random sample from the distribution.
|
T[] |
sample(int sampleSize,
T[] array)
Generate a random sample from the distribution.
|
private static final long serialVersionUID
protected final RandomGenerator random
private final java.util.List<T> singletons
private final double[] probabilities
private final double[] cumulativeProbabilities
public EnumeratedDistribution(java.util.List<Pair<T,java.lang.Double>> pmf) throws NotPositiveException, MathArithmeticException, NotFiniteNumberException, NotANumberException
Note: this constructor will implicitly create an instance of
Well19937c
as random generator to be used for sampling only (see
sample()
and sample(int)
). In case no sampling is
needed for the created distribution, it is advised to pass null
as random generator via the appropriate constructors to avoid the
additional initialisation overhead.
pmf
- probability mass function enumerated as a list of NotPositiveException
- if any of the probabilities are negative.NotFiniteNumberException
- if any of the probabilities are infinite.NotANumberException
- if any of the probabilities are NaN.MathArithmeticException
- all of the probabilities are 0.public EnumeratedDistribution(RandomGenerator rng, java.util.List<Pair<T,java.lang.Double>> pmf) throws NotPositiveException, MathArithmeticException, NotFiniteNumberException, NotANumberException
rng
- random number generator.pmf
- probability mass function enumerated as a list of NotPositiveException
- if any of the probabilities are negative.NotFiniteNumberException
- if any of the probabilities are infinite.NotANumberException
- if any of the probabilities are NaN.MathArithmeticException
- all of the probabilities are 0.public void reseedRandomGenerator(long seed)
seed
- the new seeddouble probability(T x)
For a random variable X
whose values are distributed according to
this distribution, this method returns P(X = x)
. In other words,
this method represents the probability mass function (PMF) for the
distribution.
Note that if x1
and x2
satisfy x1.equals(x2)
,
or both are null, then probability(x1) = probability(x2)
.
x
- the point at which the PMF is evaluatedx
public java.util.List<Pair<T,java.lang.Double>> getPmf()
Return the probability mass function as a list of
Note that if duplicate and / or null values were provided to the constructor when creating this EnumeratedDistribution, the returned list will contain these values. If duplicates values exist, what is returned will not represent a pmf (i.e., it is up to the caller to consolidate duplicate mass points).
public T sample()
public java.lang.Object[] sample(int sampleSize) throws NotStrictlyPositiveException
sampleSize
- the number of random values to generate.NotStrictlyPositiveException
- if sampleSize
is not
positive.public T[] sample(int sampleSize, T[] array) throws NotStrictlyPositiveException
If the requested samples fit in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this collection.
sampleSize
- the number of random values to generate.array
- the array to populate.NotStrictlyPositiveException
- if sampleSize
is not positive.NullArgumentException
- if array
is null