哈尔顿#
- class scipy.stats.qmc.Halton(d, *, scramble=True, optimization=None, seed=None)[源代码][源代码]#
Halton 序列。
伪随机数生成器,它将 Van der Corput 序列推广到多维。Halton 序列在第一维度使用以二为基的 Van der Corput 序列,在第二维度使用以三为基的序列,在第 \(n\) 维度使用以 \(n\) 为基的序列。
- 参数:
- d整数
参数空间的维度。
- 打乱bool, 可选
如果为 True,则使用 Owen 打乱。否则不进行打乱。默认值为 True。
- 优化{None, “random-cd”, “lloyd”}, 可选
是否使用优化方案来提高采样后的质量。请注意,这是一个后处理步骤,不保证样本的所有属性都将被保留。默认值为 None。
random-cd
: 坐标随机排列以降低中心差异。基于中心差异的最佳样本不断更新。与使用其他差异度量相比,基于中心差异的采样在2D和3D子投影方面表现出更好的空间填充鲁棒性。lloyd
: 使用改进的Lloyd-Max算法扰动样本。该过程收敛于等间距的样本。
Added in version 1.10.0.
- 种子 : {None, int,
numpy.random.Generator
}, 可选{None, int,} 如果 seed 是 int 或 None,将使用
np.random.default_rng(seed)
创建一个新的numpy.random.Generator
。如果 seed 已经是Generator
实例,则使用提供的实例。
方法
fast_forward
(n)将序列快进 n 个位置。
integers
(l_bounds, *[, u_bounds, n, ...])从 l_bounds`(包含)到 `u_bounds`(不包含)之间抽取 `n 个整数,或者如果 endpoint=True,则从 `l_bounds`(包含)到 `u_bounds`(包含)之间抽取。
random
([n, workers])在半开区间
[0, 1)
中绘制 n。reset
()将引擎重置为基础状态。
注释
Halton 序列在维度稍大时会出现严重的条纹伪影。这些可以通过打乱来缓解。打乱还支持基于复制的误差估计,并扩展了无界积分的适用性。
参考文献
[1]Halton, “关于在评估多维积分中使用某些准随机点序列的效率”, Numerische Mathematik, 1960.
[2]A. B. Owen. “A randomized Halton algorithm in 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]])