我正在尝试使用Scipy
中的differential_evolution
进行优化。
我有5个参数,我想使用bounds = [(0.0,1.0),(None, None),(0.0, 1.0),(0.0,1.0),(0, None)]
。
但是我得到一个错误,我必须为每个参数提供(min, max)
的真实的数字。
在使用differential_evolution
时,是否有方法只为某些参数提供边界?
我可以切换到basinhopping
来使用这样的边界,但我想使用differential_evolution
,因为它不使用渐变。
2条答案
按热度按时间lyfkaqu11#
differential_evolution
在将其转换为numpy数组以验证边界是否为numberes之后,在边界上使用numpy.isfinite
,它返回False
,用于np.inf
和np.nan
等值。您可以使用numpy的max和min
int
值字符串
qhhrdooz2#
differential_evolution
要求所有参数都有有限的边界。通常这不是问题,因为你通常可以猜测几个数量级内的边界。我不建议使用非常大的数字(例如,最大的int)来代替np.inf
,因为算法生成的种群成员分布在该范围内,这可能非常低效。