Scrambled Halton Sequence(扰乱霍尔顿序列) 基于Python的代码实现

基于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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值