随机数发生器,梅森扭扭器

这是关于MATLAB随机数生成器的多部分系列的第一部分。

内容

控制

在MATLAB的任何最新版本中,如果在任何时刻发出以下命令,总是会得到这个图。

rng默认的1)嘘(randn(10000年,100年)

rng控件所使用的随机数生成器兰德randn,兰迪功能。当被召唤默认的参数,rng将生成器重置为新的MATLAB启动时的状态。要查看这个条件是什么,只需调用rng本身。

rng
ans = Type: 'twister' Seed: 0 State: [625x1 uint32]

我们看到默认的生成器是“旋风”,默认种子是0,状态是长度为625向量的32位无符号整数。

如果你要求帮助提高,你会得到很多信息,包括有三个现代发电机的事实。

发电机的描述  ------------------------------------------------------ ' 捻线机的梅森素数捻线机combRecursive“合并多个递归”multFibonacci“乘法滞后斐波那契

今天余下的文章是关于“旋风”.我将在以后的帖子中介绍其他内容。

梅森素数捻线机

梅森Twister是目前最流行的伪随机数生成器。它被广泛分布的数学软件包所使用。自MATLAB被发明以来,它就作为一个选项可用,并且在近十年中一直是默认的。

梅森扭扭器是由广岛大学的松本诚和西村拓二教授在大约20年前开发的。这是他们的主页.C源代码是可以在这里

梅森素数

梅森素数就是这种形式的素数2 ^ p - 1在哪里p本身是质数。它们是以一位在17世纪早期研究过它们的法国修士的名字命名的。我们从维基百科了解到,已知的最大质数是梅森质数p等于57885161。梅森扭扭乐p等于19937。这对于梅森素数来说是很小的,但对于随机数生成器来说是很大的。

为什么名字?

Matsumoto解释了“梅森扭扭”这个名字是如何在梅森扭扭的主页上出现的。

由于历史原因,MT首次被命名为“原语扭曲广义反馈移位寄存器序列”。Makoto: Knuth教授在信中说:“名字很拗口。”Takuji : ........Makoto:嗨,Takkun,“Mersenne Twister”怎么样?因为它使用梅森素数,并且它表明它有它的祖先Twisted GFSR。Takuji:嗯。Makoto:听起来像喷气式过山车,所以它听起来非常快,容易记忆,也容易发音。此外,虽然它是一个秘密,它隐藏在它的名字的缩写发明者。Takuji:……Makoto:来吧,让我们用MT! Takuji: ....well, affirmative. Later, we got a letter from Prof. Knuth saying "it sounds a nice name." :-)

算法

梅森twister算法的整数部分不涉及任何加法、减法、乘法或除法意义上的算术。所有的操作都是移位,和,或,和。

状态的所有元素,除了最后一个元素,都是32位的无符号随机整数,它们形成一个缓存,在启动时小心生成。这一代由a触发种子,一个启动整个进程的整数。

状态的最后一个元素是一个指向缓存的指针。每次对随机整数的请求都会导致从缓存中提取一个元素,并增加指针。元素通过额外的逻辑操作进行了“调整”,以提高随机性。当指针到达缓存的末尾时,缓存将被另外623个元素填充。

通过研究置换和回火操作的群论性质,对算法进行了分析。参数的选择使周期为梅森素数2^19937-1。这个周期比之前或之后提出的任何其他随机数生成器都要长得多,这也是MT流行的原因之一。

通过设计,产生的结果在一个623维立方体中满足均分性质。

双打

这是梅森扭扭器中的函数源代码将一对随机uint32s转换为一个随机double。你可以看到它把一个整型数的前27位和另一个整型数的前26位,放在一起,然后乘以MATLAB调用的函数eps / 2.这是代码中唯一涉及到浮点运算的地方。

Double genrand_res53(void) {unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6;返回(* 67108864.0 + b) * (1.0/9007199254740992.0);}

在极不可能的情况下,两者都是一个b为零。如果发生这种情况,MATLAB接口拒绝该结果并再次调用该函数。所以最小的双精度结果是一个= 0b等于1。最大的双重结果当两者一个b都是1。因此,从兰德在封闭区间内

$$ 2^{-53} \leq x \leq 1-2^{-53} $$

种子,溪流和国家

想了解更多关于随机数种子、流和州的信息,请参见Peter Perkins,客座博主罗兰的博客.当然,你看的文档

谢谢

感谢彼得·珀金斯多年来为我们的随机数套件所做的工作,并启发了我。

参考文献

M.松本和T.西村。梅森扭体:一个623维等分布均匀伪随机数发生器计算机学报,29(1):1 - 7。1998.网上:< http://www.math.sci.hiroshima-u.ac.jp/ m-mat每公吨/文章/ mt.pdf>。




发布与MATLAB®R2014b

|

评论

请点击留言在这里登录到您的MathWorks帐户或创建一个新帐户。