我在 scipy 中遇到了这个简单的回调问题。
我正在使用带有值(func,x0,callback=callbackFunc)的optimize.minimize。 回调函数确实有效,但仅返回步骤 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
这是最小化工作的常用方法还是我以某种方式解释了错误?
最小化文档说回调(强调我的):
因此,它应该只是最小化的工作方式,这必须是第一次迭代后的结果,而不是它开始的值。如果您想完全确定它以您想要的值开头,您始终可以在每次调用时打印从在每次迭代后调用,称为callback(xk),其中xk是当前参数向量。
minimize 传递到 func 的参数。