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

В этом примере показано, как обучить нескольких агентов совместно выполнять управление по пути (PFC) для транспортного средства. Цель PFC состоит в том, чтобы заставить автомобиль , оборудованный датчиком перемещаться с заданной скоростью при сохранении безопасного расстояния от головного автомобиля путем управления продольным ускорением и торможением, а также при сохранении автомобиля, перемещающегося по осевой линии своей полосы движения, путем управления углом наклона переднего руля. Для получения дополнительной информации о PFC, смотрите Путь после системы управления (Model Predictive Control Toolbox).

Обзор

Пример, который обучает агента обучения с подкреплением для выполнения PFC, показан в Train DDPG Agent for Path-Following Control. В этом примере один агент глубокого детерминированного градиента политики (DDPG) обучен управлять как продольной скоростью, так и боковым управлением автомобиля , оборудованного датчиком. В этом примере вы обучаете двух агентов обучения с подкреплением - агент DDPG обеспечивает непрерывные значения ускорения для продольного цикла управления, а агент глубокой Q-сети (DQN) обеспечивает дискретные значения угла поворота для бокового цикла управления.

Обученные агенты выполняют PFC через совместное поведение и достигают удовлетворительных результатов.

Создайте окружение

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

Загрузите параметры окружения.

multiAgentPFCParams

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

mdl = "rlMultiAgentPFC";
open_system(mdl)

В этой модели два агента обучения с подкреплением (RL Agent1 и RL Agent2) обеспечивают сигналы продольного ускорения и угла поворота, соответственно.

Симуляция прекращается, когда происходит любое из следующих условий.

  • |e1|>1 (величина бокового отклонения превышает 1)

  • Vego<0.5 (продольная скорость эго-вагона падает ниже 0,5.

  • Drel<0 (расстояние между ego и свинцовой машиной ниже нуля)

Для продольного контроллера (RL Agent1):

  • Исходная скорость для ego-автомобиля Vref определяется следующим образом. Если относительное расстояние меньше безопасного расстояния, эго-вагон отслеживает минимум скорости свинцового вагона и установленной водителем скорости. Таким образом эго-машина сохраняет некоторое расстояние от головной машины. Если относительное расстояние больше безопасного расстояния, ego-автомобиль отслеживает заданную водителем скорость. В этом примере безопасное расстояние определяется как линейная функция продольной скорости ego-автомобиля V, то есть, tgap*V+Ddefault. Безопасное расстояние определяет скорость отслеживания для эго-автомобиля.

  • Наблюдения от окружения содержат продольные измерения: ошибка скорости eV=Vref-V, его интеграл e, и продольная скорость ego-автомобиля V.

  • Сигнал действия состоит из значений непрерывного ускорения от -3 до 2 м/с ^ 2.

  • Вознаграждение rt, предоставляется в каждый временной шаг tявляется

rt=-(10eV2+100at-12)×1e-3-10Ft+Mt

Вот, at-1 является входом ускорения от предыдущего временного шага и:

  • Ft=1 если симуляция прекращена, в противном случае Ft=0.

  • Mt=1 если eV2<1, в противном случае Mt=0.

Для бокового контроллера (RL Agent2):

  • Наблюдения от окружения содержат боковые измерения: боковое отклонение e1, относительный угол рыскания e2, их производные e˙1 и e˙2, и их интегралы e1 и e2.

  • Сигнал действия состоит из дискретных действий угла поворота, которые берут значения от -15 степеней (-0,2618 рад) до 15 степеней (0,2618 рад) в шагах 1 степень (0,0175 рад).

  • Вознаграждение rt, предоставляется в каждый временной шаг tявляется

rt=-(100e12+500ut-12)×1e-3-10Ft+2Ht

Вот, ut-1 является управляющим входом от предыдущего временного шага, at-1 является входом ускорения от предыдущего временного шага и:

  • Ft=1если симуляция прекращена, в противном случае Ft=0.

  • Ht=1 e12<0.01 , в противном случае Ht=0 .

Логические условия в функциях вознаграждения (Ft, Mt, и Ht) штрафовать агентов, если симуляция прекращается раньше, в то же время побуждая агентов сделать и латеральную ошибку, и ошибку скорости маленькими.

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

obsInfo1 = rlNumericSpec([3 1]);
actInfo1 = rlNumericSpec([1 1],'LowerLimit',-3,'UpperLimit',2);

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

obsInfo2 = rlNumericSpec([6 1]);
actInfo2 = rlFiniteSetSpec((-15:15)*pi/180);

Объедините наблюдение и спецификации действия как массив ячеек.

obsInfo = {obsInfo1,obsInfo2};
actInfo = {actInfo1,actInfo2};

Создайте интерфейс окружения Simulink, задав пути блоков для обоих блоков агента. Порядок путей к блокам должен совпадать с порядком массивов ячеек наблюдений и спецификацией действия.

blks = mdl + ["/RL Agent1", "/RL Agent2"];
env = rlSimulinkEnv(mdl,blks,obsInfo,actInfo);

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

env.ResetFcn = @pfcResetFcn;

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

В данном примере вы создаете двух агентов обучения с подкреплением. Во-первых, исправьте случайный seed для воспроизводимости.

rng(0)

Оба агента работают в одном и том же шаге расчета в этом примере. Установите значение шага расчета (в секундах).

Ts = 0.1;

Продольное управление

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

Используйте createCCAgent функция для создания агента DDPG для продольного управления. Структура этого агента подобна примеру Train DDPG Agent for Adaptive Cruise Control.

agent1 = createACCAgent(obsInfo1,actInfo1,Ts);

Боковое управление

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

Используйте createLKAAgent функция для создания агента DQN для бокового управления. Структура этого агента подобна примеру Train DQN Agent for Lane Keeping Assist.

agent2 = createLKAAgent(obsInfo2,actInfo2,Ts);

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

Задайте опции обучения. В данном примере используйте следующие опции.

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

  • Отображение процесса обучения в диалоговом окне Диспетчер эпизодов (установите Verbose и Plots опции).

  • Остановите обучение агентов DDPG и DQN, когда они получат среднее вознаграждение, больше 480 и 1195, соответственно. Когда один агент достигает своих критериев остановки, он моделирует свою собственную политику, не обучаясь, в то время как другой агент продолжает обучение.

Tf = 60; % simulation time
maxepisodes = 5000;
maxsteps = ceil(Tf/Ts);
trainingOpts = rlTrainingOptions(...
    'MaxEpisodes',maxepisodes,...
    'MaxStepsPerEpisode',maxsteps,...
    'Verbose',false,...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',[480,1195]);

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

doTraining = false;
if doTraining    
    % Train the agent.
    trainingStats = train([agent1,agent2],env,trainingOpts);
else
    % Load pretrained agents for the example.
    load('rlPFCAgents.mat')       
end

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

Моделирование агентов

Чтобы подтвердить эффективность обученных агентов, симулируйте агентов в окружение Simulink, отключив следующие команды. Для получения дополнительной информации о симуляции агента смотрите rlSimulationOptions и sim.

% simOptions = rlSimulationOptions('MaxSteps',maxsteps);
% experience = sim(env,[agent1, agent2],simOptions);

Чтобы продемонстрировать обученного агента с помощью детерминированных начальных условий, симулируйте модель в Simulink.

e1_initial = -0.4;
e2_initial = 0.1;
x0_lead = 80;
sim(mdl)

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

  • Головной автомобиль периодически изменяет скорость с 24 м/с до 30 м/с (правый верхний график). ego car поддерживает безопасное расстояние на протяжении всей симуляции (нижний правый график).

  • От 0 до 30 секунд ego-автомобиль отслеживает заданную скорость (график справа сверху) и испытывает некоторое ускорение (график слева сверху). После этого ускорение уменьшается до 0.

  • На левом нижнем графике показано боковое отклонение. Как показано на графике, боковое отклонение значительно уменьшается в течение 1 секунды. Боковое отклонение остается меньше 0,1 м.

См. также

|

Похожие темы