Усиливающая среда обучения с динамической моделью, реализованной в Simulink
Создание SimulinkEnvWithAgent используйте одну из следующих функций.
rlSimulinkEnv - Создание среды с использованием модели Simulink по крайней мере с одним блоком агента RL.
createIntegratedEnv - использование ссылочной модели в качестве среды обучения армированию.
rlPredefinedEnv - создание предварительно определенной среды обучения армированию.
Model - Имя модели SimulinkИмя модели Simulink, указанное как строковый или символьный вектор. Указанная модель должна содержать один или несколько блоков агента RL.
AgentBlock - Пути к блокам агентовПути к блокам агента, указанные как строковый или строковый массив.
Если Model содержит один блок агента RL для обучения, затем AgentBlock - строка, содержащая путь к блоку.
Если Model содержит несколько блоков агента RL для обучения, затем AgentBlock - строковый массив, где каждый элемент содержит путь к одному блоку агента.
Model может содержать блоки агента RL, путь к которым не включен в AgentBlock. Такие блоки агентов ведут себя как часть среды и выбирают действия на основе своих текущих политик. При звонке sim или train, опыт этих агентов не возвращается, а их политики не обновляются.
Блоки агентов могут находиться внутри ссылки на модель. Дополнительные сведения о настройке блока агента для обучения усилению см. в разделе Агент RL.
ResetFcn - Сброс поведения для средыСбросить поведение среды, указанное как дескриптор функции или анонимный дескриптор функции. Функция должна иметь одну Simulink.SimulationInput входной аргумент и один Simulink.SimulationInput выходной аргумент.
Функция сброса задает начальное состояние среды Simulink. Например, можно создать функцию сброса, которая рандомизирует определенные состояния блоков так, чтобы каждый учебный эпизод начинался с различных начальных условий.
При наличии существующей функции сброса myResetFunction на тракте MATLAB ®, установкаResetFcn с помощью дескриптора функции.
env.ResetFcn = @(in)myResetFunction(in);
Если поведение сброса простое, его можно реализовать с помощью анонимного дескриптора функции. Например, следующий код задает переменную x0 на случайное значение.
env.ResetFcn = @(in) setVariable(in,'x0',rand()); sim функция вызывает функцию сброса для сброса среды в начале каждого моделирования, и train функция вызывает его в начале каждого учебного эпизода.
UseFastRestart - Возможность переключения быстрого перезапуска"on" (по умолчанию) | "off"Параметр для переключения быстрого перезапуска, указанный как "on" или "off". Быстрый перезапуск позволяет выполнять итеративное моделирование без компиляции модели или прекращения моделирования каждый раз.
Дополнительные сведения о быстром перезапуске см. в разделе Как быстрый перезапуск улучшает итерационное моделирование (Simulink).
train | Подготовка обучающих агентов по усилению в определенной среде |
sim | Моделирование обученных агентов по обучению подкреплению в определенной среде |
getObservationInfo | Получение спецификаций данных наблюдения из среды обучения армированию или агента |
getActionInfo | Получение спецификаций данных действий из среды обучения подкреплению или агента |
Создайте среду 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)/dtobsInfo =
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 NmactInfo =
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соответственно.
Использовать предварительно определенные 'SimplePendulumModel-Continuous' ключевое слово для создания непрерывной простой среды обучения маятниковой модели усиления.
env = rlPredefinedEnv('SimplePendulumModel-Continuous')env =
SimulinkEnvWithAgent with properties:
Model : rlSimplePendulumModel
AgentBlock : rlSimplePendulumModel/RL Agent
ResetFcn : []
UseFastRestart : on
В этом примере используются:
В этом примере показано, как использовать createIntegratedEnv создание объекта среды, начиная с модели Simulink, реализующей систему, с которой работает агент. Такую систему часто называют установкой, системой с разомкнутым контуром или эталонной системой, в то время как всю (интегрированную) систему, включающую агент, часто называют системой с замкнутым контуром.
Для этого примера используйте модель летающего робота, описанную в документе Train DDPG Agent to Control Flying Robot, в качестве эталонной системы (с разомкнутым контуром).
Откройте модель летающего робота.
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 функция.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.