“扁平化”一个Pyomo模型
一个用于“扁平化”块层次模型中组件相对于公共索引集的模块 |
扁平化模型是什么意思?
在访问块结构模型中的组件时,我们使用
component_objects 或 component_data_objects 来访问特定
Component 或 ComponentData 类型的所有对象。
生成的对象可以被视为模型的“扁平化”表示,
因为它们可以在不了解模型块结构的情况下访问。
这些方法非常有用,但使用它们访问特定组件仍然具有挑战性。
具体来说,我们经常希望访问“由某个集合索引的所有组件”,
或“在此集合的特定索引处的所有组件数据”。
此外,我们经常希望生成由我们特定集合索引的块中的组件,
因为这些组件可以被视为“隐式索引”的集合。
pyomo.dae.flatten 模块旨在通过提供工具来生成由用户提供的集合显式或隐式索引的所有组件,以解决此用例。
当我们说“扁平化模型”时,我们的意思是“递归生成模型中的所有组件”,其中组件只能由用户指定的索引集索引(或者根本没有索引)。
数据结构
返回的组件要么是ComponentData对象,用于未被任何提供的集合索引的组件,要么是对切片的引用,用于被提供的集合显式或隐式索引的组件。切片是必要的,因为它们可以编码“隐式索引”——即组件包含在索引块中。自然地返回对这些切片的引用,以便它们可以像任何其他组件一样被访问和操作。
引用
如果您在研究中使用了pyomo.dae.flatten模块,我们将非常感谢您引用以下论文,该论文详细介绍了使用此功能的动机和示例。
@article{parker2023mpc,
title = {Model predictive control simulations with block-hierarchical differential-algebraic process models},
journal = {Journal of Process Control},
volume = {132},
pages = {103113},
year = {2023},
issn = {0959-1524},
doi = {https://doi.org/10.1016/j.jprocont.2023.103113},
url = {https://www.sciencedirect.com/science/article/pii/S0959152423002007},
author = {Robert B. Parker and Bethany L. Nicholson and John D. Siirola and Lorenz T. Biegler},
}