我有一个丢失函数,它打开一个外部.exe文件进行计算,运行这个可执行文件通常需要2到3分钟。它工作得很好,但是当我想把这个函数传递给遗传算法进行优化时,我会面临这样的错误:
AssertionError: After 10.0 seconds delay func_timeout: the given function
does not provide any output.
很明显它说GA等了10秒,没有收到任何东西.因为函数需要更多的时间来返回结果(损失),所以它不会继续。
有没有办法将time_out
设置为超过10.0秒?我找不到algorithm_param或ga_model本身的选项。以下是我的参数:
from geneticalgorithm import geneticalgorithm as ga
algorithm_param = {'max_num_iteration': None,\
'population_size':100,\
'mutation_probability':0.1,\
'elit_ratio': 0.01,\
'crossover_probability': 0.5,\
'parents_portion': 0.3,\
'crossover_type':'uniform',\
'max_iteration_without_improv':None}
ga_model = ga(function=loss_fn,
dimension=(2),
variable_type='real',
variable_boundaries=varbound,
algorithm_parameters=algorithm_param)
ga_model.run()
我搜索了这里和其他论坛,但是几乎所有相关的问题实际上都是为了将函数限制在特定的时间(手动为进程设置超时),而不是相反的;我想取消限制。
发布于 2022-10-20 14:24:58
来自geneticalgorithm
库Github页面
功能超时 遗传算法的设计使得如果给定的函数在超时之前没有提供任何输出(默认值是10秒),则该算法将被终止并引发适当的错误。在这种情况下,请确保给定函数正确工作(即给定函数中没有无限循环)。另外,如果给定的函数需要超过10秒才能完成工作,请确保在参数中增加function_timeout。
来自论据部分
@param function_timeout -如果给定函数在function_timeout (单位为秒)之前没有提供输出,则算法会引发错误。例如,当给定函数中有一个无限循环时。
因此,如果您希望在20秒内结束时间,您应该将您的ga
函数更改为:
ga_model = ga(function=loss_fn,
dimension=(2),
variable_type='real',
variable_boundaries=varbound,
algorithm_parameters=algorithm_param,
function_timeout = 20) # <- added
https://stackoverflow.com/questions/74141241
复制相似问题