问题标签 [gekko]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
446 浏览

python - 在gekko非线性回归中处理多维数组的正确方法是什么?

尝试使用 python 的 gekko 库进行非线性回归。

样本取自这里 http://apmonitor.com/wiki/index.php/Main/GekkoPythonOptimization

就我而言,我需要多维回归。所以我试着做一些修改。这是结果。

结果我得到错误

184, in _write_csv raise Exception('Data arrays must have the same length, and match time discretization in dynamic questions') Exception: Data arrays must have the same length, and match time discretization in dynamic questions

0 投票
1 回答
188 浏览

gekko - Gekko 中的阶梯函数实现

我正在尝试在 Gekko (IMODE=6) 中实现类似于阶跃函数的东西。我已经尝试过 If3 并设置自定义下限和上限,但在 Gekko 中仍然找不到解决方案。

对于这样的阶跃函数或 Gekko 中的任何分段函数,您会推荐什么?

0 投票
1 回答
238 浏览

python-3.x - 一组微分方程中的条件分段函数

我正在尝试实现一个模型,并且我有这个条件分段函数,作为模型的一部分。

这个等式,我正在尝试实现


其中 T_zone(=293) 和 T_in(=348) 是先前定义的常数,x2 和 x5 是依赖于其他方程的变量,这些方程依赖于 T_in 和 T_out。

它们都有定义的初始值。


在上面的代码中,我尝试将方程分成两部分,并将 if 条件的结果作为附加变量添加到基值/最小值中,结果没有解决方案。

0 投票
2 回答
315 浏览

gekko - 如何在 GEKKO 中约束模型变量

我喜欢在 y 模型中约束变量值 u < 1。将 ub=1 添加到变量定义 u = m.Var(name='u', value=0, lb=-2, ub=1) 但它导致“未找到解决方案”(退出:收敛到局部不可行。问题可能不可行。)。我想我必须重新制定问题以避免这种情况,但我无法找到应该如何完成的示例。在约束变量值时,如何编写适当的模型以避免不可行的解决方案?

我已经通过添加像 m.Equation(u < 1) 这样的方程来重新表述问题,但没有成功。

退出:收敛到局部不可行点。问题可能是不可行的。

发生错误。错误代码为 2

如果我将 u 的上限更改为 2,优化问题将按预期解决。

0 投票
1 回答
1258 浏览

python - 如何在 Python Gekko 优化中强制执行二进制(或整数)变量?

我正在尝试使用TCLab 修改 Python Gekko 中用于模型预测控制的示例代码,以使用二进制(开/关)而不是 0 到 100% 之间的连续加热器值。我切换了选项integer=True并将决策变量缩放为 0 到 1,而不是 0 到 100%,但它仍然为 Q1 提供了连续值(不是二进制)解决方案。

当决策变量(操纵变量)必须是二进制或整数解时,如何使用 Gekko 进行优化控制?

0 投票
1 回答
227 浏览

python - 使用 python GEKKO 模拟向量 ODE

我正在尝试学习如何使用GEKKO python 包。作为第一步,我想模拟一个简单的向量 ODE:dx/dt = A*x,其中 A 是矩阵,x 是向量。我为 GEKKO 看到的所有 ODE 示例都是针对标量 ODE 的,在线文档中的数组示例没有显示如何在声明 Equation 时合并 .dt() 方法。我知道在声明方程式时,可以使用列表,所以我认为这样的方法是要走的路:

但是这段代码会因为两个原因而失败:1)+= 不是 Equation 方法的有效比较,2)python 抱怨 x[i].dt() 不是 x[i] 的有效属性(其中是一个 np.float64)。那么,如果可能的话,我将如何在 GEKKO 中模拟这个 ODE?

0 投票
1 回答
200 浏览

python - 子进程:gekko 包中的“执行格式错误”

我正在尝试在 python 2 或 3 中运行 gekko。我只是按照更改参数的教程进行操作,然后使用 scipy.integrate 来模拟我的 MPC。它适用于我的一台计算机,但不适用于我的 NVIDIA Jetson TX2。运行 m.solve(disp=False) 时出现“Exec 格式错误”。

两台电脑都有python2和python3。由于我也在运行 ROS,所以我想使用 python2 来运行脚本。最初我认为可能是使用 python2 解释导致问题,所以我编写了另一个脚本,利用子进程将我的 mpc 和模拟器解释为 python3。但是,这个问题仍然存在。问题似乎在 gekko 包中。我确信这是一个环境错误,因为该脚本在我的个人计算机上运行良好。目前我正在运行 Ubuntu 16.04。

这是来自终端的错误消息:

编辑:

我找到了 apm 文件夹位置。当我尝试运行apm

该命令给了我这个:

我假设这意味着在我的 TX2 上,apm 运行不正常。

如果我设置m = GEKKO(remote=True),它的工作原理。但是,MPC 不能实时运行,这对我来说绝对是个问题。

我现在正试图在本地桌面上解决这个问题。服务器参数只是本地IP地址吗?我设置:

它返回:

设置m = GEKKO(remote=True, server="http://192.168.1.136")产生同样的问题。

0 投票
1 回答
475 浏览

python - 收到“APM 模型错误:字符串 > 15000 个字符”后,有没有办法增加 Gekko 中方程的行长?

我正在使用 Gekko 解决需要对数组变量求和的约束的优化问题。因为这些数组很长,所以我不断收到错误消息:APM model error: string > 15000 characters

求和需要对三个变量求和:i in range(1, years)、n in range(1, i) 和 j in range(1,receptors)。随着它的编译,每个总和中包含的变量数量会增加。我想将代码保留为以下行的总和:

m.Equation(emissions[:,3] == sum(sum(sum(f[n,j]*-r[j,2]*unit *(.001*(i-n)**2 + 0.062*(i-n)) for i in range(years)) for n in range(i))for j in range(rec)))

但是,这些约束会导致一行超过 15,000 个字符的错误。

我以前使用 for 循环和中间体解决了这个问题,以解决“约束”环境之外的所有这些变量。它给了我正确的答案,但编译模型需要很长时间(模型构建需要 4 小时以上,解决它不到 3 分钟)。代码如下所示:

我希望避免 for 循环会提高效率,使我能够扩展模型,但我不确定增加 APM 模型字符串限制的方法。

我也对如何将中间体嵌入总和的其他建议持开放态度。

0 投票
1 回答
44 浏览

gekko - 在Python中使用APMonitor进行模型预测控制时,是否可以获得有偏和无偏预测控制变量的数据?

我正在尝试使用 APMonitor 为模型预测控制构建 python 代码。但是,我不想在第三方在线服务器上获得结果。因此,我想收集预测的有偏和无偏的数据,并自己在 Python 上绘制它们。

0 投票
1 回答
288 浏览

python - Python GEKKO:如何避免从 IPOPT “解决到可接受的水平”中引发错误。

我正在求解一组模拟方程(IMODE = 1,SOLVER = 3)。IPOPT 求解器求解到可接受的水平并退出,但 gekko 为此返回错误并返回我的解决方案。根据 IPOPT 文档,可接受级别的容差为 1.0e-6,这与 gekko 使用的 OTOL 和 RTOL 的默认值(以及我正在使用的值)相同。我能够修改 gekko.py 源代码以让我的答案返回,但这样做我绕过了所有类型的错误。我不希望绕过所有错误,因为它们显然有助于调试其他问题,例如不可行性。是否有我缺少的 m.solve 选项,或者当 IPOPT 解决到可接受的水平时不触发错误的另一种方法?