Обучите несколько агентов покрытию области

Этот пример демонстрирует мультиагента совместно-конкурентоспособная задача, в которой вы обучаете трех агентов ближайшей оптимизации политики (PPO) исследовать все области в мировой сеткой среде.

Обучение мультиагента поддерживается для сред Simulink® только. Как показано в этом примере, если вы задаете свое поведение среды с помощью Системного объекта MATLAB®, можно включить его в окружение Simulink с помощью блока MATLAB System (Simulink).

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

Среда в этом примере 12x12 мир сетки, содержащий препятствия с неизведанными ячейками, отмеченными белым и препятствиями, отмеченными черным цветом. Существует три робота в среде, представленной красными, зелеными, и синими кругами. Три ближайших агента оптимизации политики с дискретными пространствами действий управляют роботами. Чтобы узнать больше об агентах PPO, смотрите Ближайших Агентов Оптимизации политики.

Агенты обеспечивают, одно из пяти возможных действий перемещения (ОЖИДАЙТЕ, UP, DOWN, LEFT или RIGHT) к их соответствующим роботам. Роботы решают, законно ли действие или недопустимо. Например, действие перемещения LEFT, когда робот расположен рядом с левым контуром среды, считают недопустимым. Точно так же действия для столкновения против препятствий и других агентов в среде являются незаконной деятельностью и чертят штрафы. Динамика окружения детерминирована, что означает, что роботы выполняют судебные иски и незаконную деятельность с 100% и 0% вероятностей, соответственно. Полная цель состоит в том, чтобы исследовать все ячейки как можно быстрее.

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

Для среды мира сетки:

  • Область поиска 12x12 сетка с препятствиями.

  • Наблюдение для каждого агента 12x12x4 изображение.

  • Дискретный набор действия является набором пяти действий (WAIT=0, UP=1, DOWN=2, LEFT=3, RIGHT=4).

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

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

  • +1 для перемещения в ранее неизведанную (белую) ячейку.

  • - 0.5 для незаконной деятельности (пытаются переместиться вне контура или столкнуться против других роботов и препятствий),

  • - 0.05 для действия, которое приводит к перемещению (стоимость перемещения).

  • - 0.1 для действия, которое не приводит ни к какому движению (ленивый штраф).

  • Если сетка полностью исследуется, +200 раз вклад покрытия для того робота во время эпизода (отношение ячеек, исследуемых к общим ячейкам)

Задайте местоположения препятствий в сетке с помощью матрицы индексов. Первый столбец содержит индексы строки, и второй столбец содержит индексы столбца.

obsMat = [4 3; 5 3; 6 3; 7 3; 8 3; 9 3; 5 11; 6 11; 7 11; 8 11; 5 12; 6 12; 7 12; 8 12];

Инициализируйте положения робота.

sA0 = [2 2];
sB0 = [11 4];
sC0 = [3 12];
s0 = [sA0; sB0; sC0];

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

Ts = 0.1;
Tf = 100;
maxsteps = ceil(Tf/Ts);

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

mdl = "rlAreaCoverage";
open_system(mdl)

GridWorld блок является блоком MATLAB System, представляющим учебную среду. Системный объект для этой среды задан в GridWorld.m.

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

% Define observation specifications.
obsSize = [12 12 4];
oinfo = rlNumericSpec(obsSize);
oinfo.Name = 'observations';

% Define action specifications.
numAct = 5;
actionSpace = {0,1,2,3,4};
ainfo = rlFiniteSetSpec(actionSpace);
ainfo.Name = 'actions';

Задайте пути к блоку для агентов

blks = mdl + ["/Agent A (Red)","/Agent B (Green)","/Agent C (Blue)"];

Создайте интерфейс среды, задав те же спецификации наблюдений и спецификации действия для всех трех агентов.

env = rlSimulinkEnv(mdl,blks,{oinfo,oinfo,oinfo},{ainfo,ainfo,ainfo});

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

env.ResetFcn = @(in) resetMap(in, obsMat);

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

Агенты PPO используют представления актёра и критика, чтобы изучить оптимальную политику. В этом примере агенты обеспечивают глубоко основанные на нейронной сети функциональные аппроксимации для агента и критика. У и агента и критика есть подобные структуры сети со сверткой и полносвязными слоями. Критик выводит скалярное значение, представляющее значение состояния V(s). Агент выводит вероятности π(a|s)из взятия каждого из этих пяти действий. Для получения дополнительной информации смотрите rlValueRepresentation и rlStochasticActorRepresentation.

Установите случайный seed для воспроизводимости.

rng(0)

Создайте представления актёра и критика с помощью следующих шагов.

  1. Создайте глубокие нейронные сети критика и агент.

  2. Задайте опции представления для агента и критика. В этом примере задайте скорости обучения и пороги градиента. Для получения дополнительной информации смотрите rlRepresentationOptions.

  3. Создайте объекты представления актёра и критика.

Используйте ту же структуру сети и опции представления для всех трех агентов.

for idx = 1:3
    % Create actor deep neural network.
    actorNetWork = [
        imageInputLayer(obsSize,'Normalization','none','Name','observations')
        convolution2dLayer(8,16,'Name','conv1','Stride',1,'Padding',1,'WeightsInitializer','he')
        reluLayer('Name','relu1')
        convolution2dLayer(4,8,'Name','conv2','Stride',1,'Padding','same','WeightsInitializer','he')
        reluLayer('Name','relu2')
        fullyConnectedLayer(256,'Name','fc1','WeightsInitializer','he')
        reluLayer('Name','relu3')
        fullyConnectedLayer(128,'Name','fc2','WeightsInitializer','he')
        reluLayer('Name','relu4')
        fullyConnectedLayer(64,'Name','fc3','WeightsInitializer','he')
        reluLayer('Name','relu5')
        fullyConnectedLayer(numAct,'Name','output')
        softmaxLayer('Name','action')];
    
    % Create critic deep neural network.
    criticNetwork = [
        imageInputLayer(obsSize,'Normalization','none','Name','observations')
        convolution2dLayer(8,16,'Name','conv1','Stride',1,'Padding',1,'WeightsInitializer','he')
        reluLayer('Name','relu1')
        convolution2dLayer(4,8,'Name','conv2','Stride',1,'Padding','same','WeightsInitializer','he')
        reluLayer('Name','relu2')
        fullyConnectedLayer(256,'Name','fc1','WeightsInitializer','he')
        reluLayer('Name','relu3')
        fullyConnectedLayer(128,'Name','fc2','WeightsInitializer','he')
        reluLayer('Name','relu4')
        fullyConnectedLayer(64,'Name','fc3','WeightsInitializer','he')
        reluLayer('Name','relu5')
        fullyConnectedLayer(1,'Name','output')];
    
    % Specify representation options for the actor and critic.
    actorOpts = rlRepresentationOptions('LearnRate',1e-4,'GradientThreshold',1);
    criticOpts = rlRepresentationOptions('LearnRate',1e-4,'GradientThreshold',1);
    
    % create actor and critic
    actor(idx) = rlStochasticActorRepresentation(actorNetWork,oinfo,ainfo,...
        'Observation',{'observations'},actorOpts);
    critic(idx) = rlValueRepresentation(criticNetwork,oinfo,...
        'Observation',{'observations'},criticOpts);
end

Задайте опции агента с помощью rlPPOAgentOptions. Используйте те же опции для всех трех агентов. Во время обучения агенты собирают события, пока они не достигают горизонта опыта 128 шагов и затем обучаются от мини-пакетов 64 событий. Фактор клипа целевой функции 0,2 улучшает учебную устойчивость, и значение коэффициента дисконтирования 0,995 поощряет долгосрочные вознаграждения.

opt = rlPPOAgentOptions(...
    'ExperienceHorizon',128,...
    'ClipFactor',0.2,...
    'EntropyLossWeight',0.01,...
    'MiniBatchSize',64,...
    'NumEpoch',3,...
    'AdvantageEstimateMethod','gae',...
    'GAEFactor',0.95,...
    'SampleTime',Ts,...
    'DiscountFactor',0.995);

Создайте агентов с помощью заданных агентов, критиков и опций.

agentA = rlPPOAgent(actor(1),critic(1),opt);
agentB = rlPPOAgent(actor(2),critic(2),opt);
agentC = rlPPOAgent(actor(3),critic(3),opt);
agents = [agentA,agentB,agentC];

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

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

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

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

trainOpts = rlTrainingOptions(...
    'MaxEpisodes',1000,...
    'MaxStepsPerEpisode',maxsteps,...
    'Plots','training-progress',...
    'ScoreAveragingWindowLength',100,...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',80); 

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

Обучение является в вычислительном отношении интенсивным процессом, который занимает несколько минут, чтобы завершиться. Чтобы сэкономить время при выполнении этого примера, загрузите предварительно обученные параметры агента установкой doTraining к false. Чтобы обучить агента самостоятельно, установите doTraining к true.

doTraining = false;
if doTraining
    stats = train(agents,env,trainOpts);
else
    load('rlAreaCoverageParameters.mat');
    setLearnableParameters(agentA,agentAParams);
    setLearnableParameters(agentB,agentBParams);
    setLearnableParameters(agentC,agentCParams);
end

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

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

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

rng(0) % reset the random seed
simOpts = rlSimulationOptions('MaxSteps',maxsteps);
experience = sim(env,agents,simOpts);

Агенты успешно покрывают целый мир сетки.

Смотрите также

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте