我正在我的应用程序中适应Mersenne Twister,具体来说是从http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html的
例如,假设我使用种子
现在,想象一下,在第三个数字(
作为一种解决方法,我有最初的种子和我调用随机数生成器(genrand_int31)的次数,因此现在加载游戏会使用初始种子启动MT,并“重放”
我试图简单地使用
mt19937ar.c
- 代码在https://gist.github.com/mstum/8367363上做了镜像。这被用作游戏中的确定性随机数生成器,并且为了使保存游戏按预期工作,我需要从MT中获取当前种子(而不是最初的种子),以便我可以继续进行。例如,假设我使用种子
12345
初始化它,并调用genrand_int31
5次。这将产生序列1996335345、1911592690、679411342、280691776、394962642
。现在,想象一下,在第三个数字(
679411342
)之后,我保存了游戏,然后重新加载并获得两个随机数。我希望这些数字是序列的下两个数字(280691776、394962642
),为此我需要知道第三轮迭代后的种子。作为一种解决方法,我有最初的种子和我调用随机数生成器(genrand_int31)的次数,因此现在加载游戏会使用初始种子启动MT,并“重放”
genrand_int31
多少个几百或几千次——这有点愚蠢:)我试图简单地使用
mt[N]
数组的第一个元素,但那真的行不通。不幸的是,我不理解Mersenne Twister背后的数学原理,以找出它实际上是如何工作的。