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

问题描述 投票:2回答:1

我在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解决此问题?

python solver nonlinear-optimization gekko
1个回答
0
投票

如大卫提到的那样在方程式中使用==

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)

© www.soinside.com 2019 - 2024. All rights reserved.