exponenta event banner

поезд

Подготовка обучающих агентов по усилению в определенной среде

Описание

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

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

пример

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

Примеры

свернуть все

Выполните обучение агента, сконфигурированного в примере «Train PG Agent to Balance Cart-Pole System», в соответствующей среде. Наблюдение из окружающей среды представляет собой вектор, содержащий положение и скорость тележки, а также угловое положение и скорость полюса. Действие представляет собой скаляр с двумя возможными элементами (сила в -10 или 10 ньютонов, приложенная к корзине).

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

load RLTrainExample.mat

Укажите некоторые параметры обучения с помощью rlTrainingOptions. Эти параметры включают максимальное количество эпизодов для тренировки, максимальные шаги на эпизод и условия для прекращения тренировки. В этом примере используется максимум 1000 эпизодов и 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 м, а роботы A (красный) и B (зеленый) - меньшими окружностями с радиусами по 1 м. Роботы пытаются переместить объект С за пределы кругового кольца радиусом 8 м, прикладывая силы через столкновение. Все элементы в окружающей среде имеют массу и подчиняются законам движения Ньютона. Кроме того, контактные силы между элементами и границами окружающей среды моделируются как пружинные и массовые демпферные системы. Элементы могут перемещаться по поверхности посредством приложения внешних сил в направлениях X и Y. Движение в третьем измерении отсутствует, и общая энергия системы сохраняется.

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

rlCollaborativeTaskParams

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

mdl = "rlCollaborativeTask";
open_system(mdl)

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

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

  • Значения жесткости контактной пружины и демпфирования составляют 100 Н/м и 0,1 Н/м/с соответственно.

  • Агенты разделяют те же самые наблюдения для положений, скоростей 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 - значения действия агентов А и В на последнем этапе времени.

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

FX = -1,0 Н, FY = -1,0 Н

FX = -1,0 Н, FY = 0

FX = -1,0 Н, FY = 1,0 Н

FX = 0, FY = -1,0 N

FX = 0, FY = 0

FX = 0, FY = 1,0 N

FX = 1,0 Н, FY = -1,0 Н

FX = 1,0 Н, FY = 0

FX = 1,0 Н, FY = 1,0 Н

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

Чтобы создать многоагентную среду, укажите пути блоков агентов с помощью строкового массива. Также укажите объекты наблюдения и спецификации действий с помощью массивов ячеек. Порядок объектов спецификации в массиве ячеек должен соответствовать порядку, указанному в массиве пути блока. Если агенты доступны в рабочей области 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);

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

% 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 для поощрения долгосрочных вознаграждений.

Агенты поездов

Укажите следующие параметры обучения для обучения агентов.

  • Запустите тренировку максимум для 1000 эпизодов, с каждым эпизодом длительностью не более 5000 временных шагов.

  • Остановите обучение агента, когда его среднее вознаграждение за 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 объект, задающий свойства, связанные со свойствами, и передающий их в 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. Каждая запись является оценкой критика (Q0) для агента соответствующего эпизода. Это поле присутствует только для агентов, у которых есть критики, такие как rlDDPGAgent и rlDQNAgent.

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

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

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

Совет

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

  • По умолчанию вызов train открывает Менеджер обучающих эпизодов для усиления, который позволяет визуализировать ход обучения. Сюжет «Менеджер эпизодов» показывает вознаграждение за каждый эпизод, среднее значение вознаграждения и Q0 оценки критика (для агентов, у которых есть критики). Менеджер эпизодов также отображает различные статистические данные по эпизодам и тренировкам. Чтобы отключить Диспетчер обучающих эпизодов с усилением, установите Plots вариант trainOpts кому "none".

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

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

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

Алгоритмы

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

  1. Инициализировать agent.

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

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

    2. Получение исходного наблюдения s0 из среды.

    3. Вычислите начальное действие a0 = λ (s0).

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

    5. Пока эпизод не закончен или не прекращен:

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

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

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

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

      5. Прерывание при выполнении условий завершения эпизода, определенных в среде.

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

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

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

Представлен в R2019a