存储随机状态
Posted
技术标签:
【中文标题】存储随机状态【英文标题】:Storing a Random state 【发布时间】:2015-09-27 13:58:02 【问题描述】:我正在设计一个程序:
-
包括随机性
可以在某些点停止执行并保存其状态(在 XML 中)
可以从保存的状态开始执行
是确定性的(因此程序可以从相同的状态运行两次并产生相同的结果)
这里的问题是保存随机性。我可以在开始时对其进行初始化,但从一个状态到另一个状态,我可能会生成 0 到 1000 个随机数。
因此,我可以看到 3 个选项:
-
存储种子,以及随机生成数字的次数,然后在加载状态时,多次运行随机数生成器。
在状态保存时,将种子增加 N
状态保存时,随机生成下一个种子
选项 1 的问题在于运行时间,而且非常不可行。
但是,我不确定 2 或 3 是否会产生良好的随机结果。如果我运行两个随机生成器,一个以 X 为种子,另一个以 X+1 为种子,它们的结果会有多大不同?如果第一个用 X 播种,第二个用 X.random() 播种怎么办?
以防万一,我使用的是 Python 3。
【问题讨论】:
【参考方案1】:您可以使用 random.getstate()
保存 PRNG 的状态(然后,例如,使用 pickle
将其保存到磁盘。稍后,random.setstate(state)
将使您的 PRNG 恢复到它所处的状态。
【讨论】:
在numpy.random
中,此函数相应地称为 get_state
和 set_state
。以上是关于存储随机状态的主要内容,如果未能解决你的问题,请参考以下文章