Scipy差分进化中的界

chhkpiq4  于 8个月前  发布在  其他
关注(0)|答案(2)|浏览(52)

我正在尝试使用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,因为它不使用渐变。

lyfkaqu1

lyfkaqu11#

differential_evolution在将其转换为numpy数组以验证边界是否为numberes之后,在边界上使用numpy.isfinite,它返回False,用于np.infnp.nan等值。
您可以使用numpy的max和min int

info = np.iinfo(np.int64)
bounds = [(0.0, 1.0), (info.min, info.max), (0.0, 1.0), (0.0, 1.0), (0, info.max)]

字符串

qhhrdooz

qhhrdooz2#

differential_evolution要求所有参数都有有限的边界。通常这不是问题,因为你通常可以猜测几个数量级内的边界。我不建议使用非常大的数字(例如,最大的int)来代替np.inf,因为算法生成的种群成员分布在该范围内,这可能非常低效。

相关问题