我看到here表示,imode = 3等同于稳态仿真(我猜为imode = 2),只是允许附加自由度。
我如何决定使用imode = 3而不是imode = 2?
我正在使用imode = 2进行优化,其中我定义了由求解器计算的变量,以使用m.Var和其他使用m.Param来满足约束。我需要对变量进行哪些更改才能使用imode = 3?
答案 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的其他信息:
最诚挚的问候,
约翰·海登人