我试图通过Toby Segaran的"编程集体智慧"第11章中的遗传编程代码获得可重现的结果.但是,简单地设置种子"random.seed(55)"似乎不起作用,将原始代码"从随机导入...."改为"导入随机"没有帮助,也没有改变Random().这些似乎都做了大致相同的事情,树木开始构建相同,然后发散.
在阅读关于随机行为的各种条目时,鉴于他的GP代码,我找不到为什么会发生这种分歧的原因.除了调用random之外,代码中似乎没有任何内容,它具有可解释此行为的任何可变性.我的理解是调用random.seed()应该正确设置所有调用,因为代码根本没有线程,我不确定分歧是如何或为什么发生的.
是否有人修改此代码以表现可重复?是否有某种形式的调用random.seed()可以更好地工作?
我为没有发布示例而道歉,但代码显然不是我的(我只添加对种子的调用并改变代码中调用random的方式)这似乎不是随机的简单问题(我我已经在这里随机阅读了Python上的所有条目,并在网上阅读了很多条目.
谢谢.马克L.
我刚才有一些完全不相关的代码遇到了同样的问题。我相信我的解决方案类似于 eryksun 的答案,尽管我没有任何树。我确实有一些集合,我正在random.choice(list(set))从它们中挑选值。有时,即使每次使用相同的种子,我的结果(选择的项目)也会出现分歧,我几乎要拔掉头发了。在这里看到 eryksun 的回答后,我尝试了random.choice(sorted(set)),问题似乎已经消失了。我对 Python 的内部工作原理知之甚少,无法解释它。
这可能有助于创建一个不会受到其他地方干扰的随机对象:
from random import Random
random = Random(55)
# random can be used like the plain module
Run Code Online (Sandbox Code Playgroud)
如果其他库出于任何原因进行调用random.seed,它们不会影响您为程序创建的随机对象。
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |