Tensorflow FMU中的强化学习Agent

Tensorflow FMU中的强化学习Agent,tensorflow,keras,fmi,pyfmi,Tensorflow,Keras,Fmi,Pyfmi,我想在OpenModelica中构建的模型上培训强化学习代理。通过使用pyFMI,导入FMU、对其进行模拟并获得一些结果是没有问题的 我的问题是,我无法在每一步之后“暂停”模拟,获取状态,向我的RL代理提供状态,并将其建议的操作作为输入返回 ModelicaGym似乎是解决此问题的一种方法,它通过启动模拟、停止、获取结果、定义下一个动作并以最后一个结束时间作为开始时间再次启动模拟 读到隆德大学的一篇论文()让我想到了另一个想法: 与学员一起创建FMU,并通过PyFMI.Master连接两个FMU

我想在OpenModelica中构建的模型上培训强化学习代理。通过使用pyFMI,导入FMU、对其进行模拟并获得一些结果是没有问题的

我的问题是,我无法在每一步之后“暂停”模拟,获取状态,向我的RL代理提供状态,并将其建议的操作作为输入返回

ModelicaGym似乎是解决此问题的一种方法,它通过启动模拟、停止、获取结果、定义下一个动作并以最后一个结束时间作为开始时间再次启动模拟

读到隆德大学的一篇论文()让我想到了另一个想法:

与学员一起创建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中实现强化学习算法是不可能的,或者会造成其他麻烦

事实上,我有点惊讶没有发现其他人试图实现这一点

致意


Henrik

也许您可以更新您的问题,以便更清楚地了解学习代理是如何实现的,但我知道它可以从Python中使用

PyFMI文档中的示例说明了如何将函数用作FMU的输入。我想您可以在这个函数中从FMU检索信息,就像这样(未测试的伪代码):

您必须设置您的模型FMU,以便学习者应该更改的变量(
输入变量名称
)是输入变量可调参数。如果使用不带
variability=“tunable”
的参数,则无法在模拟过程中更改这些参数

我会首先尝试输入变量,因为可调参数处理起来有点复杂,在某些工具中可能无法正确实现

from pyfmi import load_fmu

define input_object(model):
  response = model.get('response_variable_name')
  return ('input_var_name', learner(response))

model = load_fmu('model.fmu')

res = model.simulate(final_time=30, input=input_object(model))