scipy.optimize中的回调不会调用第一个值

时间:2017-06-25 11:04:58

标签: python optimization callback scipy minimize

我在scipy中遇到了回调的这个简单问题。

我正在使用optimize.minimize和值(func,x0,callback = callbackFunc)。 回调函数确实有效,但仅在步骤1之后返回值。

x0=(240.,220.)
Nfeval=0
interim_res
optimize.minimize(func, x0, callback=callbackFunc)
def callbackFunc(X):
    global Nfeval, interim_res
    print('{0:4d}   {1: 3.6f}   {2: 3.6f}'.format(Nfeval, X[0], X[1]))
    Nfeval += 1
    interim_res.append([X[0], X[1]])

所以在我看来它应该从

开始
0    240    220
...

但第一次回归是:

0    173.345    159.56

这是通常最小化工作方式还是以某种方式解释错误?

1 个答案:

答案 0 :(得分:2)

minimize documentation表示回调:在每次迭代后调用,作为回调(xk),其中xk是当前参数向量。

因此,它应该是最小化工作的方式,必须是第一次迭代后的结果,而不是它开始的值。如果你想完全确定它以你想要的值开头,你总是可以打印每次调用时从最小化传递到 func 的参数。