【问题标题】:Pyomo.dae - Solving a system of DAEs with Casadi solverPyomo.dae - 使用 Casadi 求解器求解 DAE 系统
【发布时间】:2021-04-19 13:02:01
【问题描述】:

我正在尝试使用 pyomo 解决 DAE 系统。 这是一个玩具示例

from pyomo.environ import *
from pyomo.dae import *

m = ConcreteModel()

m.r = ContinuousSet(bounds = (0., 1.))
m.t = ContinuousSet(bounds = (0., 5.))
m.c = Var(m.r, m.t)
m.dcdt = DerivativeVar(m.c, wrt = m.t)

discretizer = TransformationFactory('dae.finite_difference')
discretizer.apply_to(m, nfe=20, wrt = m.r, scheme = 'BACKWARD')

# setting initial conditions
m.c[:, 0].fix(5)

def _dae_rule(m, r, t):
    return 0 == - m.c[r, t] - m.dcdt[r, t] # note that rewriting to ODE is not desired

m.ode = Constraint(m.r, m.t, rule = _dae_rule)

sim = Simulator(m, package = "casadi")
tsim, profiles = sim.simulate(numpoints=100, integrator="idas")

不幸的是,执行导致错误消息

DAE_Error: Currently the simulator may only be applied to Pyomo models with a single ContinuousSet

怎么会?只有m.t 是ContinuousSet?

手动删除 ContinuousSet,而不是首先使用 DiscreteSet 会产生错误消息

DAE_Error: Cannot simulate a differential equation with multiple DerivativeVars

我不明白。每个方程只依赖于它自己的导数?

另外,如果我还要离散化 m.t,我可以使用任何可能有效的替代求解器吗?

非常感谢:)

【问题讨论】:

    标签: python ode pyomo


    【解决方案1】:

    根据 Simulator 上的文档,它仅支持具有 1 个 ContinuousSet 的模型,并且您有 m.r 和 m.t。也许您可以将 DAE 系统定义为 t 的函数,在 r 的离散值处,反之亦然。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2020-04-03
      • 2017-12-13
      相关资源
      最近更新 更多