在将带有微分或积分组件的Pyomo模型发送到求解器之前,必须先离散化。DAE将问题中的连续域离散化,并引入近似于离散点上的导数和积分的等式约束,其离散化方案:有限差分和配置,此方案仅适合微分。
【1】有限差分变换
- ‘nfe’:需要离散化的有限元点的数目。默认值是10。
- ‘wrt’:指定离散化的连续集,如果未指定则将对每个ContinuousSet应用相同模式。
- ‘scheme’:指定应用的有限差分方法,默认向后差分方法。
#向后差分离散化
>>> discretizer = TransformationFactory('dae.finite_difference')
>>> discretizer.apply_to(model,nfe=20,wrt=model.time,scheme='BACKWARD')
#为离散模型添加约束
>>> def _sum_limit(m):
... return sum(m.x1[i] for i in m.time) <= 50
>>> model.con_sum_limit = Constraint(rule=_sum_limit)
#求解离散模型
>>> solver = SolverFactory('ipopt')
>>> results = solver.solve(model)
【2】配置变换
该变换利用正交配置对模型中的微分方程进行离散,主要两种方法:带有高斯-拉多根或高斯-勒让德根的拉格朗日多项式。