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

问题描述 投票:0回答:1

我在 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

这是最小化工作的常用方法还是我以某种方式解释了错误?

python optimization scipy callback scipy-optimize-minimize
1个回答
4
投票

最小化文档说回调(强调我的):

在每次迭代后调用,称为callback(xk),其中xk是当前参数向量。

因此,它应该只是最小化的工作方式,这必须是第一次迭代后的结果,而不是它开始的值。如果您想完全确定它以您想要的值开头,您始终可以在每次调用时打印从

minimize 传递到 func 的参数。

© www.soinside.com 2019 - 2024. All rights reserved.