Python scipy optimize minimize始终以相对减少的方式退出_

Python scipy optimize minimize始终以相对减少的方式退出_,python,scipy,Python,Scipy,我正在使用“L-BFGS-B”最小化一些对数似然,我不希望算法在REL_REDUCTION_OF_是设计的时候停止。优化算法通过对参数值进行微小更改和测量更改速率来工作。想象一下山上的雪橇,你想找到最陡的斜坡。因为您处理的是浮点数,所以可以不断对值进行越来越小的更改。为了防止程序运行,您需要一些完成时的标准。当你在山脚下时,你把雪橇指向哪个方向并不重要 ftol设置函数调用中更改的最小容差,gtol设置全局容差。将其设置为0时,您告诉例程计算默认公差。当您将其设置为负值时,您要求例程在 absf

我正在使用“L-BFGS-B”最小化一些对数似然,我不希望算法在REL_REDUCTION_OF_是设计的时候停止。优化算法通过对参数值进行微小更改和测量更改速率来工作。想象一下山上的雪橇,你想找到最陡的斜坡。因为您处理的是浮点数,所以可以不断对值进行越来越小的更改。为了防止程序运行,您需要一些完成时的标准。当你在山脚下时,你把雪橇指向哪个方向并不重要

ftol设置函数调用中更改的最小容差,gtol设置全局容差。将其设置为0时,您告诉例程计算默认公差。当您将其设置为负值时,您要求例程在
absfx+delta我理解这一点,但问题是如何禁用此退出条件?如果1'f^k-f^{k+1}/max{f^k},f^{k+1},1},则此算法停止,但您的问题说您将ftol设置为0。可以将factr设置为0,但为什么?该退出条件基于机器精度。在某一点上,4.9999999999999999只是5。你想要多少个9?我希望我的投影梯度小于某个阈值,因为我有一些重缩放,迫使我这样做。但是把重点放在这个问题上,你知道为什么即使factr=0,我也不能禁用条件1吗?注意:设置ftol与设置factr相同,因为您正在调用的方法的ftol=factr*epsmach.factr=ftol/np.finfofloat.eps。这可能是你问题的根源。我不确定从python float到fortran double的转换是如何工作的,以及在转换过程中0.0是否保持为0。但ftol/factr同样被用作基于机器精度的退出标准。如果你想要一个更精确的梯度公差,如果你达到了感知极限,那么你的问题公式可能还有其他问题。如果你真的想确保你避免了退出条件,直接调用函数,这样你就可以确保factr为0。从源代码看:ftol选项通过scipy.optimize.minimize接口公开,但调用scipy.optimize.fmin_l_bfgs_b直接公开factr。两者之间的关系是ftol=factr*numpy.finfofloat.eps。也就是说,factr乘以默认的机器浮点精度,得到ftol。嗨,我也遇到了类似的问题。你找到解决方法了吗?我使用了NQN python包。。没有办法在scipy中修复它;如果您的真正目标是获得较低的梯度值,您可能希望切换到接近最佳值的寻根算法。在本例中,我个人使用scipy.optimize.root方法='krylov'获得了很好的结果。
min_log = scipy.optimize.minimize(fun=minus_log_lik, x0=proc_param,
                                  method='L-BFGS-B', bounds=tuple(bounds),
                                  options={'ftol':0,'gtol':1e-06}