【发布时间】:2014-01-11 05:12:18
【问题描述】:
我正在我的应用程序中调整 Mersenne Twister,特别是来自 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html 的 mt19937ar.c - 代码反映在 https://gist.github.com/mstum/8367363 上
这在游戏中用作确定性 RNG,为了使保存游戏按预期工作,我需要从 MT 中取出当前种子(而不是初始种子),以便我可以继续。
例如,假设我用12345 的种子初始化它并调用genrand_int31 5 次。这产生了序列1996335345, 1911592690, 679411342, 280691776, 394962642。
现在,假设我在第三个数字 (679411342) 之后保存了游戏,然后重新加载并获得两个随机数字。我希望这些数字成为序列的下两个数字 (280691776, 394962642),为此我需要知道第三次迭代后的种子。
作为一种解决方法,我有初始种子和我调用 RNG 的次数,所以现在加载游戏会用初始种子启动 MT 并“重播”genrand_int31,但有数百或数千次次 - 这有点愚蠢:)
我尝试简单地使用mt[N] 数组的第一个元素,但这确实行不通。不幸的是,我不太了解 Mersenne Twister 背后的数学原理,无法弄清楚它的实际运行情况。
【问题讨论】: