【发布时间】:2016-10-19 14:41:33
【问题描述】:
我在 python 中有一个非常大的模拟,有很多模块。我调用了很多随机函数。为了保持相同的随机结果,我有一个变量 keep_seed_random。
这样:
import random
keep_seed_random = True
if keep_seed_random is False:
fixed_seed = random.Random(0)
else:
fixed_seed = random
然后我在整个程序中使用fixed_seed,比如
fixed_seed.choice(['male', 'female'])
fixed_seed.randint()
fixed_seed.gammavariate(3, 3)
fixed_seed.random()
fixed_seed.randrange(20, 40)
等等……
它曾经运作良好。 但是现在,程序太大,有其他干扰,结果不再相同,即使我选择 keep_seed_random = False
我的问题是 Python 中是否还有其他我遗漏的随机性来源?
附:我只随机导入一次。
已编辑
我们一直在努力确定程序从完全相同的结果转变为不同结果的确切时刻。似乎是在我们引入大量读取数据库而不连接随机模块的时候。
结果现在在两个相似的结果中交替出现。 也就是说,我运行 main.py 一次得到 GDP 的 8148.78 的结果 我再次运行我得到 7851.49 再次返回 8148.78 再次 7851.49
对于工作版本,在更改之前,第一个结果(当我们创建实例并 pickle 保存它们时)我得到一个结果。然后,从第二个开始,结果都是一样的。所以,我猜它与泡菜阅读/加载有关。
问题依然存在!
第二次编辑
我们部分发现了问题。 问题是当我们创建实例和pickle转储然后pickle加载时。
对于创建和加载,我们仍然无法获得完全相同的结果。 但是,当重复加载时,结果是准确的。
因此,问题出在 PICKLE 转储和加载时可能会发生一些随机化(我猜)。
谢谢,
【问题讨论】:
-
我会尝试缩小程序范围以找到可以重现问题的最少代码。这个问题很难以现在的方式回答。
-
我知道。这才是重点。我不知道随机性可能来自哪里......谢谢@mart0903
-
好话。我看了!但在视频示例中,它适用于一个非常具体的问题。这对我来说可能是不同的......
标签: python random deterministic