设置 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
的值。
此页面 (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
的值。