Scipy 优化最小化缺少 1 个必需的位置参数

Scipy Optimize Minimize missing 1 required positional argument

我正在努力学习如何使用 scipy.optimize.minimize。我将需要它来处理两个变量的函数,每个变量都有大约一千个项;所以我先想出了一个简单的例子:

from scipy.optimize import minimize

def test_function(x,y):
    return x*(x-1)+y*(y-1)

mins=minimize(test_function,x0=(0,0),bounds=[(0,1),(0,1)])

所以我希望得到 x=0.5, y=0.5 的答案。

不幸的是,我收到了以下错误:

TypeError: test_function() missing 1 required positional argument: 'y'

我的测试函数缺少位置参数是什么意思?

设计向量需要是可迭代的。您可以在 objective 函数中将其解压缩到 xy 变量。下面的示例假设 xy 是代码片段中的标量,如果它们是向量,则需要获取 [= 的切片12=]对应你变量的长度。

from scipy.optimize import minimize

def test_function(design_variables):
    x = design_variables[0]
    y = design_variables[1]
    return x*(x-1)*y*(y-1)

mins = minimize(test_function, x0=(0,0), bounds=[(0,1),(0,1)])
print(mins)

优化结果:

     fun: 0.0
     jac: array([0., 0.])
 message: 'Optimization terminated successfully.'
    nfev: 4
     nit: 1
    njev: 1
  status: 0
 success: True
       x: array([0., 0.])