modelica - 更改 FMU 中的方程组以进行模型交换
问题描述
我们想发布一个将强化学习集成到智能电网优化的开源项目。我们使用 OpenModelica 作为 GUI,PyFMI 用于导入 Python 和 Gym。
几乎所有东西都在运行,但是在模拟过程中连接或断开附加负载的可能性丢失了。我们现在所能做的就是改变现有负载的参数,这提供了一些灵活性,但远不如打开和关闭负载的可能性。
在 OpenModelica 中使用实现的开关并不是一个真正的选择。他们只是在这个位置放置一个电阻器,使其电阻非常低或非常高。首先,它并没有真正解耦,其次,高电阻使 ODE 系统变得僵硬,这使得解决它变得非常困难(且成本高昂)。在测试中,我们的 LSODA 求解器(在刚性情况下基本上是 BDF)经常出现数值错误,无论雅可比是如何计算的(通过方向导数或有限差分分析)。
有谁知道我们如何实现真正的“切换效果”?
此致,
亨里克
解决方案
仿真过程中组件的理想连接和断开需要结构可变性,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也值得一看。它包含关于可变结构系统和可用解决方案的精彩介绍。
推荐阅读
- scala - 中断scala并行收集
- python - 在 Python 中调整大小的图像中定位元素
- git - 如何使用 git 从我的 PC 推送到多个 GitHub 帐户?(不同的存储库)
- metpy - 2 级雷达文件“不在注册表中”
- android - 安卓 | 科特林 | PreferenceFragmentCompat 与 BottomNavigationView 重叠
- r - 替换有0行,数据有1400?
- outlook - 防止 Outlook 2016 Windows 调整表格单元格的大小
- python - 如何在同一个 Pandas DataFrame 中切换列值
- model - 如何使用 Fairlearn 指标来决定一项功能是否有偏见?
- amazon-web-services - AWS IoT 1 单击项目 SAM - 400 InvalidRequestException 错误