如果我们用一个负整数[种子]开始调用函数 ran2,它将产生一系列随机数。如果使用相同的种子,序列可以完全重新生成。
现在我的问题是,有没有一种方法可以让我们直接进入序列中的某个点,然后从那个点开始继续?例如,如果某个种子的随机数是0.35,0.32,0.44,0.32,0.66,0.32,0.45。
如果我们知道这个种子产生了这个序列,有没有办法让函数返回0.66,然后从这个点开始继续?
我想使用它的方式是在模拟中。如果我的模拟在某一点结束,我需要重新启动它,我应该继续使用相同的随机数序列,谢谢。
我同意 @dirkgently 的上述评论。虽然我不熟悉 ran2
具体来说,基于 此示例代码 看起来有一些有状态的部件(idum
, idum2
, iy
和 iv
),可以封装出来并存储。当你 "暂停 "你的模拟时,你可以保存这个状态,并把它写回到 ran2
引擎,下次启动时。恢复状态信息应该会让机器回到它离开的地方,并且随机序列可以恢复。这可能需要稍微修改一下 ran2
代码本身,但应该不是一个很难的变化折叠。