2

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

在此处输入图像描述

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()

我可以通过将方程作为目标函数来获得解决方案,但x=0, y=0如果我给出初始猜测,求解器 IPOPT 会报告。当我猜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 解决这个问题?

4

1 回答 1

1

==正如大卫所说,在你的方程式中使用。

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=0并且y=0当您不使用 and 给出初始猜测x=m.Var()y=m.Var()。您可以通过开始更接近解决方案来找到一个解决方案或另一个解决方案,例如x=m.Var(1)andy=m.Var(1)或添加约束以将搜索空间限制为x=m.Var(lb=0)and y=m.Var(lb=0)

于 2019-10-27T03:16:04.510 回答