我在 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()
我可以通过将方程包含为目标函数来获得解,但如果我给出初始猜测,求解器 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 解决这个问题?
最佳答案
像 David 提到的那样,在你的方程式中使用 ==
。
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
开始,当你没有给出一个起始猜测时 x=m.Var()
和 y=m.Var()
。您可以从更接近解决方案的地方开始找到一个或另一个解决方案,例如 x=m.Var(1)
和 y=m.Var(1)
或添加约束将搜索空间限制为 x=m.Var(lb=0)
和 y=m.Var(lb=0)
。
关于python - 如何修复 Python Gekko 方程错误 "SyntaxError: keyword can' t be an expression”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58575866/