类 HaltonSequenceGenerator

java.lang.Object
org.hipparchus.random.HaltonSequenceGenerator
所有已实现的接口:
RandomVectorGenerator

public class HaltonSequenceGenerator extends Object implements RandomVectorGenerator
Halton序列的实现。

Halton序列是一种低差异性序列,根据[0, 1]区间生成点,如下所示:

   H(n) = d_0 / b + d_1 / b^2 .... d_j / b^j+1

   其中

   n = d_j * b^j-1 + ... d_1 * b + d_0 * b^0
 
对于更高维度,后续的质数被用作基数,例如{2, 3, 5}用于R^3中的Halton序列。

已知Halton序列在较大的质数下会出现线性相关性,因此通常会对各个数字进行混淆。此实现已经支持高达40维的最佳权重数字,参考 H. Chi: Scrambled quasirandom sequences and their applications

生成器支持两种模式:

另请参阅:
  • 构造器概要

    构造器
    构造器
    说明
    HaltonSequenceGenerator(int dimension)
    为给定的空间维度构造一个新的Halton序列生成器。
    HaltonSequenceGenerator(int dimension, int[] bases, int[] weights)
    使用给定的基数和每个维度的权重构造一个新的Halton序列生成器。
  • 方法概要

    修饰符和类型
    方法
    说明
    int
    返回下一个将通过调用nextVector()返回的Halton序列中的点的索引i。
    double[]
    生成一个随机向量。
    protected int
    scramble(int i, int j, int b, int digit)
    根据以下公式执行数字d_j的混淆:
    double[]
    skipTo(int index)
    跳转到Halton序列中的第i个点。

    从类继承的方法 java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造器详细资料

    • HaltonSequenceGenerator

      public HaltonSequenceGenerator(int dimension) throws MathIllegalArgumentException
      为给定的空间维度构造一个新的Halton序列生成器。
      参数:
      dimension - 空间维度
      抛出:
      MathIllegalArgumentException - 如果空间维度超出允许的范围[1, 40]
    • HaltonSequenceGenerator

      public HaltonSequenceGenerator(int dimension, int[] bases, int[] weights) throws MathIllegalArgumentException, NullArgumentException
      使用给定的基数和每个维度的权重构造一个新的Halton序列生成器。基数数组的长度定义了空间维度,必须大于0。
      参数:
      dimension - 空间维度
      bases - 每个维度的基数,条目应为(两两)互质,不得为null
      weights - 混淆过程中使用的权重,如果为null,则不执行混淆
      抛出:
      NullArgumentException - 如果基数为null
      MathIllegalArgumentException - 如果空间维度超出基数数组长度的范围[1, len],其中len是基数数组的长度
      MathIllegalArgumentException - 如果权重不为null且输入数组的长度不同
  • 方法详细资料

    • nextVector

      public double[] nextVector()
      生成一个随机向量。
      指定者:
      nextVector 在接口中 RandomVectorGenerator
      返回:
      作为双精度数组的随机向量。
    • scramble

      protected int scramble(int i, int j, int b, int digit)
      根据以下公式执行数字d_j的混淆:
         ( weight_i * d_j ) mod base
       
      实现可以重写此方法以执行不同的混淆。
      参数:
      i - 维度索引
      j - 数字索引
      b - 此维度的基数
      digit - 第j个数字
      返回:
      混淆后的数字
    • skipTo

      public double[] skipTo(int index) throws MathIllegalArgumentException
      跳转到Halton序列中的第i个点。

      此操作可在O(1)内完成。

      参数:
      index - 要跳转到的序列中的索引
      返回:
      Halton序列中的第i个点
      抛出:
      MathIllegalArgumentException - 如果索引小于0
    • getNextIndex

      public int getNextIndex()
      返回下一个将通过调用nextVector()返回的Halton序列中的点的索引i。
      返回:
      下一个点的索引