createIntegratedEnv

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

Описание

env = createIntegratedEnv(refModel,newModel) создает Simulink® модель с именем, заданным как newModel и возвращает объект окружения обучения с подкреплением, env, для этой модели. Новая модель содержит блок RL Agent и использует образец модели refModel как окружение обучения с подкреплением для настройки агента, заданного этим блоком.

пример

[env,agentBlock,obsInfo,actInfo] = createIntegratedEnv(___) возвращает путь блока к блоку RL Agent в новой модели и спецификации данных о наблюдениях и действиях для образца модели, obsInfo и actInfo, соответственно.

пример

[___] = createIntegratedEnv(___,Name,Value) создает модель и интерфейс окружения с использованием информации о порте, наблюдении и действии, заданной с помощью одной или нескольких Name,Value аргументы в виде пар.

Примеры

свернуть все

В этом примере показано, как использовать createIntegratedEnv создать объект окружения, начиная с модели Simulink, которая реализует систему, с которой работает агент. Такая система часто упоминается как объект, разомкнутый контур система или ссылка система, в то время как вся (интегрированная) система, включая агента, часто упоминается как система с обратной связью.

В этом примере используйте модель летающего робота, описанную в Train DDPG Agent, чтобы управлять летающим роботом в качестве ссылки (разомкнутого контура).

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

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

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

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

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

В этом примере показано, как вызвать createIntegratedEnv использование пар "имя-значение" для задания имен портов.

Первый аргумент createIntegratedEnv - имя ссылочной модели Simulink, содержащей систему, с которой должен взаимодействовать агент. Такая система часто упоминается как объект или разомкнутая система. В данном примере эталонная система является моделью бака с водой.

Откройте модель бака с водой без разомкнутого контура.

open_system('rlWatertankOpenloop.slx')

Установите шаг расчета дискретного блока интегратора, используемого для генерации наблюдения, чтобы симуляция могла выполняться.

Ts = 1;

Порт входа называется u (вместо action), и первый и третий выходные порты называются y и stop (вместо observation и isdone). Задайте имена портов, используя пары "имя-значение".

env = createIntegratedEnv('rlWatertankOpenloop','IntegratedWatertank',...
    'ActionPortName','u','ObservationPortName','y','IsDonePortName','stop')
env = 
SimulinkEnvWithAgent with properties:

           Model : IntegratedWatertank
      AgentBlock : IntegratedWatertank/RL Agent
        ResetFcn : []
  UseFastRestart : on

Новая модель IntegratedWatertank содержит образец модели, соединенную в системе с блоком агента. Функция также возвращает объект окружения обучения с подкреплением, который будет использоваться для обучения.

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

свернуть все

Образец модели, заданная как строковый или символьный вектор. Это модель Simulink, реализующая систему, с которой должен взаимодействовать агент. Такая система часто упоминается как объект, система разомкнутого контура или ссылка, в то время как вся (интегрированная) система, включая агент, часто упоминается как система замкнутого цикла. Новая модель Simulink использует этот образец модели как динамическую модель окружения для обучения с подкреплением.

Новое имя модели, заданное как строковый или символьный вектор. createIntegratedEnv создает модель Simulink с таким именем, но не сохраняет модель.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'IsDonePortName',"stopSim" устанавливает stopSim порт образца модели как источник isdone сигнал.

Образец моделили, заданная как разделенная разделенными запятой парами, состоящая из 'ObservationPortName' и строка или вектор символов. Задайте ObservationPortName когда имя выходного порта сигнала наблюдения образца модели не "observation".

Образец модели, заданная как разделенная разделенными запятой парами, состоящая из 'ActionPortName' и строка или вектор символов. Задайте ActionPortName когда имя входного порта действия образца модели не "action".

Образец модели, заданная как разделенная разделенными запятой парами, состоящая из 'RewardPortName' и строка или вектор символов. Задайте RewardPortName когда имя выходного порта вознаграждения образца модели не "reward".

Образец модели завершил создание флага имени выходного порта, заданного как разделенная разделенными запятой парами, состоящая из 'IsDonePortName' и строка или вектор символов. Задайте IsDonePortName когда имя завершенного выходного порта флага образца модели не "isdone".

Имена элементов листьев шины наблюдения, для которых необходимо создать спецификации, заданные как строковые массивы. Чтобы создать спецификации наблюдений для подмножества элементов в объекте шины Simulink, задайте BusElementNames. Если вы не задаете BusElementNamesдля каждого листового элемента шины создается спецификация данных.

ObservationBusElementNames применяется только, когда выходной порт сигнала наблюдения является сигналом шины.

Пример: 'ObservationBusElementNames',["sin" "cos"] создает спецификации для элементов шины наблюдений с именами "sin" и "cos".

Конечные значения для дискретных элементов спецификации наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'ObservationDiscreteElements' и массив ячеек из пар "имя-значение". Каждая пара "имя-значение" состоит из имени элемента и массива дискретных значений.

Если выходной порт сигнала наблюдения образца модели:

  • Сигнал шины, задайте имя одного из листовых элементов шины, заданные в ObservationBusElementNames

  • Nonbus сигнал, задайте имя порта наблюдения, как задано ObservationPortName

Заданные дискретные значения должны быть приведены к типу данных заданного сигнала наблюдения.

Если вы не задаете дискретные значения для элемента спецификации наблюдений, элемент непрерывен.

Пример: 'ObservationDiscretElements',{'observation',[-1 0 1]} задает дискретные значения для небусового сигнала наблюдения с именем порта по умолчанию observation.

Пример: 'ObservationDiscretElements',{'gear',[-1 0 1 2],'direction',[1 2 3 4]} задает дискретные значения для 'gear' и 'direction' листовые элементы массива сигнала действия шины.

Конечные значения для дискретных элементов спецификации действия, заданные как разделенная разделенными запятой парами, состоящая из 'ActionDiscreteElements' и массив ячеек из пар "имя-значение". Каждая пара "имя-значение" состоит из имени элемента и массива дискретных значений.

Если входной порт действия образца модели:

  • Сигнал шины, задайте имя листового элемента шины

  • Nonbus сигнал, задайте имя порта действия, как задано ActionPortName

Заданные дискретные значения должны быть приведены к типу данных заданного сигнала действия.

Если вы не задаете дискретные значения для элемента спецификации действия, элемент непрерывен.

Пример: 'ActionDiscretElements',{'action',[-1 0 1]} задает дискретные значения для небусового сигнала действия с именем порта по умолчанию 'action'.

Пример: 'ActionDiscretElements',{'force',[-10 0 10],'torque',[-5 0 5]} задает дискретные значения для 'force' и 'torque' листовые элементы массива сигнала действия шины.

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

свернуть все

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

Блокируйте путь к блоку агента в новой модели, возвращаемый как вектор символов. Чтобы обучить агента в новой модели Simulink, вы должны создать агента и указать имя агента в блоке RL Agent, указанном agentBlock.

Для получения дополнительной информации о создании агентов см. Раздел «Агенты обучения с подкреплением».

Спецификации данных о наблюдении, возвращенные как одно из следующего:

  • rlNumericSpec объект для одной непрерывной спецификации наблюдений

  • rlFiniteSetSpec объект для одной дискретной спецификации наблюдений

  • Массив объектов спецификаций данных для нескольких спецификаций

Спецификации данных о действии, возвращенные как одно из следующего:

  • rlNumericSpec объект для одной непрерывной спецификации действия

  • rlFiniteSetSpec объект для одной дискретной спецификации действия

  • Массив объектов спецификации данных для нескольких спецификаций действия

Введенный в R2019a