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

Этот пример показывает, как обучить агент глубоко детерминированного градиента политики (DDPG) управлению следования траектории (PFC) в Simulink®. Для получения дополнительной информации об агентах DDPG смотрите Глубоко Детерминированные Агенты Градиента политики.

Модель Simulink

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

m = 1600;   % total vehicle mass (kg)
Iz = 2875;  % yaw moment of inertia (mNs^2)
lf = 1.4;   % longitudinal distance from center of gravity to front tires (m)
lr = 1.6;   % longitudinal distance from center of gravity to rear tires (m)
Cf = 19000; % cornering stiffness of front tires (N/rad)
Cr = 33000; % cornering stiffness of rear tires (N/rad)
tau = 0.5;  % longitudinal time constant

Задайте исходное положение и скорость для этих двух автомобилей.

x0_lead = 50;   % initial position for lead car (m)
v0_lead = 24;   % initial velocity for lead car (m/s)
x0_ego = 10;    % initial position for ego car (m)
v0_ego = 18;    % initial velocity for ego car (m/s)

Задайте значение по умолчанию бездействия, располагающее с интервалами (m), разрыв (разрывы) времени и скорость набора драйверов (m/s).

D_default = 10;
t_gap = 1.4;
v_set = 28;

Рассматривая физические ограничения динамики аппарата, ускорение ограничивается к области значений [-3,2] (m/s^2), и держащийся угол ограничивается быть [-0.5 0.5] (рад).

amin_ego = -3;
amax_ego = 2;
umin_ego = -0.5;
umax_ego = 0.5;

Искривление дороги задано постоянными 0.001 (m-1). Начальное значение для бокового отклонения составляет 0,2 м, и начальное значение для относительного угла отклонения от курса является-0.1 радами.

rho = 0.001;
e1_initial = 0.2;
e2_initial = -0.1;

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

Ts = 0.1;
Tf = 60;

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

mdl = 'rlPFCMdl';
open_system(mdl)
agentblk = [mdl '/RL Agent'];

Для этой модели:

  • Сигнал действия состоит из ускорения и держащихся угловых действий. Ускоряющий сигнал действия принимает значение между-3 и 2 (m/s^2). Держащийся сигнал действия принимает значение между-15 градусами (-0.2618 рада) до 15 градусов (0,2618 рада).

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

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

  • Симуляция отключена когда боковое отклонение |e1|>1 или продольная скорость Vego<0.5 или относительное расстояние между ведущим автомобилем и автомобилем эго Drel<0.

  • Вознаграждение rt, если на каждом временном шаге t:

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

где ut-1 руководящий вход от предыдущего временного шага t-1, at-1 ускоряющий вход от предыдущего временного шага. Три логических значения: Ft=1если симуляция отключена в противном случае Ft=0; Ht=1 если боковая ошибка e12<0.01, в противном случае Ht=0; Mt=1 если ошибка скорости eV2<1, в противном случае Mt=0. Три логических условия в вознаграждении поощряют агент совершать и боковую ошибку и небольшую ошибку скорости, тем временем, штрафовать агент, если симуляция отключена рано.

Создайте интерфейс среды

Создайте интерфейс среды для модели Simulink.

% create the observation info
observationInfo = rlNumericSpec([9 1],'LowerLimit',-inf*ones(9,1),'UpperLimit',inf*ones(9,1));
observationInfo.Name = 'observations';
% action Info
actionInfo = rlNumericSpec([2 1],'LowerLimit',[-3;-0.2618],'UpperLimit',[2;0.2618]);
actionInfo.Name = 'accel;steer';
% define environment
env = rlSimulinkEnv(mdl,agentblk,observationInfo,actionInfo);

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

% randomize initial positions of lead car, lateral deviation and relative
% yaw angle
env.ResetFcn = @(in)localResetFcn(in);

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

rng(0)

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

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

L = 100; % number of neurons
statePath = [
    imageInputLayer([9 1 1], 'Normalization', 'none', 'Name', 'observation')
    fullyConnectedLayer(L, 'Name', 'fc1')
    reluLayer('Name', 'relu1')
    fullyConnectedLayer(L, 'Name', 'fc2')
    additionLayer(2,'Name','add')
    reluLayer('Name','relu2')
    fullyConnectedLayer(L, 'Name', 'fc3')
    reluLayer('Name','relu3')
    fullyConnectedLayer(1, 'Name', 'fc4')];

actionPath = [
    imageInputLayer([2 1 1], 'Normalization', 'none', 'Name', 'action')
    fullyConnectedLayer(L, 'Name', 'fc5')];

criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork, actionPath);
    
criticNetwork = connectLayers(criticNetwork,'fc5','add/in2');

Просмотрите конфигурацию сети критика.

figure
plot(criticNetwork)

Задайте опции для представления критика с помощью rlRepresentationOptions.

criticOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1,'L2RegularizationFactor',1e-4);

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

critic = rlRepresentation(criticNetwork,criticOptions,'Observation',{'observation'},observationInfo,'Action',{'action'},actionInfo);

Агент DDPG решает который действие взять данный наблюдения с помощью представления агента. Чтобы создать агента, сначала создайте глубокую нейронную сеть с одним входом, наблюдением, и одним выводом, действием.

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

actorNetwork = [
    imageInputLayer([9 1 1], 'Normalization', 'none', 'Name', 'observation')
    fullyConnectedLayer(L, 'Name', 'fc1')
    reluLayer('Name', 'relu1')
    fullyConnectedLayer(L, 'Name', 'fc2')
    reluLayer('Name', 'relu2')
    fullyConnectedLayer(L, 'Name', 'fc3')
    reluLayer('Name', 'relu3')
    fullyConnectedLayer(2, 'Name', 'fc4')
    tanhLayer('Name','tanh1')
    scalingLayer('Name','ActorScaling1','Scale',reshape([2.5;0.2618],[1,1,2]),'Bias',reshape([-0.5;0],[1,1,2]))];
actorOptions = rlRepresentationOptions('LearnRate',1e-4,'GradientThreshold',1,'L2RegularizationFactor',1e-4);
actor = rlRepresentation(actorNetwork,actorOptions,'Observation',{'observation'},observationInfo, ....
  'Action',{'ActorScaling1'},actionInfo);

Чтобы создать агент DDPG, сначала задайте опции агента DDPG с помощью rlDDPGAgentOptions.

agentOptions = rlDDPGAgentOptions(...
    'SampleTime',Ts,...
    'TargetSmoothFactor',1e-3,...
    'ExperienceBufferLength',1e6,...
    'DiscountFactor',0.99, ...
    'MiniBatchSize',64);
agentOptions.NoiseOptions.Variance = [0.6;0.1];
agentOptions.NoiseOptions.VarianceDecayRate = 1e-5;

Затем создайте агент DDPG с помощью заданного представления агента, представления критика и опций агента. Для получения дополнительной информации смотрите rlDDPGAgent.

agent = rlDDPGAgent(actor,critic,agentOptions);

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

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

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

  • Отобразите учебный прогресс диалогового окна Episode Manager.

  • Остановите обучение, когда агент получит среднее совокупное вознаграждение, больше, чем 1700.

Для получения дополнительной информации смотрите rlTrainingOptions.

maxepisodes = 1e4;
maxsteps = ceil(Tf/Ts);
trainingOpts = rlTrainingOptions(...
    'MaxEpisodes',maxepisodes, ...
    'MaxStepsPerEpisode',maxsteps, ...
    'Verbose',false, ...
    'Plots','training-progress',...
    'StopTrainingCriteria','EpisodeReward',...
    'StopTrainingValue', 1700);

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

doTraining = false;

if doTraining    
    % Train the agent.
    trainingStats = train(agent,env,trainingOpts);
else
    % Load pretrained agent for the example.
    load('SimulinkPFCDDPG.mat','agent')       
end

Моделируйте агент DDPG

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

% simOptions = rlSimulationOptions('MaxSteps',maxsteps);
% experience = sim(env,agent,simOptions);

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

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

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

  • За первые 35 секунд относительное расстояние больше, чем безопасное расстояние (правый нижний график), таким образом скорость набора трамвайных путей эго (правый верхний график). Чтобы убыстриться и достигнуть скорости набора, ускорение является в основном неотрицательным (левый верхний график).

  • С 35 до 42 секунд относительное расстояние является в основном меньше, чем безопасное расстояние (правый нижний график), таким образом трамвайные пути эго минимум ведущей скорости и скорости набора. Поскольку ведущая скорость является меньше, чем скорость набора (правый верхний график), чтобы отследить ведущую скорость, ускорение становится ненулевым (левый верхний график).

  • С 42 до 58 секунд трамвайные пути эго устанавливают скорость (правый верхний график), и ускорение остается нуль (левый верхний график).

  • С 58 до 60 секунд относительное расстояние становится меньше, чем безопасное расстояние (правый нижний график), таким образом автомобиль эго замедляется и отслеживает ведущую скорость.

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

Модель Close Simulink.

bdclose(mdl)

Локальная функция

function in = localResetFcn(in)
% reset 
in = setVariable(in,'x0_lead',40+randi(60,1,1));    % random value for initial position of lead car
in = setVariable(in,'e1_initial', 0.5*(-1+2*rand)); % random value for lateral deviation
in = setVariable(in,'e2_initial', 0.1*(-1+2*rand)); % random value for relative yaw angle
end

MATLAB и Simulink являются зарегистрированными торговыми марками MathWorks, Inc. См. www.mathworks.com/trademarks для списка других товарных знаков, принадлежавших MathWorks, Inc. Другим продуктом или фирменными знаками являются товарные знаки или зарегистрированные торговые марки их соответствующих владельцев.

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

Похожие темы

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