scipy.optimize.minimize('Newton-CG')并不总是返回它找到的最低目标函数

时间:2017-12-05 13:10:55

标签: python scipy

使用scipy的Newton-CG最小化函数中的奇怪行为:每次调用目标函数计算时,我都会打印出该值。我发现通常情况下,最小化器找到的值低于最终报告的值。示例输出如下所示。 “Iter”是来自最小化函数的迭代次数,而“call”是最小化器称为目标函数“J”的计算的时间。 “dJ”是从前一次通话中改变了多少次。 “f”是一个包含所有计算的对象类,包括回调函数'iternum':

res=scipy.optimize.minimize(f.J,f.z,args=(F),tol=1.e-4,method='Newton-CG', \
 jac=f.Jacobian,hessp=f.Hessian, callback=f.iternum)

Iter 1    , call 30    J=3.73e+09 dJ=3.58e+09  
Iter 1    , call 31    J=1.78e+09 dJ=-1.95e+09 
Iter 1    , call 32    J=5.23e+08 dJ=-1.26e+09 
Iter 1    , call 33    J=1.76e+08 dJ=-3.47e+08 
Iter 1    , call 34    J=1.33e+08 dJ=-4.29e+07 
Iter 1    , call 35    J=1.44e+08 dJ=1.14e+07  
Iter 2    , call 36    J=1.42e+08 dJ=-1.85e+06 
Iter 2    , call 37    J=1.42e+08 dJ=5.19e+04  

res.fun = 1.42e+08

但是,请注意,最低J值实际上是1.33e + 08,因此应该返回那些参数和目标函数值。还有其他人经历过吗?想法?

0 个答案:

没有答案