伪随机数生成算法


Answers:


10

在R中,用于随机数生成的默认设置为:

  1. 对于U(0,1),请使用Mersenne-Twister算法
  2. 对于高斯数,请使用标准正态分布函数的数值反演。

您可以轻松地检查此内容,即。

> RNGkind()
[1] "Mersenne-Twister" "Inversion"

可以将默认生成器更改为其他PRNG,例如Super-Duper,Wichmann-Hill,Marsaglia-Multicarry或什至由用户提供的PRNG。有关更多详细信息,请参见?RNGkind。我从来不需要更改默认的PRNG。

默认情况下,C GSL库还使用Mersenne-Twister


您确定第二点是通过反转CDF生成正常的随机变量吗?正常CDF的倒数是一个相当昂贵的评估函数。我想Box-Muller的方法会更快。Marsaglia的用于生成法线的ziggurat方法仍然更快。
约翰·D·库克

我也觉得这很可疑。Marsaglia的Ziggurat是Matlab中的默认设置,我无法想象Matlab在随机数生成领域要优于R。
shabbychef

@John确实,R中提供了Polar方法,请参见setRNG包。
chl


3

由George Marsaglia设计的Xorshift PNG。它的周期(2 ^ 128-1)比Mersenne-Twister短得多,但是该算法实现起来非常简单,非常适合并行化。在许多核心架构(例如DSP芯片和Nvidia的Tesla)上表现良好。


这对在GPU上实现是否有好处?链接到细节,参考?
DarenW,2010年

2
Thomas,Howes,Luk-2009年-比较CPU,GPU,FPGA和大规模并行处理器阵列以生成随机数。doi.acm.org/10.1145/1508128.1508139。在CPU,GPU,FPGA和大规模并行处理器阵列上执行的一组PNG的讨论和基准。
brotchie 2010年

也许还有多个流的L'Ecuyer的RNG(j.mp/bzJSlm)?
chl

3

http://prng.di.unimi.it/上,您可以找到使用TestU01测试的几个随机数发生器的枪战,TestU01是现代的伪随机数发生器测试套件,它替代了diehard和dieharder。您可以选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.