如何修复Python Gekko公式错误“ SyntaxError:关键字不能为表达式”?

时间:2019-10-27 00:56:13

标签: python solver nonlinear-optimization gekko

我在Python Gekko程序中出现错误,说方程式有问题。我知道有两种解决方案,单位圆与直线相交。

enter image description here

from gekko import GEKKO
m = GEKKO()
x = m.Var()
y = m.Var()
m.Equation(x**2+y**2=1)
m.Equation(x=y)
m.solve()

当我将等式放在一起时,会给出不同的错误SyntaxError: invalid syntax

from gekko import GEKKO
m = GEKKO()
x = m.Var()
y = m.Var()
m.Equations([x**2+y**2=1,x=y])
m.solve()

我可以通过将方程式包含为目标函数来获得解决方案,但如果我给出初始猜测,则求解器IPOPT会报告x=0, y=0。当我猜到x=1, y=1时,它给出的正确解决方案之一就是x=0.707, y=0.707。我想让求解器将这些约束作为硬约束(而非软约束)强制执行。

m.Obj((x**2+y**2-1)**2)
m.Obj((x-y)**2)

如何使用Python Gekko解决此问题?

1 个答案:

答案 0 :(得分:2)

如大卫所说,在方程式中使用==

from gekko import GEKKO
m = GEKKO()
x = m.Var()
y = m.Var()
m.Equation(x**2+y**2==1)
m.Equation(x==y)
m.solve()

编写方程式时的常见错误是使用单等号(=)而不是双等号(==)。 (=)将右侧的数量分配给左侧的变量。 (==)是一个比较运算符,在Gekko中用于建立相等约束。您还可以使用其他运算符,例如(<=),(<),(>)和(> =)。 Gekko不支持不等于(!=)。

要考虑的另一件事是,您从x=0y=0开始,而您没有以x=m.Var()y=m.Var()给出开始猜测。您可以从更接近解决方案的地方开始寻找一种解决方案,例如x=m.Var(1)y=m.Var(1),或者添加约束以将搜索空间限制为x=m.Var(lb=0)y=m.Var(lb=0)