多个脾气暴躁的进口的全球种子

用户4951004

假设我有一个Python项目结构,如下所示:

main.py 哪个进口 random_initialization.py

main.py 哪个进口 sample_around_solution.py

无论random_initializationsample_around_solution.py进口numpy

现在,random_initialization开始问题的随机实例,main运行算法,并sample_around_solution在解决方案周围使用随机样本来计算某些度量(例如,解决方案的质量)。

我想要numpy.random.seed(0)两个导入文件中的运行具有可复制性这是正确的方法吗?我觉得这可能是一个可怕的主意。

阿米·塔沃里(Ami Tavory)

我认为最好不要使用任何东西来操纵随机种子,除了最顶层的模块(通常是

  • main.py,只是imports和做一些程序选项和CONFIGS,并呼吁其他的东西)

  • 一种 unittest

单点播种允许做一些有用的事情,例如

  • 您可以控制设置种子的可重复性(在编写时)。

  • 您可以控制种子的变化以获得更好的覆盖范围(例如,如果要通过单元测试来运行子模块)。

  • 您可以将种子存储在持久性存储中,以便在某些执行出现问题时可以重现它。

相反,如果子模块自己进行播种,则不能。我也认为这是错误的封装:它不是执行某些定义明确的功能X的模块,而是执行X +播种。


顺便说一句,几年前,我在PyPI上写了一个微型库-UnittestRandGenState,用于为编写“智能”种子unittest,然后考虑了一下。从根本上说,这取决于您所提议的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章