基于Python生成Scrambled Halton sequence
对生成思路的解释可以参考下面这篇文章,不过该作者给出的是普通Halton sequence,且基于java实现的.
Halton Sequence 原理和代码实现
普通Halton sequence在高维上会面临抽样相关性的问题,为了克服这种问题,我们就需要Scrambled Halton sequence,这种方法与普通Halton sequence的区别在于对断点进行了重新排序,这里我们采用Braaten, E.;Weller, G.(1979)所给出的排列组合.
具体文章参见:
[1]Braaten, E.;Weller, G…Improved low-discrepancy sequence for multidimensional quasi-Monte Carlo integration[J].J. Comput. Phys…
代码
这个版本的代码还有比较大的问题,因为采用进制转换的方法,导致无法在使用11作为其中一个base的情况下,计算超过10个元素.
一个可能的解决办法是用 S t + e i / p i S_{t}+e_{i}/p^i St+ei/pi这种方法来生成,难度应该也不大,为了偷懒我就不写了.
更多解释可以参考下面这本教材的第9章:
Kenneth E. Train, Discrete Choice Methods with Simulation, second edition, Cambridge University Press.
教材链接
# Author: LSY
# 由于有11作为质数,该程序只能在每个维度上计算不超过10个数
# 原因在于10在11进制下被转换为A,而A无法被替换为相应的数字进行计算
# 类似的还有11在12进制下被转换为B,等等.
import numpy as np
dict_pe = {
2: [0, 1],
3: [0