exponenta event banner

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

Назначьте информацию о пути блока агента и создайте среду обучения армированию для модели 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.

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

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

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

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

Многоагентное моделирование не поддерживается для сред MATLAB.

Блоки агентов могут находиться внутри ссылки на модель. Дополнительные сведения о настройке блока агента для обучения усилению см. в разделе Агент RL.

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

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

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

Дополнительные сведения см. в разделе getObservationInfo.

Сведения о действии, указанные как объект спецификации или массив ячеек.

Если mdl содержит один блок агента, укажите actInfo как rlNumericSpec или rlFiniteSetSpec объект.

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

Дополнительные сведения см. в разделе getActionInfo.

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

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

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

свернуть все

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

Дополнительные сведения об учебных средах для усиления см. в разделе Создание учебных сред для усиления Simulink.

Представлен в R2019a