我想在我在 OpenModelica 中构建的模型上训练强化学习代理。通过使用pyFMI,导入FMU,模拟一下,得到一些结果是没有问题的。
我的问题是,我不可能在每一步之后“暂停”模拟,获取状态,用它喂给我的 RL 代理并返回他提议的动作作为输入。
ModelicaGym 似乎是通过启动模拟、停止、获取结果、定义下一个动作并以最后的结束时间作为开始时间再次开始模拟来解决这个问题的一种方法。
阅读隆德大学的一篇论文 ( https://portal.research.lu.se/portal/files/7201641/pyfmi_tech.pdf ) 让我想到了另一个想法:
使用 Learner 创建一个 FMU,并通过 PyFMI.Master 连接两个 FMU。
这些方面的东西:
from pyfmi import load_fmu
from pyfmi.master import Master
controller = load_fmu("controller.fmu")
Circuit = load_fmu("circuit.fmu")
connections = [( Circuit ,"currentSensor1.i",controller ,"feedback1.u2"),
(controller ,"PID.y",Circuit ,"signalVoltage1.v")]
models = [Circuit , controller]
master_simulator = Master(models , connections)
res = master_simulator.simulate(final_time =1)
使用内部带有 PID 控制器的其他 FMU 控制电路是可行的,但是是否可以使用强化学习代理创建 FMU,包括所有其他所需的库、包(Keras、Tensorflow?)
根据我的观点,这样的实现可以有很好的性能,特别是对于复杂度更高的模型和学习器,这可能是一种有趣的方法。
还是我只是在追逐一些梦想,因为在 FMU 中实现强化学习算法是不可能的,或者造成了其他麻烦?
实际上,我对没有发现其他人试图实现这一点感到有点惊讶。
最好的祝福
亨里克