Окружение обучения с подкреплением с динамической моделью, реализованной в 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)/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
, соответственно.
Используйте предопределенную '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.