gpt4 book ai didi

gekko - Python Gekko - 如何在顺序求解器中使用内置的最大值函数?

转载 作者:行者123 更新时间:2023-12-04 08:29:26 27 4
gpt4 key购买 nike

当使用 max2 在 Python GEKKO 中按顺序求解模型(即 IMODE >= 4)失败时和 max3 GEKKO 附带的功能。
这是针对用例,其中 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com