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
\()将引擎重置为基本状态。