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

时间:2015-09-04 15:08:58

标签: python optimization scipy

此页面(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:未知的求解器选项:factr

所以我认为这个选项已被弃用而不赞成ftol(不知道为什么会这样?)。 ftol是指定的数字(即diff&lt; = n而不是&lt; = n * machine_error)。

我没关系,但是我得到的求解器退出消息是

  

CONVERGENCE:REL_REDUCTION_OF_F_&lt; = _ FACTR * EPSMCH

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

由于

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

1 个答案:

答案 0 :(得分:4)

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

你可以简单地使用像

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

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