exponenta event banner

SimulinkEnvWithAgent

Усиливающая среда обучения с динамической моделью, реализованной в Simulink

Описание

SimulinkEnvWithAgent объект представляет среду обучения армированию, использующую динамическую модель, реализованную в Simulink ®. Объект среды действует как интерфейс, такой, что при вызовеsim или trainэти функции, в свою очередь, вызывают модель Simulink для создания опыта для агентов.

Создание

Создание SimulinkEnvWithAgent используйте одну из следующих функций.

  • rlSimulinkEnv - Создание среды с использованием модели Simulink по крайней мере с одним блоком агента RL.

  • createIntegratedEnv - использование ссылочной модели в качестве среды обучения армированию.

  • rlPredefinedEnv - создание предварительно определенной среды обучения армированию.

Свойства

развернуть все

Имя модели Simulink, указанное как строковый или символьный вектор. Указанная модель должна содержать один или несколько блоков агента RL.

Пути к блокам агента, указанные как строковый или строковый массив.

Если Model содержит один блок агента RL для обучения, затем AgentBlock - строка, содержащая путь к блоку.

Если Model содержит несколько блоков агента RL для обучения, затем AgentBlock - строковый массив, где каждый элемент содержит путь к одному блоку агента.

Model может содержать блоки агента RL, путь к которым не включен в AgentBlock. Такие блоки агентов ведут себя как часть среды и выбирают действия на основе своих текущих политик. При звонке sim или train, опыт этих агентов не возвращается, а их политики не обновляются.

Блоки агентов могут находиться внутри ссылки на модель. Дополнительные сведения о настройке блока агента для обучения усилению см. в разделе Агент RL.

Сбросить поведение среды, указанное как дескриптор функции или анонимный дескриптор функции. Функция должна иметь одну Simulink.SimulationInput входной аргумент и один Simulink.SimulationInput выходной аргумент.

Функция сброса задает начальное состояние среды Simulink. Например, можно создать функцию сброса, которая рандомизирует определенные состояния блоков так, чтобы каждый учебный эпизод начинался с различных начальных условий.

При наличии существующей функции сброса myResetFunction на тракте MATLAB ®, установкаResetFcn с помощью дескриптора функции.

env.ResetFcn = @(in)myResetFunction(in);

Если поведение сброса простое, его можно реализовать с помощью анонимного дескриптора функции. Например, следующий код задает переменную x0 на случайное значение.

env.ResetFcn = @(in) setVariable(in,'x0',rand());

sim функция вызывает функцию сброса для сброса среды в начале каждого моделирования, и train функция вызывает его в начале каждого учебного эпизода.

Параметр для переключения быстрого перезапуска, указанный как "on" или "off". Быстрый перезапуск позволяет выполнять итеративное моделирование без компиляции модели или прекращения моделирования каждый раз.

Дополнительные сведения о быстром перезапуске см. в разделе Как быстрый перезапуск улучшает итерационное моделирование (Simulink).

Функции объекта

trainПодготовка обучающих агентов по усилению в определенной среде
simМоделирование обученных агентов по обучению подкреплению в определенной среде
getObservationInfoПолучение спецификаций данных наблюдения из среды обучения армированию или агента
getActionInfoПолучение спецификаций данных действий из среды обучения подкреплению или агента

Примеры

свернуть все

Создайте среду Simulink с использованием обучаемого агента и соответствующей модели Simulink из примера Создать среду Simulink и агент поезда.

Загрузите агент в рабочую область MATLAB ®.

load rlWaterTankDDPGAgent

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

env = rlSimulinkEnv('rlwatertank','rlwatertank/RL Agent')
env = 
SimulinkEnvWithAgent with properties:

           Model : rlwatertank
      AgentBlock : rlwatertank/RL Agent
        ResetFcn : []
  UseFastRestart : on

Проверьте среду, выполнив короткое моделирование два раза.

validateEnvironment(env)

Теперь можно обучать и моделировать агента в среде с помощью train и simсоответственно.

Для этого примера рассмотрим rlSimplePendulumModel Модель Simulink. Модель представляет собой простой бесфрикционный маятник, который первоначально висит в нисходящем положении.

Откройте модель.

mdl = 'rlSimplePendulumModel';
open_system(mdl)

Создать rlNumericSpec и rlFiniteSetSpec объекты для данных наблюдения и действий соответственно.

obsInfo = rlNumericSpec([3 1]) % vector of 3 observations: sin(theta), cos(theta), d(theta)/dt
obsInfo = 
  rlNumericSpec with properties:

     LowerLimit: -Inf
     UpperLimit: Inf
           Name: [0x0 string]
    Description: [0x0 string]
      Dimension: [3 1]
       DataType: "double"

actInfo = rlFiniteSetSpec([-2 0 2]) % 3 possible values for torque: -2 Nm, 0 Nm and 2 Nm
actInfo = 
  rlFiniteSetSpec with properties:

       Elements: [3x1 double]
           Name: [0x0 string]
    Description: [0x0 string]
      Dimension: [1 1]
       DataType: "double"

Можно использовать точечную нотацию для назначения значений свойств для rlNumericSpec и rlFiniteSetSpec объекты.

obsInfo.Name = 'observations';
actInfo.Name = 'torque';

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

agentBlk = [mdl '/RL Agent'];
env = rlSimulinkEnv(mdl,agentBlk,obsInfo,actInfo)
env = 
SimulinkEnvWithAgent with properties:

           Model : rlSimplePendulumModel
      AgentBlock : rlSimplePendulumModel/RL Agent
        ResetFcn : []
  UseFastRestart : on

Также можно включить функцию сброса с помощью точечной нотации. В этом примере случайная инициализация theta0 в рабочем пространстве модели.

env.ResetFcn = @(in) setVariable(in,'theta0',randn,'Workspace',mdl)
env = 
SimulinkEnvWithAgent with properties:

           Model : rlSimplePendulumModel
      AgentBlock : rlSimplePendulumModel/RL Agent
        ResetFcn : @(in)setVariable(in,'theta0',randn,'Workspace',mdl)
  UseFastRestart : on

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

Загрузите агенты в рабочую область MATLAB.

load rlCollaborativeTaskAgents

Создание среды для rlCollaborativeTask модель, которая имеет два блока агентов. Поскольку агенты используются двумя блоками (agentA и agentB) уже находятся в рабочей области, для создания среды не требуется передавать их спецификации наблюдения и действий.

env = rlSimulinkEnv('rlCollaborativeTask',["rlCollaborativeTask/Agent A","rlCollaborativeTask/Agent B"])
env = 
SimulinkEnvWithAgent with properties:

           Model : rlCollaborativeTask
      AgentBlock : [
                     rlCollaborativeTask/Agent A
                     rlCollaborativeTask/Agent B
                   ]
        ResetFcn : []
  UseFastRestart : on

Теперь можно моделировать или обучать агентов в среде с помощью sim или trainсоответственно.

Использовать предварительно определенные 'SimplePendulumModel-Continuous' ключевое слово для создания непрерывной простой среды обучения маятниковой модели усиления.

env = rlPredefinedEnv('SimplePendulumModel-Continuous')
env = 
SimulinkEnvWithAgent with properties:

           Model : rlSimplePendulumModel
      AgentBlock : rlSimplePendulumModel/RL Agent
        ResetFcn : []
  UseFastRestart : on

В этом примере показано, как использовать createIntegratedEnv создание объекта среды, начиная с модели Simulink, реализующей систему, с которой работает агент. Такую систему часто называют установкой, системой с разомкнутым контуром или эталонной системой, в то время как всю (интегрированную) систему, включающую агент, часто называют системой с замкнутым контуром.

Для этого примера используйте модель летающего робота, описанную в документе Train DDPG Agent to Control Flying Robot, в качестве эталонной системы (с разомкнутым контуром).

Откройте модель летающего робота.

open_system('rlFlyingRobotEnv')

Инициализируйте переменные состояния и время выборки.

% initial model state variables
theta0 = 0;
x0 = -15;
y0 = 0;

% sample time
Ts = 0.4;

Создание модели Simulink IntegratedEnv содержит модель летающего робота, соединенную по замкнутому контуру с блоком агента. Функция также возвращает объект среды обучения армированию. env используется для обучения.

env = createIntegratedEnv('rlFlyingRobotEnv','IntegratedEnv')
env = 
SimulinkEnvWithAgent with properties:

           Model : IntegratedEnv
      AgentBlock : IntegratedEnv/RL Agent
        ResetFcn : []
  UseFastRestart : on

Функция также может вернуть путь к блоку агента RL в новой интегрированной модели, а также спецификации наблюдения и действий для ссылочной модели.

[~,agentBlk,observationInfo,actionInfo] = createIntegratedEnv('rlFlyingRobotEnv','IntegratedEnv')
agentBlk = 
'IntegratedEnv/RL Agent'
observationInfo = 
  rlNumericSpec with properties:

     LowerLimit: -Inf
     UpperLimit: Inf
           Name: "observation"
    Description: [0x0 string]
      Dimension: [7 1]
       DataType: "double"

actionInfo = 
  rlNumericSpec with properties:

     LowerLimit: -Inf
     UpperLimit: Inf
           Name: "action"
    Description: [0x0 string]
      Dimension: [2 1]
       DataType: "double"

Возврат пути и спецификаций блока полезен в случаях, когда необходимо изменить описания, пределы или имена в observationInfo и actionInfo. После изменения спецификаций можно создать среду из интегрированной модели. IntegratedEnv с использованием rlSimulinkEnv функция.

Представлен в R2019a