设置 scipy.optimize.minimize(method='L-BFGS-B') 的收敛公差

Set convergence tolerance for scipy.optimize.minimize(method='L-BFGS-B')

此页面 (http://docs.scipy.org/doc/scipy/reference/optimize.minimize-lbfgsb.html) 描述了可以传递给 scipy 优化包的 L-BFGS-B' 方法的求解器选项。 我正在尝试设置求解器退出容差。

文档提到了两个选项,我更愿意使用的选项是 'factr',求解器在以下情况下退出: (f^k - f^{k+1})/max{|f^k|,|f^{k+1}|,1} <= factr * eps(其中 epsilon 是机器精度)。但是,当我 运行 我的代码收到警告时:

OptimizeWarning: Unknown solver options: factr

因此我推测此选项已被弃用,取而代之的是 ftol(但不确定为什么会这样?)。 ftol 是指定的数字(即 diff <= n 而不是 <= n * machine_error)。

这对我来说很好,但是我得到的求解器退出消息是

CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH

这表明 L-BFGS-B 例程仍在使用 factr 的某些值,我不知道,而且似乎无法指定。可能是代码中被忽视的错误,可能是我错过了一些传递选项的方法。使用这个流行求解器的人知道解决方法吗?

谢谢

我也在 scipy github 存储库上打开了一个问题。

在内部,factr 仍在计算 (in this line of code)。

你可以简单地使用像

这样的东西
myfactr = 1e2
r = scipy.optimize.minimize(..., options={'ftol' : myfactr * np.finfo(float).eps)

如果您仍然想为 factr 而不是直接指定 ftol 的值。