【发布时间】:2014-06-05 22:42:02
【问题描述】:
对于像 Mersenne Twister 这样的周期为 2^19937-1 的 PRNG,PRNG 有那么多状态吗?即,由于 PRNG 没有更多的状态可以进入,所以状态开始重复?
作为后续,假设您存在于 PRNG 的某个当前状态,下一个状态的分布是什么?我正在运行长时间的模拟,并有兴趣了解使用随机种子的一个模拟何时可能会进入另一个使用不同随机种子的模拟中存在的状态。
【问题讨论】:
对于像 Mersenne Twister 这样的周期为 2^19937-1 的 PRNG,PRNG 有那么多状态吗?即,由于 PRNG 没有更多的状态可以进入,所以状态开始重复?
作为后续,假设您存在于 PRNG 的某个当前状态,下一个状态的分布是什么?我正在运行长时间的模拟,并有兴趣了解使用随机种子的一个模拟何时可能会进入另一个使用不同随机种子的模拟中存在的状态。
【问题讨论】:
伪随机数生成器 (PRNG) 的工作原理是将确定性函数应用于当前状态以确定下一个状态,然后将该状态投影到返回位数上。询问“如果您以当前状态退出,下一个状态的分布是什么”基本上没有意义。由于转换是确定性的,因此从任何给定的状态来看,只有一个状态将成为下一个状态。最终,您将不可避免地回到某个先前观察到的状态,从那时起,这些状态及其相应的输出投影将以相同的顺序重复,我们说您的 PRNG 已经循环。循环长度取决于从您的起点(种子状态)可以达到多少个唯一状态,并且受状态空间大小限制但不一定等于状态空间大小。例如,有些函数只在以偶数为种子时才产生偶数,或在以奇数为种子时才产生奇数。这两种情况都不会在重复之前产生所有可能的整数。
Mersenne Twister 通过具有 19937 位的状态空间实现了 219937-1 的循环长度。 (如果我没记错的话,-1 是因为从任何其他非零状态都无法到达全 0 的状态。)至于两次运行中重叠状态的可能性,忘记它。为了让您了解 219937-1 有多大,请考虑以下几点:物理学家估计大约有 1080 = 2266已知宇宙中的亚原子粒子。如果您使用完整状态初始化独立播种运行(例如,通过从 /dev/random 读取 2.5KB 到字节缓冲区中),即使您使用 1010 个随机数,您也是询问您在 219937-300 宇宙中两次拾取同一个亚原子粒子的可能性有多大。它只是不会发生。
【讨论】: