rlSimulinkEnv

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

Описание

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

пример

env = rlSimulinkEnv(mdl,agentBlocks) создает объект env среды обучения с подкреплением для модели Simulink mdl. agentBlocks содержит пути к одному или нескольким блокам агента обучения с подкреплением в mdl. Если вы используете этот синтаксис, каждый блок агента должен уже сослаться на объект агента в рабочей области MATLAB®.

пример

env = rlSimulinkEnv(mdl,agentBlocks,obsInfo,actInfo) создает объект env среды обучения с подкреплением для модели mdl. Эти два массива ячеек obsInfo и actInfo должен содержать спецификации наблюдений и спецификации действия для каждого блока агента в mdl, в том же порядке, когда они появляются в agentBlocks.

env = rlSimulinkEnv(___,'UseFastRestart',fastRestartToggle) создает объект env среды обучения с подкреплением и дополнительно включает быстрый перезапуск. Используйте этот синтаксис после любого из входных параметров в предыдущих синтаксисах.

Примеры

свернуть все

Создайте окружение 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';

Присвойте информацию о блоке 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, соответственно.

Входные параметры

свернуть все

Имя модели Simulink в виде строки или вектора символов.

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

Если mdl содержит один блок агента, задайте agentBlocks как строка или вектор символов, содержащий блок path.

Если mdl содержит несколько блоков агента, задайте agentBlocks как массив строк, где каждый элемент содержит путь одного блока агента.

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

Симуляция мультиагента не поддерживается для сред MATLAB.

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

Информация о наблюдении в виде массива спецификации возражает или массив ячеек.

Если mdl содержит один блок агента, задайте obsInfo как массив rlNumericSpec объекты, массив rlFiniteSetSpec объекты или соединение таких объектов.

Если mdl содержит несколько блоков агента, задайте obsInfo как массив ячеек, где каждая ячейка содержит массив объектов спецификации для соответствующих блоков в agentBlocks.

Для получения дополнительной информации смотрите getObservationInfo.

Информация о действии в виде массива спецификации возражает или массив ячеек.

Если mdl содержит один блок агента, задайте actInfo как массив rlNumericSpec объекты, массив rlFiniteSetSpec объекты или соединение таких объектов.

Если mdl содержит несколько блоков агента, задайте actInfo как массив ячеек, где каждая ячейка содержит массив объектов спецификации для соответствующих блоков в agentBlocks.

Для получения дополнительной информации смотрите getActionInfo.

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

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

Выходные аргументы

свернуть все

Среда обучения с подкреплением, возвращенная как SimulinkEnvWithAgent объект.

Для получения дополнительной информации о средах обучения с подкреплением смотрите, Создают окружения Simulink для Обучения с подкреплением.

Введенный в R2019a