我在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解决此问题?
答案 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=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)
。>