train

Обучите агентов обучения с подкреплением в заданной среде

Описание

trainStats = train(env,agents) обучает одного или несколько агентов обучения с подкреплением в заданной среде, с помощью опций обучения по умолчанию. Несмотря на то, что agents входной параметр, после каждого эпизода тренировки, train обновляет параметры каждого свойства агента, заданного в agents максимизировать их ожидаемое долгосрочное вознаграждение средой. Когда обучение завершает работу, agents отражает состояние каждого агента в конце итогового эпизода тренировки.

trainStats = train(agents,env) выполняет то же обучение как предыдущий синтаксис.

пример

env = train(___,trainOpts) обучает agents в env, использование объекта trainOpts опций обучения. Используйте опции обучения, чтобы задать учебные параметры, такие как критерии завершения обучения, когда сохранить агентов, максимальное количество эпизодов, чтобы обучаться, и максимальное количество шагов на эпизод. Используйте этот синтаксис после любого из входных параметров в предыдущих синтаксисах.

Примеры

свернуть все

Обучите агента, сконфигурированного в Обучать Агенте PG Балансировать Системный пример Тележки с шестом в соответствующей среде. Наблюдение средой является вектором, содержащим положение и скорость тележки, а также угловое положение и скорость полюса. Действие является скаляром с двумя возможными элементами (сила или-10 или 10 ньютонов применилась к тележке).

Загрузите файл, содержащий среду и агента PG, уже сконфигурированного для него.

load RLTrainExample.mat

Задайте некоторые учебные параметры с помощью rlTrainingOptions. Эти параметры включают максимальное количество эпизодов, чтобы обучаться, максимальные шаги на эпизод и условия для завершения обучения. В данном примере используйте максимум 1 000 эпизодов и 500 шагов на эпизод. Сообщите обучению остановиться, когда среднее вознаграждение по предыдущим пяти эпизодам достигнет 500. Создайте набор опций по умолчанию и используйте запись через точку, чтобы изменить некоторые значения параметров.

trainOpts = rlTrainingOptions;

trainOpts.MaxEpisodes = 1000;
trainOpts.MaxStepsPerEpisode = 500;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 500;
trainOpts.ScoreAveragingWindowLength = 5;

Во время обучения, train команда может сохранить агентов кандидата, которые дают хорошие результаты. Далее сконфигурируйте опции обучения, чтобы сохранить агента, когда вознаграждение эпизода превысит 500. Сохраните агента в папку под названием savedAgents.

trainOpts.SaveAgentCriteria = "EpisodeReward";
trainOpts.SaveAgentValue = 500;
trainOpts.SaveAgentDirectory = "savedAgents";

Наконец, выключите отображение командной строки. Включите менеджера по Эпизоду Обучения с подкреплением, таким образом, можно наблюдать процесс обучения визуально.

trainOpts.Verbose = false;
trainOpts.Plots = "training-progress";

Вы теперь готовы обучить агента PG. Для предопределенной среды тележки с шестом, используемой в этом примере, можно использовать plot сгенерировать визуализацию системы тележки с шестом.

plot(env)

Когда вы запускаете этот пример, и эта визуализация и менеджер по Эпизоду Обучения с подкреплением обновляются с каждым эпизодом тренировки. Поместите их рядом друг с другом на ваш экран, чтобы наблюдать прогресс и обучить агента. (Этот расчет может занять 20 минут или больше.)

trainingInfo = train(agent,env,trainOpts);

Менеджер по эпизоду показывает, что обучение успешно достигает условия завершения вознаграждения 500 усредненных по предыдущим пяти эпизодам. В каждом эпизоде тренировки, train обновления agent параметрами, изученными в предыдущем эпизоде. Когда обучение завершает работу, можно симулировать среду с обученным агентом, чтобы оценить его эффективность. График среды обновляется в процессе моделирования, как он сделал во время обучения.

simOptions = rlSimulationOptions('MaxSteps',500);
experience = sim(env,agent,simOptions);

Во время обучения, train сохраняет на диск любых агентов, которые удовлетворяют условию, заданному с trainOps.SaveAgentCritera и trainOpts.SaveAgentValue. Чтобы проверить производительность любого из тех агентов, можно загрузить данные из файлов данных в папке, вы задали использование trainOpts.SaveAgentDirectory, и симулируйте среду с тем агентом.

В этом примере показано, как настроить сеанс обучения мультиагента на среде Simulink®. В примере вы обучаете двух агентов совместно выполнять задачу перемещения объекта.

Среда в этом примере является лишенной трения двумерной поверхностью, содержащей элементы, представленные кругами. Целевой объект C представлен синим кругом с радиусом 2 м, и роботы (красный) и (зеленый) B представлены меньшими кругами с радиусами 1 м каждый. Роботы пытаются к объекту move C вне кругового звонка радиуса 8 м, прикладывая силы через столкновение. Все элементы в среде имеют массу и выполняют законы Ньютона движения. Кроме того, силы контакта между элементами и контурами среды моделируются как пружинные и массовые системы демпфера. Элементы могут переместиться в поверхность через приложение внешне приложенных сил в направлениях X и Y. Нет никакого движения в третьей размерности, и полная энергия системы сохраняется.

Создайте набор параметров, требуемых для этого примера.

rlCollaborativeTaskParams

Откройте модель Simulink.

mdl = "rlCollaborativeTask";
open_system(mdl)

Для этой среды:

  • 2 мерных пространства ограничены от-12 м до 12 м в обоих направления X и Y.

  • Жесткость пружины контакта и значения затухания составляют 100 Н/м и 0.1 N/m/s, соответственно.

  • Агенты совместно используют те же наблюдения для положений, скоростей A, B, и C и значений действия от последнего временного шага.

  • Симуляция завершает работу, когда объект C перемещается вне кругового звонка.

  • На каждом временном шаге агенты получают следующее вознаграждение:

rA=rglobal+rlocal,ArB=rglobal+rlocal,Brglobal=0.001dcrlocal,A=-0.005dAC-0.008uA2rlocal,B=-0.005dBC-0.008uB2

Здесь:

  • rAи rB вознаграждения, полученные агентами A и B, соответственно.

  • rglobal вознаграждение команды, которое получено обоими агентами, когда объект C придвигается поближе к контуру звонка.

  • rlocal,A и rlocal,B локальные штрафы, полученные агентами A и B на основе их расстояний от объекта C и величины действия от последнего временного шага.

  • dC расстояние объекта C от центра звонка.

  • dAC и dBC расстояния между агентом A и объектом C и агентом B и объектом C, соответственно.

  • uA и uB значения действия агентов A и B от последнего временного шага.

Этот пример использует агентов ближайшей оптимизации политики (PPO) с дискретными пространствами действий. Чтобы узнать больше об агентах PPO, смотрите Ближайших Агентов Оптимизации политики. Агенты прикладывают внешние силы на роботах тот результат в движении. На каждом временном шаге агенты выбирают действия uA,B=[FX,FY], где FX,FY одна из следующих пар внешне приложенных сил.

FX=-1.0N,  FY=-1.0N

FX=-1.0N,  FY=0

FX=-1.0N,  FY=1.0N

FX=0,               FY=-1.0N

FX=0,               FY=0

FX=0,               FY=1.0N

FX=1.0N,     FY=-1.0N

FX=1.0N,     FY=0

FX=1.0N,     FY=1.0N

Создайте среду

Чтобы создать среду мультиагента, задайте пути к блоку агентов с помощью массива строк. Кроме того, задайте спецификацию наблюдений и объекты спецификации действия с помощью массивов ячеек. Порядок объектов спецификации в массиве ячеек должен совпадать с порядком, заданным в массиве блока path. Когда агенты доступны в рабочем пространстве MATLAB во время создания среды, спецификация наблюдений и массивы спецификации действия являются дополнительными. Для получения дополнительной информации о создании сред мультиагента смотрите rlSimulinkEnv.

Создайте технические требования ввода-вывода для среды. В этом примере агенты являются гомогенными и имеют те же технические требования ввода-вывода.

% Number of observations
numObs = 16;

% Number of actions
numAct = 2;

% Maximum value of externally applied force (N)
maxF = 1.0;

% I/O specifications for each agent
oinfo = rlNumericSpec([numObs,1]);
ainfo = rlFiniteSetSpec({
    [-maxF -maxF]
    [-maxF  0   ]
    [-maxF  maxF]
    [ 0    -maxF]
    [ 0     0   ]
    [ 0     maxF]
    [ maxF -maxF]
    [ maxF  0   ]
    [ maxF  maxF]});
oinfo.Name = 'observations';
ainfo.Name = 'forces';

Создайте интерфейс окружения Simulink.

blks = ["rlCollaborativeTask/Agent A", "rlCollaborativeTask/Agent B"];
obsInfos = {oinfo,oinfo};
actInfos = {ainfo,ainfo};
env = rlSimulinkEnv(mdl,blks,obsInfos,actInfos);

Задайте функцию сброса для среды. Функция сброса resetRobots гарантирует, что роботы начинают со случайных исходных положений в начале каждого эпизода.

env.ResetFcn = @(in) resetRobots(in,RA,RB,RC,boundaryR);

Создайте агентов

Агенты PPO используют представления актёра и критика, чтобы изучить оптимальную политику. В этом примере агенты обеспечивают основанные на нейронной сети функциональные аппроксимации для агента и критика.

Создайте нейронную сеть критика и представление. Выход сети критика является функцией ценности состояния V(s) для состояния s.

% Reset the random seed to improve reproducibility
rng(0)

% Critic networks
criticNetwork = [...
    featureInputLayer(oinfo.Dimension(1),'Normalization','none','Name','observation')
    fullyConnectedLayer(128,'Name','CriticFC1','WeightsInitializer','he')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(64,'Name','CriticFC2','WeightsInitializer','he')
    reluLayer('Name','CriticRelu2')
    fullyConnectedLayer(32,'Name','CriticFC3','WeightsInitializer','he')
    reluLayer('Name','CriticRelu3')
    fullyConnectedLayer(1,'Name','CriticOutput')];

% Critic representations
criticOpts = rlRepresentationOptions('LearnRate',1e-4);
criticA = rlValueRepresentation(criticNetwork,oinfo,'Observation',{'observation'},criticOpts);
criticB = rlValueRepresentation(criticNetwork,oinfo,'Observation',{'observation'},criticOpts);

Выходные параметры сети агента являются вероятностями π(a|s)из взятия каждой возможной пары действия в определенном состоянии s. Создайте нейронную сеть агента и представление.

% Actor networks
actorNetwork = [...
    featureInputLayer(oinfo.Dimension(1),'Normalization','none','Name','observation')
    fullyConnectedLayer(128,'Name','ActorFC1','WeightsInitializer','he')
    reluLayer('Name','ActorRelu1')
    fullyConnectedLayer(64,'Name','ActorFC2','WeightsInitializer','he')
    reluLayer('Name','ActorRelu2')
    fullyConnectedLayer(32,'Name','ActorFC3','WeightsInitializer','he')
    reluLayer('Name','ActorRelu3')
    fullyConnectedLayer(numel(ainfo.Elements),'Name','Action')
    softmaxLayer('Name','SM')];

% Actor representations
actorOpts = rlRepresentationOptions('LearnRate',1e-4);
actorA = rlStochasticActorRepresentation(actorNetwork,oinfo,ainfo,...
    'Observation',{'observation'},actorOpts);
actorB = rlStochasticActorRepresentation(actorNetwork,oinfo,ainfo,...
    'Observation',{'observation'},actorOpts);

Создайте агентов. Оба агента используют те же опции.

agentOptions = rlPPOAgentOptions(...
    'ExperienceHorizon',256,...
    'ClipFactor',0.125,...
    'EntropyLossWeight',0.001,...
    'MiniBatchSize',64,...
    'NumEpoch',3,...
    'AdvantageEstimateMethod','gae',...
    'GAEFactor',0.95,...
    'SampleTime',Ts,...
    'DiscountFactor',0.9995);
agentA = rlPPOAgent(actorA,criticA,agentOptions);
agentB = rlPPOAgent(actorB,criticB,agentOptions);

Во время обучения агенты собирают события, пока или горизонт опыта 256 шагов или завершение эпизода не достигнуты, и затем обучайтесь от мини-пакетов 64 событий. Этот пример использует фактор клипа целевой функции 0,125, чтобы улучшить учебную устойчивость и коэффициент дисконтирования 0,9995, чтобы поощрить долгосрочные вознаграждения.

Обучите агентов

Задайте следующие опции обучения, чтобы обучить агентов.

  • Запустите обучение самое большее 1 000 эпизодов с каждым эпизодом, длящимся самое большее 5 000 временных шагов.

  • Остановите обучение агента, когда его среднее вознаграждение более чем 100 последовательных эпизодов будет-10 или больше.

maxEpisodes = 1000;
maxSteps = 5e3;
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',maxEpisodes,...
    'MaxStepsPerEpisode',maxSteps,...
    'ScoreAveragingWindowLength',100,...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',-10);

Чтобы обучить несколько агентов, задайте массив агентов к train функция. Порядок агентов в массиве должен совпадать с порядком путей к блоку агента, заданных во время создания среды. Выполнение так гарантирует, что объекты агента соединяются со своими соответствующими интерфейсами ввода-вывода в среде. Обучение эти агенты может занять несколько часов, чтобы завершиться, в зависимости от доступной вычислительной мощности.

Файл MAT rlCollaborativeTaskAgents содержит набор предварительно обученных агентов. Можно загрузить файл и просмотреть эффективность агентов. Чтобы обучить агентов самостоятельно, установите doTraining к true.

doTraining = false;
if doTraining
    stats = train([agentA, agentB],env,trainOpts);
else
    load('rlCollaborativeTaskAgents.mat');
end

Следующий рисунок показывает снимок состояния процесса обучения. Можно ожидать различные результаты из-за случайности в учебном процессе.

Симулируйте агентов

Симулируйте обученных агентов в среде.

simOptions = rlSimulationOptions('MaxSteps',maxSteps);
exp = sim(env,[agentA agentB],simOptions);

Figure Multi Agent Collaborative Task contains an axes. The axes contains 5 objects of type rectangle, text.

Для получения дополнительной информации о симуляции агента смотрите rlSimulationOptions и sim.

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

свернуть все

Агенты, чтобы обучаться в виде объекта агента обучения с подкреплением, такой как rlACAgent или rlDDPGAgent, или как массив таких объектов.

Если env среда мультиагента, созданная с rlSimulinkEnv, задайте свойства агента как массив. Порядок агентов в массиве должен соответствовать, порядок агента раньше создавал env. Симуляция мультиагента не поддерживается для сред MATLAB®.

Примечание

train обновления agents в каждом эпизоде тренировки. Когда обучение завершает работу, agents отражает состояние каждого агента в конце итогового эпизода тренировки. Поэтому вознаграждения, полученные итоговыми агентами, являются не обязательно самым высоким, достигнутым во время учебного процесса, из-за непрерывного исследования. Чтобы сохранить агентов во время обучения, создайте rlTrainingOptions объект, задающий свойства SaveAgentCriteria и SaveAgentValue и передачу это к train как trainOpts аргумент.

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

Среда, в которой агенты действуют в виде одного из следующих видов объекта среды обучения с подкреплением:

  • Предопределенный MATLAB или среда Simulink® создали использование rlPredefinedEnv. Этот вид среды не поддерживает обучение несколько агентов одновременно.

  • Пользовательская среда MATLAB вы создаете с функциями такой как rlFunctionEnv или rlCreateEnvTemplate. Этот вид среды не поддерживает обучение несколько агентов одновременно.

  • Пользовательское окружение Simulink вы создаете использование rlSimulinkEnv. Этот вид обучения поддержке сред несколько агентов одновременно.

Для получения дополнительной информации о создании и конфигурировании сред, см.:

Когда env окружение Simulink, вызывая train компиляции и симулируют модель, сопоставленную со средой.

Учебные параметры и опции в виде rlTrainingOptions объект. Используйте этот аргумент, чтобы задать такие параметры и опции как:

  • Критерии конечного обучения

  • Критерии сохранения агентов кандидата

  • Как отобразить прогресс обучения

  • Опции для параллельных вычислений

Для получения дополнительной информации смотрите rlTrainingOptions.

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

свернуть все

Данные об эпизоде тренировки, возвращенные как структура, когда обучение один агент или массив структур, когда обучение несколько агентов. Каждый элемент структуры содержит следующие поля.

Числа эпизода, возвращенные как вектор-столбец [1;2;…;N], где N количество эпизодов в учебном запуске. Этот вектор полезен, если вы хотите построить эволюцию других количеств от эпизода до эпизода.

Вознаградите за каждый эпизод, возвращенный в вектор-столбце длины N. Каждая запись содержит вознаграждение за соответствующий эпизод.

Количество шагов в каждом эпизоде, возвращенном в вектор-столбце длины N. Каждая запись содержит количество шагов в соответствующем эпизоде.

Среднее вознаграждение по окну усреднения задано в trainOpts, возвращенный как вектор-столбец длины N. Каждая запись содержит среднюю премию, вычисленную в конце соответствующего эпизода.

Общее количество агента продвигается в обучение, возвращенное как вектор-столбец длины N. Каждая запись содержит совокупную сумму записей в EpisodeSteps до той точки.

Оценка критика долгосрочного вознаграждения с помощью текущего агента и начальных условий среды, возвращенных как вектор-столбец длины N. Каждая запись является оценкой критика (Q 0) для агента соответствующего эпизода. Это поле присутствует только для агентов, которые имеют критиков, такой как rlDDPGAgent и rlDQNAgent.

Информация, собранная во время симуляций, выполняемых для обучения, возвращенного как:

  • Для обучения в средах MATLAB, структура, содержащая поле SimulationError. Это поле является вектор-столбцом с одной записью на эпизод. Когда StopOnError опция rlTrainingOptions "off", каждая запись содержит любые ошибки, которые произошли во время соответствующего эпизода.

  • Для обучения в окружениях Simulink, векторе из Simulink.SimulationOutput объекты, содержащие данные моделирования, зарегистрированы во время соответствующего эпизода. Записанные данные для эпизода включают любые сигналы и утверждают, что модель сконфигурирована, чтобы регистрировать, метаданные симуляции и любые ошибки, которые произошли во время соответствующего эпизода.

Советы

  • train обновляет агентов, в то время как обучение прогрессирует. Чтобы сохранить исходные параметры агента для дальнейшего использования, сохраните агентов в MAT-файл.

  • По умолчанию, вызов train открывает менеджера по Эпизоду Обучения с подкреплением, который позволяет вам визуализировать прогресс обучения. Менеджер по Эпизоду, которого график показывает вознаграждению за каждый эпизод, рабочее среднее премиальное значение и критика, оценивает Q 0 (для агентов, которые имеют критиков). Менеджер по Эпизоду также отображает различный эпизод и учебную статистику. Чтобы выключить менеджера по Эпизоду Обучения с подкреплением, установите Plots опция trainOpts к "none".

  • Если вы используете предопределенную среду, для которой существует визуализация, можно использовать plot(env) визуализировать среду. Если вы вызываете plot(env) перед обучением затем визуализация обновляется во время обучения позволить вам визуализировать прогресс каждого эпизода. (Для пользовательских сред необходимо реализовать собственное plot метод.)

  • Обучение завершает работу, когда условия задали в trainOpts удовлетворены. Чтобы отключить происходящее обучение, в менеджере по Эпизоду Обучения с подкреплением, нажимают Stop Training. Поскольку train обновляет агента в каждом эпизоде, можно возобновить обучение путем вызова train(agent,env,trainOpts) снова, не теряя обученные параметры, изученные во время первого вызова train.

  • Во время обучения можно сохранить агентов кандидата, которые удовлетворяют условиям, которые вы задаете с trainOpts. Например, можно сохранить любого агента, вознаграждение эпизода которого превышает определенное значение, даже если полному условию для завершения обучения еще не удовлетворяют. train хранит сохраненных агентов в MAT-файле в папке, которую вы задаете с trainOpts. Сохраненные агенты могут быть полезными, например, чтобы позволить вам тестировать агентов кандидата, сгенерированных во время продолжительного учебного процесса. Для получения дополнительной информации о сохранении критериев и сохранении местоположения, смотрите rlTrainingOptions.

Алгоритмы

В общем случае train выполняет выполняющие итеративные шаги:

  1. Инициализируйте agent.

  2. Для каждого эпизода:

    1. Сбросьте среду.

    2. Получите начальное наблюдение s 0 средой.

    3. Вычислите начальное действие a 0 = μ (s 0).

    4. Установите текущее действие на начальное действие (a a0) и установите текущее наблюдение на начальное наблюдение (s s0).

    5. В то время как эпизод не закончен или закончен:

      1. Шаг среда с действием a, чтобы получить следующее наблюдение s' и вознаграждение r.

      2. Извлеките уроки из набора опыта (s, a, r, s').

      3. Вычислите следующее действие a' = μ (s').

      4. Обновите текущее действие со следующим действием (aa') и обновите текущее наблюдение со следующим наблюдением (ss').

      5. Повредитесь, если условия завершения эпизода, заданные в среде, соблюдают.

  3. Если учебное условие завершения задано trainOpts соответствуется, оконечное обучение. В противном случае начните следующий эпизод.

Специфические особенности как train выполняет эти расчеты, зависит от вашей настройки агента и среды. Например, сброс среды в начале каждого эпизода может включать значения начального состояния рандомизации, если вы конфигурируете свою среду, чтобы сделать так.

Расширенные возможности

Введенный в R2019a