SimulinkEnvWithAgent

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

Описание

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

Создание

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

  • rlSimulinkEnv - Создайте окружение с помощью модели Simulink, по крайней мере, с одним блоком RL Agent.

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

  • rlPredefinedEnv - Создайте предопределённое окружение обучения с подкреплением.

Свойства

расширить все

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

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

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

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

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

Блоки агента могут находиться внутри модели-ссылки. Для получения дополнительной информации о конфигурировании блока агента для обучения с подкреплением см. RL Agent.

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

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

Если у вас есть существующая функция сброса myResetFunction на MATLAB® путь, set 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 из примера Create Simulink Environment и Train Agent.

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

load rlWaterTankDDPGAgent

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

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, чтобы управлять летающим роботом в качестве ссылки (разомкнутого контура).

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

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