4

我在这里看到 imode=3 等效于稳态模拟(我猜 imode=2),除了允许额外的自由度。

我如何决定使用 imode=3 而不是 imode=2?

我正在使用 imode=2 进行优化,其中我正在定义求解器计算的变量以满足使用 m.Var 和其他使用 m.P​​aram 的约束。我需要对变量进行哪些更改才能使用 imode=3 ?

4

1 回答 1

3

尼拉德里,

IMODE 2 适用于具有多个数据点的稳态问题。

这是一个例子:

from gekko import GEKKO
import numpy as np

xm = np.array([0,1,2,3,4,5])
ym = np.array([0.1,0.2,0.3,0.5,1.0,0.9])

m = GEKKO()

m.x = m.Param(value=np.linspace(-1,6))
m.y = m.Var()
m.options.IMODE=2
m.cspline(m.x,m.y,xm,ym)
m.solve(disp=False)

这是具有多个数据点的三次样条近似。当您切换到 IMODE 3 时,它非常相似,但它只考虑您模型的一个实例。所有值属性应该只有 1 个值,例如当您优化三次样条以找到最大值时。

p = GEKKO()
p.x = p.Var(value=1,lb=0,ub=5)
p.y = p.Var()
p.cspline(p.x,p.y,xm,ym)
p.Obj(-p.y)

p.solve(disp=False)

以下是有关 IMODE 的其他信息:

此致,

约翰·赫登格伦

于 2019-04-28T22:20:04.593 回答