本文介绍如何用微分代数方程(DAEs)来表示和求解最优化问题。pyomo.dae包允许用户轻松地将详细的动态模型合并到优化框架中,并具有足够的灵活性来表示各种各样的微分方程,并演示了pyomo中包含的几种自动化解决方案技术。该方法采用同时离散化方法求解动态优化问题。
【1】建模组建
为了用Pyomo来代表DAE模型,Pyomo.dae包定义了两个新组件:
-
ContinuousSet:有界连续集
-
DerivativeVar:表示变量对连续集的导数
-
Integral:连续域上积分
导入包以访问建模组件:
from pyomo.environ import *
from pyomo.dae import *
连续域声明如下:
m.tf = Param(initialize=1)
m.t = ContinuousSet(bounds=(0,m.tf))
必须为模型中每个连续域声明单独的ContinuousSet,为动态模型中每个导数声明DerivativeVar,只能对作为变量索引集的ContinuousSet的变量求导。
m.u = Var(m.t, initialize=0)
m.x1 = Var(m.t)
m.x2 = Var(m.t)
m.dx1 = DerivativeVar(m.x1, wrt=m.t)
m.dx2 = DerivativeVar(m.x2)