random - Mersenne Twister 的特征 - 19937

标签 random prng

我有一个很简单的问题: 当我们使用 Mersenne Twister -19937 生成器并修复种子时,每次调用生成器时,它都会生成具有某些特征(独立性、均匀分布)的数字序列。这里重要的是独立性(或 2 个连续调用之间的低相关性)。

现在,如果我有两个带有不同(但固定)种子的 Mersenne Twister -19937 实例,并且我调用每个生成器一次,会发生什么情况。我在这种情况下得到的两组随机数的独立性,相关性结构如何?

非常感谢

最佳答案

“保证”不再存在。很可能有一个随机生成器为两个不同的种子生成完全相同的值。

除非您依赖随机性的某些行为,否则这不是问题。重点当然是密码学 - 密码随机数生成器非常努力地尝试非常随机,即使你例如。并行运行 10 个发电机。然而,这种做法违背了可重复性的目的(例如,程序生成等)。

然而,这两个生成器确实独立地保持它们的保证。这意味着只要它们不“交互”(例如,游戏中的两个区域,每个区域都有自己的发电机),随机性就会保持不变。

一个好的经验法则是测试它(除非随机性很重要,否则它就是数学:))。绘制图表。在现实世界中找出答案:)

编辑:由于您已经添加了特定算法,所以让我稍微扩展一下答案。 Mersenne twister 是相当随机的。然而,随机性在很大程度上取决于初始值。对于某些种子,即使有几个并行生成器,它也可以产生非常随机的值。对于某些种子,结果彼此非常接近。正如维基指出的那样:

A consequence of this is that two instances of the generator, started with initial states that are almost the same, will output nearly the same sequence for many iterations before eventually diverging.

关于random - Mersenne Twister 的特征 - 19937,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22374726/

相关文章:

c++ - 如何在 C++11 RNG 初始状态的本地和全局设置之间切换?

Java 随机数生成器

C++ boost 多个对象中的普通随机数

c - 在 C 中无法理解此 PRNG 代码

python - 在 python 中使用不同参数的包装函数

c - 猜随机数冷热游戏输出

当使用 "L' Ecuyer-CMRG"RNG 时,R 不会重置种子?

c - c/Unix 中的多个随机数生成器状态

c# - 等概率范围内的随机数