首页 > 解决方案 > Scipy Optimize 最小化缺少 1 个必需的位置参数

问题描述

我正在尝试学习如何使用 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'

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

标签: scipy-optimize-minimize

解决方案


设计向量必须是可迭代的。您可以在目标函数中将其解包到您的xy变量中。下面的示例假设xy是代码片段中的标量,如果它们是向量,则需要获取与design_variables变量长度相对应的切片。

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.])

推荐阅读