Package org.hipparchus.random
Class HaltonSequenceGenerator
- java.lang.Object
-
- org.hipparchus.random.HaltonSequenceGenerator
-
- All Implemented Interfaces:
RandomVectorGenerator
public class HaltonSequenceGenerator extends Object implements RandomVectorGenerator
Implementation of a Halton sequence.A Halton sequence is a low-discrepancy sequence generating points in the interval [0, 1] according to
H(n) = d_0 / b + d_1 / b^2 .... d_j / b^j+1 with n = d_j * b^j-1 + ... d_1 * b + d_0 * b^0
For higher dimensions, subsequent prime numbers are used as base, e.g. { 2, 3, 5 } for a Halton sequence in R^3.Halton sequences are known to suffer from linear correlation for larger prime numbers, thus the individual digits are usually scrambled. This implementation already comes with support for up to 40 dimensions with optimal weight numbers from H. Chi: Scrambled quasirandom sequences and their applications.
The generator supports two modes:
- sequential generation of points:
nextVector()
- random access to the i-th point in the sequence:
skipTo(int)
-
-
Constructor Summary
Constructors Constructor Description HaltonSequenceGenerator(int dimension)
Construct a new Halton sequence generator for the given space dimension.HaltonSequenceGenerator(int dimension, int[] bases, int[] weights)
Construct a new Halton sequence generator with the given base numbers and weights for each dimension.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
getNextIndex()
Returns the index i of the next point in the Halton sequence that will be returned by callingnextVector()
.double[]
nextVector()
Generate a random vector.protected int
scramble(int i, int j, int b, int digit)
Performs scrambling of digitd_j
according to the formula:double[]
skipTo(int index)
Skip to the i-th point in the Halton sequence.
-
-
-
Constructor Detail
-
HaltonSequenceGenerator
public HaltonSequenceGenerator(int dimension) throws MathIllegalArgumentException
Construct a new Halton sequence generator for the given space dimension.- Parameters:
dimension
- the space dimension- Throws:
MathIllegalArgumentException
- if the space dimension is outside the allowed range of [1, 40]
-
HaltonSequenceGenerator
public HaltonSequenceGenerator(int dimension, int[] bases, int[] weights) throws MathIllegalArgumentException, NullArgumentException
Construct a new Halton sequence generator with the given base numbers and weights for each dimension. The length of the bases array defines the space dimension and is required to be > 0.- Parameters:
dimension
- the space dimensionbases
- the base number for each dimension, entries should be (pairwise) prime, may not be nullweights
- the weights used during scrambling, may be null in which case no scrambling will be performed- Throws:
NullArgumentException
- if base is nullMathIllegalArgumentException
- if the space dimension is outside the range [1, len], where len refers to the length of the bases arrayMathIllegalArgumentException
- if weights is non-null and the length of the input arrays differ
-
-
Method Detail
-
nextVector
public double[] nextVector()
Generate a random vector.- Specified by:
nextVector
in interfaceRandomVectorGenerator
- Returns:
- a random vector as an array of double.
-
scramble
protected int scramble(int i, int j, int b, int digit)
Performs scrambling of digitd_j
according to the formula:( weight_i * d_j ) mod base
Implementations can override this method to do a different scrambling.- Parameters:
i
- the dimension indexj
- the digit indexb
- the base for this dimensiondigit
- the j-th digit- Returns:
- the scrambled digit
-
skipTo
public double[] skipTo(int index) throws MathIllegalArgumentException
Skip to the i-th point in the Halton sequence.This operation can be performed in O(1).
- Parameters:
index
- the index in the sequence to skip to- Returns:
- the i-th point in the Halton sequence
- Throws:
MathIllegalArgumentException
- if index < 0
-
getNextIndex
public int getNextIndex()
Returns the index i of the next point in the Halton sequence that will be returned by callingnextVector()
.- Returns:
- the index of the next point
-
-