我没有找到使用多维函数从 scipy 执行 optimize.minimize 的方法。在几乎所有示例中,解析函数都得到优化,而我的函数则被插值。测试数据集如下所示:
x = np.array([2000,2500,3000,3500])
y = np.array([10,15,25,50])
z = np.array([10,12,17,19,13,13,16,20,17,60,25,25,8,35,15,20])
data = np.array([x,y,z])
虽然函数类似于 F(x,y) = z
我想知道的是 f(2200,12) 处发生了什么以及 x (2000:3500) 和 y (10:50) 范围内的全局最大值是多少。插值工作正常。但到目前为止,找到全局最大值还行不通。
插值法
self.F2 = interp2d(xx, -yy, z, kind, bounds_error=False)
yields
<scipy.interpolate.interpolate.interp2d object at 0x0000000002C3BBE0>
我尝试通过以下方式进行优化:
x0 = [(2000,3500),(10,50)]
res = scipy.optimize.minimize(self.F2, x0, method='Nelder-Mead')
抛出异常:
TypeError: __call__() missing 1 required positional argument: 'y'
我认为优化器无法处理插值中的对象。在示例中,人们使用 lambda 从函数中获取值。对于我的情况,我需要做什么?
最好的,
亚历克斯