fmin_l_bfgs_b返回NaN作为函数值,但我没有得到

时间:2015-06-24 09:36:00

标签: python numpy scipy

免责声明:我知道我不能指望在没有显示简洁且简单的可重复样本的情况下完全解决问题,但我希望即使没有,我也会得到一些指示。

我的代码格式为

from scipy import optimize
x, foo, result = optimize.fmin_l_bfgs_b(myFunc, x0, approx_grad=True,
                                      bounds=someBounds)

the documentation我得到第二个输出

  

f: float - func的值至少为。

在这里,我得到了

>> print foo
nan

但是如果我尝试使用fmin_l_bfgs_b给我的最小值来恢复该函数值,我会得到

>> myFunc(x)
20520.965701409703

这是result

{'warnflag': 2, 'task': 'ABNORMAL_TERMINATION_IN_LNSRCH', 'grad': array([  1.27146321e+12,   5.25635627e+11,   8.94617519e+11,
         2.90637658e+12,   1.16159650e+12]), 'nit': 5, 'funcalls': 490}

如果最小化器声称它是NaN,我怎么可能得到数字最小值?

2 个答案:

答案 0 :(得分:1)

之前我遇到过类似的问题,如果x0类型为float32,我发现无法达到收敛。将它投射到np.float64之后,它就像一个魅力。 这可能不是解决问题的方法,但我认为值得一试。

答案 1 :(得分:0)

返回的Pinterest值不为0.最小化器告诉您优化没有收敛,see documentation。在假设找到最小值之前,您应该检查返回状态。