SimulinkEnvWithAgent

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

Описание

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

Создание

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

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

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

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

Свойства

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

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

Пути к блоку Agent в виде массива строк или массива строк.

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

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

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

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

Сбросьте поведение для среды в виде указателя анонимной функции или указателя на функцию. Функция должна иметь один 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 Agent. Поскольку агент, используемый блоком уже, находится в рабочей области, вы не должны передавать спецификации наблюдений и спецификации действия, чтобы создать среду.

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';

Присвойте информацию о блоке path агента и создайте среду обучения с подкреплением для модели 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, которая реализует систему с который агент. Такая система часто упоминается как объект, система разомкнутого контура или ссылочная система, в то время как целая (интегрированная) система включая агента часто упоминается как система с обратной связью.

В данном примере используйте летающую модель робота, описанную в, Обучают Агента DDPG Управлять Летающим Роботом как ссылкой (разомкнутый контур) система.

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

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

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

[~,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"

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

Введенный в R2019a