В этом примере показано, как обучить нескольких агентов совместному выполнению управления путем следования (PFC) для транспортного средства. Целью PFC является обеспечение движения эго-транспортного средства с заданной скоростью при сохранении безопасного расстояния от ведущего автомобиля путем управления продольным ускорением и торможением, а также при удержании транспортного средства, движущегося вдоль осевой линии его полосы движения, посредством управления углом переднего рулевого управления. Дополнительные сведения о PFC см. в разделе Система управления путем следования (панель инструментов управления прогнозом модели).
Пример обучения агента обучения усилению для выполнения PFC показан в документе Train DDPG Agent for Path-Following Control. В этом примере один агент глубокого детерминированного политического градиента (DDPG) обучается управлять как продольной скоростью, так и поперечным управлением эго-транспортным средством. В этом примере обучаются два агента обучения усилению - агент DDPG обеспечивает непрерывные значения ускорения для продольного контура управления, а агент глубокой Q-сети (DQN) обеспечивает дискретные значения угла поворота для бокового контура управления.
Обученные агенты выполняют PFC посредством кооперативного поведения и достигают удовлетворительных результатов.
Среда для этого примера включает простую велосипедную модель для эго-автомобиля и простую продольную модель для ведущего автомобиля. Цель обучения состоит в том, чтобы сделать движение эго-автомобиля с заданной скоростью при сохранении безопасного расстояния от ведущего автомобиля путем управления продольным ускорением и торможением, в то же время удерживая эго-автомобиль, движущийся вдоль осевой линии его полосы, посредством управления углом переднего рулевого управления.
Загрузите параметры среды.
multiAgentPFCParams
Откройте модель Simulink.
mdl = "rlMultiAgentPFC";
open_system(mdl)
В этой модели два обучающих агента усиления (RL Agent1 и RL Agent2) обеспечивают сигналы продольного ускорения и угла поворота рулевого управления соответственно.
Моделирование завершается при выполнении любого из следующих условий.
> 1 (величина бокового отклонения превышает 1)
0,5 (продольная скорость эго-вагона падает ниже 0,5.
0 (расстояние между эго и ведущим автомобилем ниже нуля)
Для продольного контроллера (RL Agent1):
Опорная скорость для эго-вагона определяется следующим образом. Если относительное расстояние меньше безопасного расстояния, эго-автомобиль отслеживает минимальную скорость ведущего автомобиля и заданную водителем скорость. Таким образом, эго-вагон сохраняет некоторое расстояние от ведущего вагона. Если относительное расстояние больше безопасного расстояния, эго-автомобиль отслеживает заданную водителем скорость. В этом примере безопасное расстояние определяется как линейная функция продольной скорости эго-вагона, то есть Ddefault. Безопасное расстояние определяет скорость слежения за эго-автомобилем.
Наблюдения из окружающей среды содержат продольные измерения: погрешность скорости Vref-V, её ∫e и продольная V эго-вагона.
Сигнал действия состоит из значений непрерывного ускорения от -3 до 2 м/с ^ 2.
Вознаграждение , предоставляемое на каждом шаге , равно
1e-3-10Ft + Мт
Здесь - это входное ускорение предыдущего временного шага, и:
1, если моделирование завершено, = 0.
1 < 1, Mt = 0.
Для бокового контроллера (RL Agent2):
Наблюдения из окружающей среды содержат поперечные измерения: боковое отклонение , относительный угол рыскания , их производные и , а также их интегралы и .
Сигнал действия состоит из дискретных действий угла поворота, которые принимают значения от -15 градусов (-0,2618 рад) до 15 градусов (0,2618 рад) с шагом 1 градус (0,0175 рад).
Вознаграждение , предоставляемое на каждом шаге , равно
1e-3-10Ft + 2Ht
Здесь является входом управления от предыдущего временного шага, является входом ускорения от предыдущего временного шага, и:
1, если моделирование завершено, = 0.
1 0,01, = 0.
Логические термины в функциях вознаграждения (, и ) штрафуют агентов, если моделирование заканчивается рано, при этом поощряя агентов делать как боковую ошибку, так и ошибку скорости малой.
Создайте характеристики наблюдения и действия для продольного контура управления.
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;
В этом примере создаются два обучающих агента усиления. Во-первых, зафиксируйте случайное начальное число для воспроизводимости.
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» для примера «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)
Следующие графики показывают результаты, когда ведущий автомобиль опережает эго-автомобиль на 70 м в начале моделирования.
Ведущий автомобиль периодически меняет скорость с 24 м/с на 30 м/с (верхний правый участок). Автомобиль ego сохраняет безопасное расстояние на протяжении всего моделирования (график снизу справа).
От 0 до 30 секунд эго-автомобиль отслеживает заданную скорость (график сверху справа) и испытывает некоторое ускорение (график сверху слева). После этого ускорение снижается до 0.
На левом нижнем графике показано боковое отклонение. Как показано на графике, боковое отклонение значительно уменьшается в течение 1 секунды. Боковое отклонение остается менее 0,1 м.

