假设我有一个Python项目结构,如下所示:
main.py
哪个进口random_initialization.py
main.py
哪个进口sample_around_solution.py
无论random_initialization
和sample_around_solution.py
进口numpy
。
现在,random_initialization
开始问题的随机实例,main
运行算法,并sample_around_solution
在解决方案周围使用随机样本来计算某些度量(例如,解决方案的质量)。
我想要numpy.random.seed(0)
两个导入文件中的运行具有可复制性。这是正确的方法吗?我觉得这可能是一个可怕的主意。
我认为最好不要使用任何东西来操纵随机种子,除了最顶层的模块(通常是
短main.py
,只是import
s和做一些程序选项和CONFIGS,并呼吁其他的东西)
一种 unittest
单点播种允许做一些有用的事情,例如
您可以控制设置种子的可重复性(在编写时)。
您可以控制种子的变化以获得更好的覆盖范围(例如,如果要通过单元测试来运行子模块)。
您可以将种子存储在持久性存储中,以便在某些执行出现问题时可以重现它。
相反,如果子模块自己进行播种,则不能。我也认为这是错误的封装:它不是执行某些定义明确的功能X的模块,而是执行X +播种。
顺便说一句,几年前,我在PyPI上写了一个微型库-UnittestRandGenState,用于为编写“智能”种子unittest
,然后考虑了一下。从根本上说,这取决于您所提议的内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句