限制从scipy.optimize最小化的问题

时间:2018-10-07 17:42:42

标签: optimization scipy

我对此进行了搜索,无法解决此问题。我正在使用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上的示例的代码,该代码似乎可以在其他人的机器上正常工作,但不是我的机器。我这是怎么了?

[编辑:如果我删除了约束,则可以正常工作。我输入约束函数的方式有什么问题?]

非常感谢您的时间。

1 个答案:

答案 0 :(得分:3)

错误在于您的约束。您传递的是字符串而不是约束的函数。只需将其更改为:

con1 = {'type':'ineq','fun': constraint1 }
con2 = {'type':'eq','fun': constraint2 }
cons=[con1,con2]