Окружение обучения с подкреплением с динамической моделью, реализованной в Simulink
The SimulinkEnvWithAgent объект представляет окружение обучения с подкреплением, которая использует динамическую модель, реализованную в Simulink®. Объект окружения действует как интерфейс, такой что при вызове sim или train, эти функции в свою очередь вызывают модель Simulink, чтобы сгенерировать опыт для агентов.
Как создать SimulinkEnvWithAgent объект, используйте одну из следующих функций.
rlSimulinkEnv - Создайте окружение с помощью модели Simulink, по крайней мере, с одним блоком RL Agent.
createIntegratedEnv - Используйте эталонную модель как окружение обучения с подкреплением.
rlPredefinedEnv - Создайте предопределённое окружение обучения с подкреплением.
Model - имя модели SimulinkИмя модели Simulink, заданное как строковый или символьный вектор. Заданная модель должна содержать один или несколько RL Agent блоков.
AgentBlock - Пути к блокам агентаПути к блокам агента, заданные как строковые или строковые массивы.
Если Model содержит один блок RL Agent для обучения, затем AgentBlock - это строка , содержащая путь к блоку.
Если Model содержит несколько блоков RL Agent для обучения, затем AgentBlock является строковые массивы, где каждый элемент содержит путь одного блока агента.
Model может содержать RL Agent блоков, путь которых не включен в AgentBlock. Такие блоки агента ведут себя как часть окружения и выбирают действия на основе своих текущих политик. Когда вы звоните sim или train, опыт этих агентов не возвращается и их политики не обновляются.
Блоки агента могут находиться внутри модели-ссылки. Для получения дополнительной информации о конфигурировании блока агента для обучения с подкреплением см. RL Agent.
ResetFcn - Сброс поведения средыСбросьте поведение для окружения, заданное как указатель на функцию или указатель на анонимную функцию. Функция должна иметь одну Simulink.SimulationInput входной параметр и одно Simulink.SimulationInput выходной аргумент.
Функция сброса устанавливает начальное состояние окружения Simulink. Например, можно создать функцию сброса, которая рандомизирует определенные состояния блока, так что каждый эпизод тренировки начинается с разных начальных условий.
Если у вас есть существующая функция сброса myResetFunction на MATLAB® путь, set 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 из примера 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)/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, чтобы управлять летающим роботом в качестве ссылки (разомкнутого контура).
Откройте модель летающего робота.
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.