最小化导致TypeError:bound1Expr()缺少2个必需的位置参数



调用定义为的函数optimization((时

def optimization():
bound1 = {
'type': 'eq',
'fun': bound1Expr}
bound2 = {
'type': 'eq',
'fun': bound2Expr}
optimizeResult = minimize(
toOptimize,
(0,0,0),
method = "SLSQP",
options = {'disp': False},
constraints = (
bound1,
bound2
)
)
return optimizeResult.x
def bound1Expr(x,y,z):
return x + y + z -1

def bound2Expr(x,y,z):
return x^2 + y^2 + z^2 - 10
def toOptimize(x,y,z):
return (x^2 + y^2 + z^2)**0.5 

我得到错误

File "C:ProgramDataAnaconda3libsite-packagesscipyoptimizeslsqp.py", line 313, in <listcomp>
for c in cons['eq']]))

TypeError: bound1Expr() missing 2 required positional arguments: 'y' and 'z'

我查看了所有能找到的错误源,但仍然不知道该怎么办。错误通常与Self变量有关,但我在这里不处理类。即使Self被隐式添加到lambda函数中,如果我不使用它,我也不知道为什么会出现问题。

您的代码被修改为接受一个参数,而不是3个。我还将^电源更改为**电源。

In [105]: def optimization():
...:     bound1 = {
...:             'type': 'eq',
...:             'fun': bound1Expr}
...:     bound2 = {
...:             'type': 'eq',
...:             'fun': bound2Expr}
...:     optimizeResult = minimize(
...:                     toOptimize,
...:                     (0,0,0),
...:                     method = "SLSQP",
...:                     options = {'disp': False},
...:                     constraints = (
...:                             bound1,
...:                             bound2
...:                             )
...:                         )
...:     return optimizeResult.x
...: 
...: def bound1Expr(xyz):
...:     x,y,z=xyz
...:     return x + y + z -1
...: 
...: def bound2Expr(xyz):
...:     x,y,z=xyz
...:     return x**2 + y**2 + z**2 - 10
...: 
...: def toOptimize(*args):
...:     print('args',args)
...:     x,y,z=args[0]
...:     return (x**2 + y**2 + z**2)**0.5
...: 
In [106]: optimization()
args (array([0., 0., 0.]),)
args (array([1.49011612e-08, 0.00000000e+00, 0.00000000e+00]),)
args (array([0.00000000e+00, 1.49011612e-08, 0.00000000e+00]),)
args (array([0.00000000e+00, 0.00000000e+00, 1.49011612e-08]),)
Out[106]: array([0., 0., 0.])

toOptimize所示,minimize传递一个值,一个数组作为参数(如果您提供args参数,它会传递更多(。该数组有3个元素,对应于初始值数组(元组(。

在使用这些scipy函数时,正确地定义函数通常是一个问题。用户忽略或不理解的文档定义

fun : callable
The objective function to be minimized.
``fun(x, *args) -> float``
where ``x`` is an 1-D array with shape (n,) and ``args``
is a tuple of the fixed parameters needed to completely

我的第一条评论是对你最后一段关于";来源";。看起来您在web上搜索了有关缺少或必需的位置参数的错误。这是一个相当普遍的问题。是的,当人们没有考虑类方法的self参数时,经常会发生这种情况。但这里的情况并非如此,因此网络搜索效率低下。

当(新(用户应该首先查看文档时,他们往往会转向网络(或SO(搜索。有一个地方可以进行网络搜索(例如,独特的错误或非常新的错误发布(,但对于像这样的基本使用问题,你应该首先确保你了解如何正确使用该功能。

最新更新