PRNG(比如Mersenne Twister)中有多少个状态,下一个状态的分布是什么



对于周期为2^19937-1的Mersenne Twister这样的PRNG, PRNG是否有那么多状态?也就是说,状态在那个点开始重复因为PRNG没有更多的状态了?

接下来,假设你的PRNG存在于某个当前状态,下一个状态的分布是什么?我正在运行长时间的模拟,并有兴趣找出使用随机种子的一个模拟何时可能会运行到使用不同随机种子的另一个模拟中存在的状态。

伪随机数生成器(Pseudo-Random Number Generators, prng)通过对当前状态应用确定性函数来确定下一个状态,然后将该状态投影到返回位的数量上。问"如果你在当前状态下退出,下一个状态的分布是什么"本质上是没有意义的。由于转换是确定性的,任何给定的状态都有且只有一个状态将成为下一个状态。最终,你将不可避免地回到之前观察到的状态,从那个点开始,这些状态和它们相应的输出投影将以相同的顺序重复,我们说你的PRNG已经循环了。周期长度取决于从起始点(种子状态)可到达的唯一状态的数量,并且受状态空间大小的限制,但不一定等于状态空间的大小。例如,有些函数如果由偶数作为种子,只会产生偶数,如果由奇数作为种子,只会产生奇数。这两种情况都不能在重复之前产生所有可能的整数。

Mersenne Twister通过拥有一个包含19937位的状态空间来实现219937-1的周期长度。(如果我没记错的话,-1是因为所有0的状态都无法从任何其他非零状态到达。)至于在两次运行中出现重叠状态的可能性,还是算了吧。为了让你了解219937-1有多大,请考虑以下内容:物理学家估计在已知的宇宙中大约有1080 = 2266个亚原子粒子。如果您使用全状态初始化独立地播种您的运行(例如,通过从/dev/random读取2.5KB到字节缓冲区),即使您使用1010随机数,您也会问与您恰好从219937-300宇宙中两次选择相同亚原子粒子的可能性相当。这是不可能的。

相关内容

最新更新