梅森旋转(Mersenne twister)及其他随机数生成算法

Mersenne Twister这个名字来自周期长度通常取Mersenne质数这样一个事实。常见的有两个变种Mersenne Twister MT19937和Mersenne Twister MT19937-64。

Mersenne Twister算法的原理:Mersenne Twister算法是利用线性反馈移位寄存器(LFSR)产生随机数的,LFSR的反馈函数是寄存器中某些位的简单异或,这些位也称之为抽头序列。一个n位的LFSR能够在重复之前产生2^n-1位长的伪随机序列。只有具有一定抽头序列的LFSR才能通过所有2^n-1个内部状态,产生2^n - 1位长的伪随机序列,这个输出的序列就称之为m序列。为了使LFSR成为最大周期的LFSR,由抽头序列加上常数1形成的多项式必须是本原多项式。一个n阶本原多项式是不可约多项式,它能整除x^(2*n-1)+1而不能整除x^d+1,其中d能整除2^n-1。例如(32,7,5,3,2,1,0)是指本原多项式x^32+x^7+x^5+x^3+x^2+x+1,把它转化为最大周期LFSR就是在LFSR的第32,7,5,2,1位抽头。利用上述两种方法产生周期为m的伪随机序列后,只需要将产生的伪随机序列除以序列的周期,就可以得到(0,1)上均匀分布的伪随机序列了。

Mersenne Twister有以下优点:随机性好,在计算机上容易实现,占用内存较少(mt19937的C程式码执行仅需624个字的工作区域),与其它已使用的伪随机数发生器相比,产生随机数的速度快、周期长,可达到2^19937-1,且具有623维均匀分布的性质,对于一般的应用来说,足够大了,序列关联比较小,能通过很多随机性测试。

马特赛特旋转演算法产生一个伪随机数,一般为MtRand()。

  • 应用范围:

Mersenne Twister 被以下软件用作默认 PRNG:

编程语言:Dyalog APLIDLRRubyFree PascalPHPPython (在NumPy中也可用,但默认改为PCG64从 1.17 版开始), Julia CMU Common Lisp , Embeddable Common Lisp , Steel Bank Common Lisp 

Linux库和软件:GLibGNU 多精度算术库GNU OctaveGNU 科学库

其他:Microsoft ExcelGAUSSgretlStataSageMath , Scilab , Maple , MATLAB

它也可用于Apache Commons、标准C++库(自C++11起)中的Mathematica中。[33]许多程序库都提供了附加实现,包括Boost C++ 库 CUDA 库NAG 数值库

Mersenne Twister 是SPSS中的两个 PRNG 之一:另一个生成器仅用于与旧程序兼容,并且 Mersenne Twister 被称为“更可靠”。Mersenne Twister 同样是SAS中的 PRNG 之一:其他生成器较旧且已弃用。Mersenne Twister 是Stata中的默认 PRNG ,另一个是KISS,用于与旧版本的 Stata 兼容。

  • 主页

Mersenne Twister: A random number generator (since 1997/10)

http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/TINYMT/index.html#tiny

  • 代码下载

目前最新版本为TinyMTgithub

其他还有MTGP

SFMT

  • 替代品

PCGgithub),

  • 其他随机数产生器性能对比:

  • 参考资料:

PCG, A Family of Better Random Number Generators | PCG, A Better Random Number Generator

https://en.wikipedia.org/wiki/Mersenne_Twister

控制随机数生成器 - MATLAB rng- MathWorks 中国

创建和控制随机数流- MATLAB & Simulink- MathWorks 中国

更换不推荐的 rand 和 randn 语法- MATLAB & Simulink- MathWorks 中国

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值