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 из примера 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, соответственно.

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

свернуть все

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

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

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

Если 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
Для просмотра документации необходимо авторизоваться на сайте