python中的确定性随机运算

时间:2019-02-06 16:41:19

标签: python-2.7

我进行了一系列操作,分别称为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() -> PcPa -> b() -> c() -> Pc是等效的-也就是说,我们不必再次执行 all 个操作。

您可以通过使用random.getstate()setstate()并将返回的PRNG状态存储在P的中间步骤中来执行此操作,但是getstate返回的对象非常笨拙。

建议相反,每个函数只是简单地递增 myseed并再次调用random.seed(myseed)。这样,您可以输出“种子”以用于下一步,并可以使用该种子和当前步骤的数据重新启动。

似乎它应该可以工作,但是以这种方式滥用random.seed()会对random的随机性有什么古怪(技术术语)吗?感觉有点不对,但是实际上初始种子是“随机的”,之后我们只需要(确定性地)遍历PRNG序列即可,所以我认为只要移至该序列中的位置就没有关系它与众不同。

0 个答案:

没有答案