python-3.x - 回调函数在 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
我哪里错了?
解决方案
根据文档,回调函数签名取决于选择的求解器。(这不是很好。)
虽然它callback(x)
适用于所有其他人,但在您的情况下,它callback(x, status)
就像您正在使用的method='trust-constr'
.
只需将此附加参数添加到您的参数中(如果您没有使用状态信息,请忽略它)。
推荐阅读
- c++ - 无法使用 DWM 在自定义窗口框架上绘图
- ruby-on-rails - 接受属性的字符串输入,将整数存储在数据库中,在 API 中返回字符串
- amazon-web-services - 使用 Terraform 旋转具有一定有效性的 AWS EC2 Spot 实例
- html - 如何构建所有具有相同宽度的 DIV 的响应式网格
- reactjs - 如何处理 setState 是异步的?
- assembly - 如何计算 MIPS ASSEMBLY 中标签的地址?
- javascript - Quasar Cordova 谷歌地图插件
- javascript - 找到点之间的路径。迷宫算法太慢
- mysql - SQL合并不同的表数据计数
- javascript - 如何将base13字符串转换为base64