exponenta event banner

Канал агента 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] (м/с ^ 2), и угол поворота ограничен [–0.5,0.5] (рад).

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

Кривизна дороги определяется постоянной величиной 0,001 (м-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 (м/с ^ 2). Сигнал управления принимает значение от -15 градусов (-0.2618 рад) до 15 градусов (0.2618 рад).

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

  • Наблюдения из окружающей среды содержат продольные измерения: погрешность скорости eV = Vref-Vego, её интегральная ∫e, и продольная скорость ego автомобиля 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.

    Создайте спецификацию наблюдения.

    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

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

    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)

    Figure contains an axes. The axes contains an object of type graphplot.

    Укажите параметры критического представления с помощью rlRepresentationOptions.

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

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

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

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

    Построить актера аналогично критику. Дополнительные сведения см. в разделе rlDeterministicActorRepresentation.

    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.

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

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

    agent = rlDDPGAgent(actor,critic,agentOptions);

    Агент поезда

    Для обучения агента сначала укажите варианты обучения. В этом примере используются следующие опции:

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

    • Отображение хода обучения в диалоговом окне «Менеджер эпизодов» (установите Verbose и Plots опции).

    • Прекратить обучение, когда агент получает совокупное вознаграждение за эпизод, превышающее 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 a pretrained agent for the example.
        load('SimulinkPFCDDPG.mat','agent')       
    end

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

    Для проверки производительности обучаемого агента смоделируйте агента в среде Simulink, не комментируя следующие команды. Дополнительные сведения о моделировании агентов см. в разделе 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 (м) впереди эго-автомобиля.

    • В первые 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

    См. также

    Связанные темы