Gekko优化问题中IMODE的选择

时间:2019-04-28 22:13:15

标签: python-3.x gekko

我看到here表示,imode = 3等同于稳态仿真(我猜为imode = 2),只是允许附加自由度。

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

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

1 个答案:

答案 0 :(得分:2)

尼拉德里,

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

这里是一个例子:

masterKey = '18293'
firstKey  = "".join([e for e in masterKey if int(e) % 2 == 0])
secondKey = "".join([e for e in masterKey if int(e) % 2 != 0])

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

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的其他信息:

最诚挚的问候,

约翰·海登人