gekko - Python Gekko - 如何将内置最大函数与顺序求解器一起使用?

标签 gekko

在 Python 中按顺序求解模型时,GEKKO(即 IMODE >= 4)在使用 GEKKO 附带的 max2max3 函数时失败。

这适用于以下用例,其中 np.maximum 或标准 max 函数将 GEKKO 参数视为数组,这并不总是预期用途或可以创建例如,与整数比较时会出现错误。

最小代码示例:

from gekko import GEKKO
import numpy as np

m = GEKKO()
m.time = np.arange(0,20)

y = m.Var(value=5)
forcing = m.Param(value=np.arange(-5,15))

m.Equation(y.dt()== m.max2(forcing,0) * y)
m.options.IMODE=4
m.solve(disp=False)

返回:

Exception:  @error: Degrees of Freedom
 * Error: DOF must be zero for this mode
 STOPPING...

通过查看代码,我知道 max2max3 在方程中都使用了不等式表达式,这可以理解地引入了自由度,所以这个功能从来都不是有意的?可以有一些解决方法来解决这个问题吗?

任何帮助将不胜感激!

注意: 我希望这不是 How to define maximum of Intermediate and another value in Python Gekko, when using sequential solver? 的重复项,而是提出一个更简洁且不同的问题,本质上是同一个问题。

最佳答案

您可以通过切换到 IMODE=6 获得成功的解决方案。 IMODE=4(同时仿真)或 IMODE=7 顺序仿真需要零自由度。 m.max2()m.max3() 都需要自由度和优化器来求解。

from gekko import GEKKO
import numpy as np

m = GEKKO(remote=False)
m.time = np.arange(0,20)

y = m.Var(value=5)
forcing = m.Param(value=np.arange(-5,15))

m.Equation(y.dt()== -m.max2(forcing,0) * y)
m.options.IMODE=6
m.solve(disp=True)

方程y.dt()== -m.max2(forcing,0) * y呈指数增长超出机器精度,因此我将方程转换为可以求解的方程。

关于gekko - Python Gekko - 如何将内置最大函数与顺序求解器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65099694/

相关文章:

python - 神经网络直线——GEKKO

python - GEKKO 补料分批生物 react 器的 ODE 方程组不可行

python - 在 GEKKO 中设置动态模拟的初始值和稳态结果

optimization - 如何修复使用滚动原理的 Gekko 优化中的 "Solution Not Found"错误

python - 从 PuLP 到 GEKKO : Syntax Mapping for Constraints, 目标函数

python - 如何使用 Python Gekko 解决绝对值 abs() 目标?

python - 使用 Gekko 划分楼层

需要切割数据的 Gekko ARX 模型

python - 在 Gekko 模型中使用 Tensorflow 神经网络

python - 是否可以在真实的机器人上在线使用这种 gekko MPC 方法?