使用Gekko,是否可以创建子模型或合并模型?
举个例子,有两个模型(m1 和 m2),它们可以独立工作和测试。其中一个模型有一个外部变量,比如说 m2 和 varX。现在假设 varX 是一个常量。
接下来,我想要把 m1 的输出作为 varX 的输入(这样 varX 就变成内部变量了),然后我就可以得到一个独特的模型,而不需要复制粘贴所有的代码。
1 个回答
0
你可以创建两个模型,并把第一个模型的结果导出到第二个模型中使用。下面是一个例子,创建了两个模型 m1
和 m2
。第一个模型被求解后,会得到一个值 x1
,这个值通过 output_m1
赋值给 x1.value[0]
。这个值就是第二个模型的输入参数,写作 varX = m2.Param(value=output_m1)
。
from gekko import GEKKO
# Model 1 (m1)
m1 = GEKKO(remote=False)
x1 = m1.Var(value=1, lb=0)
m1.Equation(x1**2 == 4)
m1.solve(disp=False)
output_m1 = x1.value[0]
print(f"Output from m1: {output_m1}")
# Model 2 (m2)
m2 = GEKKO(remote=False)
varX = m2.Param(value=output_m1)
x2 = m2.Var(value=1)
m2.Equation(2*x2 - varX == 0)
m2.solve(disp=False)
print(f"Output from m2: {x2.value[0]}")
这段代码的输出结果是:
Output from m1: 2.0000000929
Output from m2: 1.0
如果有多个解的话,varX
的值也可以更新,比如可以用 varX.value=output_m1
来设置。