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 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, соответственно.

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

свернуть все

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

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

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

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

mdl может содержать блоки RL Agent, путь которых не включен в 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