首页 > 解决方案 > 更改 FMU 中的方程组以进行模型交换

问题描述

我们想发布一个将强化学习集成到智能电网优化的开源项目。我们使用 OpenModelica 作为 GUI,PyFMI 用于导入 Python 和 Gym。

几乎所有东西都在运行,但是在模拟过程中连接或断开附加负载的可能性丢失了。我们现在所能做的就是改变现有负载的参数,这提供了一些灵活性,但远不如打开和关闭负载的可能性。

在 OpenModelica 中使用实现的开关并不是一个真正的选择。他们只是在这个位置放置一个电阻器,使其电阻非常低或非常高。首先,它并没有真正解耦,其次,高电阻使 ODE 系统变得僵硬,这使得解决它变得非常困难(且成本高昂)。在测试中,我们的 LSODA 求解器(在刚性情况下基本上是 BDF)经常出现数值错误,无论雅可比是如何计算的(通过方向导数或有限差分分析)。

有谁知道我们如何实现真正的“切换效果”?

此致,

亨里克

标签: modelicaopenmodelicaswitchingfmi

解决方案


仿真过程中组件的理想连接和断开需要结构可变性,Modelica(尚)不完全支持。另请参阅此答案https://stackoverflow.com/a/30487641/8725275

该问题的一种解决方案是提前转换所有可能的模型结构,如果满足某些条件,则切换仿真模型。由于涉及一些开销,因此这种方法仅在模型不经常切换时才有意义。

有一个 python 框架,它是为支持这个过程而构建的:DySMo。该工具由 Alexandra Mehlhase 编写,他发表了许多关于结构可变性的有趣出版物,例如,一个有益使用可变结构建模来增强现有火箭模型的示例

Moritz Stueber的论文Simulating a Variable-structure Model of an Electric Vehicle for Battery Life Estimation Using Modelica/Dymola and Python也值得一看。它包含关于可变结构系统和可用解决方案的精彩介绍。


推荐阅读