我对此进行了搜索,无法解决此问题。我正在使用scipy.optimize的最小化功能,并不断收到错误消息:
'str'对象不可调用。
我的代码很复杂,因此我在网上查找了一个简单的示例,以确保我正确输入了所有内容,并且仍然遇到相同的错误。这是我在youtube上找到的简单示例:
https://www.youtube.com/watch?v=cXHvC_FGx24
import numpy as np
from scipy.optimize import minimize
def objective(x):
x1=x[0]
x2=x[1]
x3=x[2]
x4=x[3]
return x1*x4*(x1+x2+x3)+x3
def constraint1(x):
return x[0]*x[1]*x[2]*x[3]-25
def constraint2(x):
sum_sq = np.sum(np.square(x))
return sum_sq-40
x0=[1,5,5,1]
b=(1, 5)
bnds = (b,b,b,b)
con1 = {'type':'ineq','fun':'constraint1'}
con2 = {'type':'eq','fun':'constraint2'}
cons=[con1,con2]
sol=minimize(objective, x0, method='SLSQP',bounds=bnds,constraints=cons)
这是直接来自youtube上的示例的代码,该代码似乎可以在其他人的机器上正常工作,但不是我的机器。我这是怎么了?
[编辑:如果我删除了约束,则可以正常工作。我输入约束函数的方式有什么问题?]
非常感谢您的时间。
答案 0 :(得分:3)
错误在于您的约束。您传递的是字符串而不是约束的函数。只需将其更改为:
con1 = {'type':'ineq','fun': constraint1 }
con2 = {'type':'eq','fun': constraint2 }
cons=[con1,con2]