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