В этом примере показано, как обучить агента глубоко детерминированного градиента политики (DDPG) управлению следования траектории (PFC) в Simulink®. Для получения дополнительной информации об агентах DDPG смотрите Глубоко Детерминированных Агентов Градиента политики (Reinforcement Learning Toolbox).
Среда обучения с подкреплением для этого примера является простой моделью велосипеда для автомобиля эго и простой продольной моделью для ведущего автомобиля. Цель обучения должна сделать автомобильное перемещение эго при скорости набора при поддержании безопасного расстояния от ведущего автомобиля путем управления продольным ускорением и торможением, и также при хранении автомобиля эго, перемещающегося вдоль средней линии его маршрута путем управления передним руководящим углом. Для получения дополнительной информации о PFC смотрите Систему управления Следования траектории (Model Predictive Control Toolbox). Автомобильные движущие силы эго заданы следующими параметрами.
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]
(м/с^2) и держащийся угол ограничиваются быть [–0.5,0.5]
(рад).
amin_ego = -3; amax_ego = 2; umin_ego = -0.5; umax_ego = 0.5;
Искривление дороги задано постоянными 0.001 (). Начальное значение для бокового отклонения составляет 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 (м/с^2). Держащийся сигнал действия принимает значение между –15 градусами (–0.2618 рад) и 15 градусов (0,2618 рад).
Ссылочная скорость для автомобиля эго определяется следующим образом. Если относительное расстояние меньше безопасного расстояния, трамвайные пути эго минимум ведущей автомобильной скорости и скорости набора драйверов. Этим способом автомобиль эго обеспечивает некоторое расстояние от ведущего автомобиля. Если относительное расстояние больше безопасного расстояния, трамвайные пути эго скорость набора драйверов. В этом примере безопасное расстояние задано как линейная функция автомобиля эго продольная скорость , то есть, . Безопасное расстояние определяет скорость отслеживания для автомобиля эго.
Наблюдения средой содержат продольные измерения: ошибка скорости , его интеграл , и автомобиль эго продольная скорость . Кроме того, наблюдения содержат боковые измерения: боковое отклонение , относительный угол рыскания , их производные и , и их интегралы и .
Симуляция завершает работу когда боковое отклонение , когда продольная скорость , или когда относительное расстояние между ведущим автомобилем и автомобилем эго .
Вознаграждение , если на каждом временном шаге ,
где руководящий вход от предыдущего временного шага , ускоряющий вход от предыдущего временного шага. Три логических значения следующие.
если симуляция отключена в противном случае
если боковая ошибка , в противном случае
если ошибка скорости , в противном случае
Три логических термина в вознаграждении поощряют агента совершать и боковую ошибку и небольшую ошибку скорости, и тем временем, штрафовать агента, если симуляция отключена рано.
Создайте интерфейс среды для модели Simulink.
Создайте спецификацию наблюдений.
observationInfo = rlNumericSpec([9 1],'LowerLimit',-inf*ones(9,1),'UpperLimit',inf*ones(9,1)); observationInfo.Name = 'observations';
Создайте спецификацию действия.
actionInfo = rlNumericSpec([2 1],'LowerLimit',[-3;-0.2618],'UpperLimit',[2;0.2618]); actionInfo.Name = 'accel;steer';
Создайте интерфейс среды.
env = rlSimulinkEnv(mdl,agentblk,observationInfo,actionInfo);
Чтобы задать начальные условия, задайте функцию сброса среды использование указателя анонимной функции. Функция сброса localResetFcn
, то, которое задано в конце примера, рандомизирует исходное положение ведущего автомобиля, бокового отклонения и относительного угла рыскания.
env.ResetFcn = @(in)localResetFcn(in);
Для повторяемости результатов зафиксируйте начальное значение генератора случайных чисел.
rng(0)
Агент DDPG аппроксимирует долгосрочные премиальные заданные наблюдения и действия при помощи представления функции ценности критика. Чтобы создать критика, сначала создайте глубокую нейронную сеть с двумя входными параметрами, состоянием и действием и одним выходом. Для получения дополнительной информации о создании представления функции ценности глубокой нейронной сети смотрите, Создают политику и Представления Функции ценности (Reinforcement Learning Toolbox).
L = 100; % number of neurons statePath = [ featureInputLayer(9,'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 = [ featureInputLayer(2,'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
(Reinforcement Learning Toolbox).
criticOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1,'L2RegularizationFactor',1e-4);
Создайте представление критика с помощью заданной глубокой нейронной сети и опций. Необходимо также задать информацию о действии и наблюдении для критика, которого вы получаете из интерфейса среды. Для получения дополнительной информации смотрите rlQValueRepresentation
(Reinforcement Learning Toolbox).
critic = rlQValueRepresentation(criticNetwork,observationInfo,actionInfo,... 'Observation',{'observation'},'Action',{'action'},criticOptions);
Агент DDPG решает который действие взять заданные наблюдения при помощи представления актера. Чтобы создать агента, сначала создайте глубокую нейронную сеть с одним входом, наблюдением, и одним выходом, действием.
Создайте агента так же критику. Для получения дополнительной информации смотрите rlDeterministicActorRepresentation
(Reinforcement Learning Toolbox).
actorNetwork = [ featureInputLayer(9,'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',[2.5;0.2618],'Bias',[-0.5;0])]; actorOptions = rlRepresentationOptions('LearnRate',1e-4,'GradientThreshold',1,'L2RegularizationFactor',1e-4); actor = rlDeterministicActorRepresentation(actorNetwork,observationInfo,actionInfo,... 'Observation',{'observation'},'Action',{'ActorScaling1'},actorOptions);
Чтобы создать агента DDPG, сначала задайте опции агента DDPG с помощью rlDDPGAgentOptions
(Reinforcement Learning Toolbox).
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
(Reinforcement Learning Toolbox).
agent = rlDDPGAgent(actor,critic,agentOptions);
Чтобы обучить агента, сначала задайте опции обучения. В данном примере используйте следующие опции:
Запустите каждый эпизод тренировки для в большей части 10000
эпизоды, с каждым эпизодом, длящимся в большей части maxsteps
временные шаги.
Отобразите прогресс обучения в диалоговом окне Episode Manager (установите Verbose
и Plots
опции.
Остановите обучение, когда агент получит совокупное вознаграждение эпизода, больше, чем 1700
.
Для получения дополнительной информации смотрите rlTrainingOptions
(Reinforcement Learning Toolbox).
maxepisodes = 1e4; maxsteps = ceil(Tf/Ts); trainingOpts = rlTrainingOptions(... 'MaxEpisodes',maxepisodes,... 'MaxStepsPerEpisode',maxsteps,... 'Verbose',false,... 'Plots','training-progress',... 'StopTrainingCriteria','EpisodeReward',... 'StopTrainingValue',1700);
Обучите агента с помощью train
(Reinforcement Learning Toolbox) функция. Обучение является в вычислительном отношении интенсивным процессом, который занимает несколько минут, чтобы завершиться. Чтобы сэкономить время при выполнении этого примера, загрузите предварительно обученного агента установкой doTraining
к false
. Чтобы обучить агента самостоятельно, установите doTraining
к true
.
doTraining = false; if doTraining % Train the agent. trainingStats = train(agent,env,trainingOpts); else % Load a pretrained agent for the example. load('SimulinkPFCDDPG.mat','agent') end
Чтобы подтвердить производительность обученного агента, симулируйте агента в окружении Simulink путем некомментария следующих команд. Для получения дополнительной информации о симуляции агента смотрите rlSimulationOptions
(Reinforcement Learning Toolbox) и sim
(Reinforcement Learning Toolbox).
% 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 секунд относительное расстояние становится меньше, чем безопасное расстояние (нижний правый график), таким образом, автомобиль эго замедляется и отслеживает ведущую скорость.
Нижний левый график показывает боковое отклонение. Как показано в графике, боковое отклонение значительно уменьшено в течение 1 секунды. Боковое отклонение остается меньше чем 0,05 м.
Закройте модель Simulink.
bdclose(mdl)
function in = localResetFcn(in) 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
train
(Reinforcement Learning Toolbox)