存储随机状态

Nat*_*ill 4 python random

我正在设计一个程序,它:

  1. 包括随机性
  2. 可以在某些点停止执行并保存其状态(在 XML 中)
  3. 可以从保存的状态开始执行
  4. 是确定性的(因此程序可以从同一状态运行两次并产生相同的结果)

这里的问题是保存随机性。我可以在开始时初始化它,但从一个状态到另一个状态,我可能会生成 0 到 1000 个随机数。

因此,我可以看到 3 个选项:

  1. 存储种子,以及随机生成数字的次数,然后在加载状态时,多次运行随机数生成器。
  2. 在状态保存时,将种子增加 N
  3. 状态保存时,随机生成下一个种子

选项 1 的问题是运行时间,并且非常不可行。

但是,我不确定 2 或 3 是否会产生良好的随机结果。如果我运行两个随机生成器,一个以 X 为种子,另一个以 X+1 为种子,它们的结果会有多大不同?如果第一个以 X 为种子,第二个以 X.random() 为种子怎么办?

以防万一,我使用的是 Python 3。

Chr*_*mer 5

您可以使用random.getstate()( 然后,例如,使用pickle将其保存到磁盘。稍后, arandom.setstate(state)将您的 PRNG 返回到它所处的状态。

  • 在 `numpy.random` 中,这个函数被相应地称为 `get_state` 和 `set_state`。 (4认同)