我进行了一系列操作,分别称为a()
,b()
,c()
等,这些操作会修改某些数据P
。在内部,每个函数都使用random
中的函数。尽管我们希望P
中的随机性,但我们希望如果我们运行相同的操作,可以再次生成相同的P,所以我们确定一个以like this开头的种子:
myseed = random.randrange(sys.maxsize)
print 'seed:', myseed
random.seed(myseed)
我对所有这些都感到满意,但我们也希望能够从中间数据“重新开始”计算,以便例如我们运行P -> a() -> Pa
,然后P -> a() -> b() -> c() -> Pc
和Pa -> b() -> c() -> Pc
是等效的-也就是说,我们不必再次执行 all 个操作。
您可以通过使用random.getstate()
和setstate()
并将返回的PRNG状态存储在P
的中间步骤中来执行此操作,但是getstate返回的对象非常笨拙。
建议相反,每个函数只是简单地递增 myseed
并再次调用random.seed(myseed)
。这样,您可以输出“种子”以用于下一步,并可以使用该种子和当前步骤的数据重新启动。
似乎它应该可以工作,但是以这种方式滥用random.seed()
会对random
的随机性有什么古怪(技术术语)吗?感觉有点不对,但是实际上初始种子是“随机的”,之后我们只需要(确定性地)遍历PRNG序列即可,所以我认为只要移至该序列中的位置就没有关系它与众不同。