В этом примере показано, как обучить несколько агентов совместно выполнять управление следования траектории (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) обеспечивают продольное ускорение и держащиеся угловые сигналы, соответственно.
Симуляция завершает работу, когда любое из следующих условий происходит.
(величина бокового отклонения превышает 1),
(продольная скорость автомобиля эго опускается ниже 0.5.
(расстояние между эго и ведущим автомобилем ниже нуля),
Для продольного контроллера (RL Agent1):
Ссылочная скорость для автомобиля эго определяется следующим образом. Если относительное расстояние меньше безопасного расстояния, трамвайные пути эго минимум ведущей автомобильной скорости и скорости набора драйверов. Этим способом автомобиль эго обеспечивает некоторое расстояние от ведущего автомобиля. Если относительное расстояние больше безопасного расстояния, трамвайные пути эго скорость набора драйверов. В этом примере безопасное расстояние задано как линейная функция автомобиля эго продольная скорость , то есть, . Безопасное расстояние определяет скорость отслеживания для автомобиля эго.
Наблюдения средой содержат продольные измерения: ошибка скорости , его интеграл , и автомобиль эго продольная скорость .
Сигнал действия состоит из непрерывных ускоряющих значений между-3 и 2 м/с^2.
Вознаграждение , если на каждом временном шаге ,
Здесь, ускоряющий вход от предыдущего временного шага, и:
если симуляция отключена в противном случае .
если , в противном случае .
Для бокового контроллера (RL Agent2):
Наблюдения средой содержат боковые измерения: боковое отклонение , относительный угол рыскания , их производные и , и их интегралы и .
Сигнал действия состоит из дискретных руководящих угловых действий, которые принимают значения от-15 градусов (-0.2618 рад) до 15 градусов (0,2618 рад) с шагом 1 степени (0,0175 рад).
Вознаграждение , если на каждом временном шаге ,
Здесь, руководящий вход от предыдущего временного шага, ускоряющий вход от предыдущего временного шага, и:
если симуляция отключена в противном случае .
, в противном случае .
Логические условия в премиальных функциях (, , и ) оштрафуйте агентов, если симуляция завершает работу рано, поощряя агентов совершить и боковую ошибку и небольшую ошибку скорости.
Создайте спецификации наблюдений и спецификации действия для продольного цикла управления.
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 м.