Агент обучения с подкреплением в FMU

Я хочу обучить агента обучения с подкреплением на модели, которую я создаю в OpenModelica. Используя pyFMI, легко импортировать FMU, смоделировать его и получить некоторые результаты.

Моя проблема в том, что у меня нет возможности «приостанавливать» симуляцию после каждого шага, получать состояния, кормить им своего RL-агента и возвращать его предлагаемое действие в качестве входных данных.

ModelicaGym кажется способом решить эту проблему путем запуска моделирования, остановки, получения результатов, определения следующего действия и повторного запуска моделирования с последним временем окончания в качестве времени начала.

Чтение статьи из Лундского университета (https://portal.research.lu.se/portal/files/7201641/pyfmi_tech.pdf) заставил меня задуматься о другой идее:

Создание FMU с Learner и подключение двух FMU через PyFMI.Master.

Что-то в этом роде:

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)

Управление схемой с помощью другого FMU с помощью ПИД-регулятора внутри работает, но возможно ли создать FMU с агентом обучения с подкреплением, включая все другие необходимые библиотеки, пакеты (Keras, Tensorflow?)

С моей точки зрения, такая реализация могла бы иметь довольно хорошую производительность, особенно для моделей и учащихся с более высокой сложностью, это может быть интересный подход.

Или я просто преследую какие-то мечты, потому что реализация алгоритма обучения с подкреплением в FMU невозможна или вызывает другие проблемы?

На самом деле, я был немного удивлен, что не нашел других людей, пытающихся реализовать это.

С наилучшими пожеланиями

Хенрик


person H Bode    schedule 19.12.2019    source источник


Ответы (1)


возможно, вы можете обновить свой вопрос, чтобы было более понятно, как реализован обучающий агент, но я понимаю, что его можно использовать из Python?

Пример fmu_with_input_function.py из документации PyFMI показывает, как использовать функцию в качестве входных данных для FMU. Я полагаю, вы можете получить информацию из FMU в этой функции вот так (непроверенный псевдокод):

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))

Вам необходимо настроить FMU своей модели так, чтобы переменные, которые ваш ученик должен изменять (input_var_name), были входными переменными или настраиваемыми параметрами. Если вы используете параметры без variability="tunable", вы не можете изменить их в процессе моделирования.

Сначала я бы попробовал с входными переменными, потому что настраиваемые параметры немного сложнее обрабатывать и могут быть некорректно реализованы в некоторых инструментах.

person mklingn    schedule 20.12.2019