使用Gekko,是否可以创建子模型或合并模型?

2 投票
1 回答
18 浏览
提问于 2025-04-14 16:33

举个例子,有两个模型(m1 和 m2),它们可以独立工作和测试。其中一个模型有一个外部变量,比如说 m2 和 varX。现在假设 varX 是一个常量。

接下来,我想要把 m1 的输出作为 varX 的输入(这样 varX 就变成内部变量了),然后我就可以得到一个独特的模型,而不需要复制粘贴所有的代码。

1 个回答

0

你可以创建两个模型,并把第一个模型的结果导出到第二个模型中使用。下面是一个例子,创建了两个模型 m1m2。第一个模型被求解后,会得到一个值 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 来设置。

撰写回答