scipy.stats.qmc.Halton

class scipy.stats.qmc.Halton(d, *, scramble=True, seed=None)[源代码]

Halton序列。

伪随机数生成器,将范德科普特序列推广到多维。Halton序列的第一维使用基数为2的范德科普特序列,第二维和基数为基数为3的范德科普特序列 -\(n\) 因为它是n维的。

参数
d集成

参数空间的维度。

scramble布尔值,可选

如果为True,则使用Owen置乱。否则不会进行加扰。默认值为True。

seed :{无,整型, numpy.random.Generator },可选{无,整型,

如果 seed 是不是没有 numpy.random.Generator 使用的是Singleton。如果 seed 是一个整型、一个新的 Generator 实例,其种子设定为 seed 。如果 seed 已经是一个 Generator 实例,则使用该实例。

注意事项

即使对于较大的维度,Halton序列也有严重的条带伪影。这些都可以通过加扰来改善。加扰还支持基于复制的误差估计,并将适用性扩展到无界被积。

参考文献

1

哈尔顿,“论某些准随机点序列在计算多维积分时的效率”,Numerische Mahematik,1960。

2

A·B·欧文。“R中的随机哈尔顿算法”,arxiv:1706.02808,2017年。

示例

从Halton的低偏差序列生成样本。

>>> from scipy.stats import qmc
>>> sampler = qmc.Halton(d=2, scramble=False)
>>> sample = sampler.random(n=5)
>>> sample
array([[0.        , 0.        ],
       [0.5       , 0.33333333],
       [0.25      , 0.66666667],
       [0.75      , 0.11111111],
       [0.125     , 0.44444444]])

使用差异标准计算样本质量。

>>> qmc.discrepancy(sample)
0.088893711419753

如果有些人想继续现有的设计,可以通过再次调用来获得额外的积分 random 。或者,您可以跳过一些点,如:

>>> _ = sampler.fast_forward(5)
>>> sample_continued = sampler.random(n=5)
>>> sample_continued
array([[0.3125    , 0.37037037],
       [0.8125    , 0.7037037 ],
       [0.1875    , 0.14814815],
       [0.6875    , 0.48148148],
       [0.4375    , 0.81481481]])

最后,可以将样本按比例缩放到边界。

>>> l_bounds = [0, 2]
>>> u_bounds = [10, 5]
>>> qmc.scale(sample_continued, l_bounds, u_bounds)
array([[3.125     , 3.11111111],
       [8.125     , 4.11111111],
       [1.875     , 2.44444444],
       [6.875     , 3.44444444],
       [4.375     , 4.44444444]])

方法:

fast_forward \(n)

通过以下方式快进序列 n 位置。

random \([n, workers] )

n 在半开间隔内 [0, 1)

reset \()

将引擎重置为基本状态。