Среда обучения с подкреплением с динамической моделью, реализованной в Simulink
SimulinkEnvWithAgent
объект представляет среду обучения с подкреплением, которая использует динамическую модель, реализованную в Simulink®. Объект среды действует как интерфейс, таким образом это, когда вы вызываете sim
или train
, эти функции в свою очередь вызывают модель Simulink, чтобы сгенерировать события для агентов.
Создать SimulinkEnvWithAgent
объект, используйте одну из следующих функций.
rlSimulinkEnv
— Создайте среду с помощью модели Simulink по крайней мере с одним блоком RL Agent.
createIntegratedEnv
— Используйте образец модели в качестве среды обучения с подкреплением.
rlPredefinedEnv
Создайте предопределенную среду обучения с подкреплением.
Model
— Имя модели SimulinkИмя модели Simulink в виде строки или вектора символов. Заданная модель должна содержать один или несколько блоков RL Agent.
AgentBlock
— Пути к блоку AgentПути к блоку Agent в виде массива строк или массива строк.
Если Model
содержит один блок RL Agent для обучения, затем AgentBlock
строка, содержащая блок path.
Если Model
содержит несколько блоков RL Agent для обучения, затем AgentBlock
массив строк, где каждый элемент содержит путь одного блока агента.
Model
может содержать блоки RL Agent, путь которых не включен в AgentBlock
. Такие блоки агента ведут себя как часть среды и выбирают действия на основе своей текущей политики. Когда вы вызываете sim
или train
, события этих агентов не возвращены, и их политики не обновляются.
Блоки агента могут быть в модели - ссылке. Для получения дополнительной информации о конфигурировании блока агента для обучения с подкреплением смотрите RL Agent.
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 Agent. Поскольку агент, используемый блоком уже, находится в рабочей области, вы не должны передавать спецификации наблюдений и спецификации действия, чтобы создать среду.
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';
Присвойте информацию о блоке path агента и создайте среду обучения с подкреплением для модели 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, которая реализует систему с который агент. Такая система часто упоминается как объект, система разомкнутого контура или ссылочная система, в то время как целая (интегрированная) система включая агента часто упоминается как система с обратной связью.
В данном примере используйте летающую модель робота, описанную в, Обучают Агента DDPG Управлять Летающим Роботом как ссылкой (разомкнутый контур) система.
Откройте летающую модель робота.
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
Функция может также возвратить блок path в блок RL Agent в новой интегрированной модели, а также спецификации наблюдений и спецификации действия для образца модели.
[~,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"
Возврат блока path и технических требований полезен в случаях, в которых необходимо изменить описания, пределы или имена в observationInfo
и actionInfo
. После изменения технических требований можно затем создать среду из интегрированной модели IntegratedEnv
использование rlSimulinkEnv
функция.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.