python - 如何修复 Python Gekko 方程错误“SyntaxError:关键字不能是表达式”?
问题描述
我在 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 解决这个问题?
解决方案
==
正如大卫所说,在你的方程式中使用。
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)
。
推荐阅读
- freemarker - 为什么变量名中的特殊字符会出错?
- kubernetes - 允许对 Istio 虚拟服务进行仅本地访问
- javascript - 使用 JavaScript/Postman 动态构建数组
- node.js - 如何解析 TSC 发出的代码中 glob 模式的路径?
- session - 为什么 CQ 不并行运行 OSLC 请求?
- python - 为某些名称创建具有每天平均值的列
- html - 如何获得显示时间的 HTML 代码?
- java - 我如何通过rest或http post在java中的aws iot中发布数据
- kotlin - 当方法的默认参数需要注入字段时如何模拟?
- rust - 创建一个容器结构包含两个字段,从一个引用到另一个