回调函数在scipy.optimize.minimize类中引发错误

时间:2019-05-11 10:33:05

标签: python-3.x optimization scipy scipy-optimize scipy-optimize-minimize

我正在使用scipy.minimize解决优化问题。

这是我的代码


import numpy as np
from scipy.optimize import minimize
from scipy.optimize import Bounds

#bounds = Bounds([25, 36], [26, 38],[10,27],[6,28],[0,1800],[0,800],[0,100],[25,60],[2,7])

bounds = Bounds([20,6,20,23],[35,9,50,26])

energy_history = []
x_values = []

def objective(x):
    return (-0.20859863*x[0:1] -1.5088649*x[1:2] +0.10707853*x[2:3] +1.6829923*x[3:4] -0.008870916*x[0:1]*x[1:2] + 0.0007393111*x[0:1]*x[2:3] +0.010610705*x[0:1]*x[3:4] + 0.005123541*x[1:2]*x[2:3] +  0.086458616*x[1:2]*x[3:4] -0.007695199*x[2:3]*x[3:4] + 0.00016993227*x[0:1]*x[0:1] -0.026582083*x[1:2]*x[1:2]  + 0.00014467833*x[2:3]*x[2:3] -0.051599417*x[3:4]*x[3:4] - 9.540932)

def callback(x):
    fobj = objective(x)
    x_values.append(x)
    energy_history.append(fobj)


x0 = np.array([34,8,49,25])
res = minimize(objective, x0, method='trust-constr',
               options={'verbose': 1}, bounds=bounds,callback=callback)



optimal_values= res.x

print('optimal values found: ' + str(res.x))
print('energy consumed: ' + str(res.fun))

运行此程序时出现错误。

错误与回调函数有关,它说

TypeError: callback() takes 1 positional argument but 2 were given

我要去哪里错了?

1 个答案:

答案 0 :(得分:1)

根据docs,回调函数签名取决于所选的求解器。 (不是很好)。

对于所有其他参数,它都是SELECT * FROM `table` WHERE `column` LIKE '%am[o%' ,而在您使用callback(x)时,它是callback(x, status)

只需将此附加参数添加到您的参数中即可(如果您不需要状态信息,则忽略它)。