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

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

Обзор

В примере, который обучает агента обучения с подкреплением выполнять PFC, показывают, Обучают Агента DDPG Управлению Следования траектории. В том примере один агент глубоко детерминированного градиента политики (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 (расстояние между эго и ведущим автомобилем ниже нуля),

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

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

  • Наблюдения средой содержат продольные измерения: ошибка скорости eV=Vref-V, его интеграл e, и автомобиль эго продольная скорость 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 для продольного управления. Структура этого агента похожа на Обучение Агента DDPG для Адаптивного примера Круиз-контроля.

agent1 = createACCAgent(obsInfo1,actInfo1,Ts);

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

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

Используйте createLKAAgent функция, чтобы создать агента DQN для бокового управления. Структура этого агента похожа на Обучение Агента DQN для Хранения Маршрута, Помогают примеру.

agent2 = createLKAAgent(obsInfo2,actInfo2,Ts);

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

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

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

  • Отобразите прогресс обучения в диалоговом окне Episode Manager (установите 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)

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

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

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

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

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

|

Похожие темы