存储随机状态

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_stateset_state

以上是关于存储随机状态的主要内容,如果未能解决你的问题,请参考以下文章

虚拟机的迁移和资源分配

[专项]tcp状态机(很好)

Unity有限状态机编写

什么叫做状态?状态机由哪五个部分组成

深信服asv集群管理配置

在不使用 iostream 的情况下保存 c++11 随机生成器的状态