主要内容

培训DQN代理保持车道辅助

本示例展示了如何在Simulink®中训练深度q学习网络(DQN)代理进行车道保持辅助(LKA)。万博1manbetx有关DQN代理的更多信息,请参见深度q -网络代理

万博1manbetx自我汽车的Simulink模型

本例的强化学习环境是自我车辆动力学的简单自行车模型。训练目标是通过调整前转向角度,使车辆沿着车道的中心线行驶。本例中使用的车辆模型与基于模型预测控制的车道保持辅助系统(模型预测控制工具箱).自我汽车的动态由以下参数指定。

M = 1575;车辆总质量百分比(kg)Iz = 2875;%横摆惯性矩(mNs^2)Lf = 1.2;重心到前轮纵向距离% (m)Lr = 1.6;重心到后轮纵向距离% (m)Cf = 19000;前轮胎转弯刚度% (N/rad)Cr = 33000;后轮胎转弯刚度% (N/rad)Vx = 15;纵向速度% (m/s)

定义采样时间Ts以及模拟持续时间T在几秒钟内。

Ts = 0.1;T = 15;

LKA系统的输出是小轿车的前转向角。为了模拟自我汽车的物理限制,将转向角度限制在范围内[-0.5, 0.5]rad。

U_min = -0.5;U_max = 0.5;

道路的曲率由常数0.001 ( - 1 ).横向偏差的初始值为0.2 m,相对偏航角的初始值为-0.1 rad。

Rho = 0.001;E1_initial = 0.2;E2_initial = -0.1;

打开模型。

mdl =“rlLKAMdl”;open_system (mdl);Agentblk = [mdl .' / RL代理'];

对于这个模型:

  • 从药剂到环境的转向角动作信号为-15度到15度。

  • 从环境中观测到的是横向偏差 e 1 为相对偏航角 e 2 ,它们的导数 e ˙ 1 而且 e ˙ 2 和它们的积分 e 1 而且 e 2

  • 当侧向偏移时,模拟终止 | e 1 | > 1

  • 奖励 r t ,在每个时间步提供 t ,是

r t - 1 0 e 1 2 + 5 e 2 2 + 2 u 2 + 5 e ˙ 1 2 + 5 e ˙ 2 2

在哪里 u 控制输入来自前一个时间步长吗 t - 1

创建环境界面

为自我飞行器创建一个强化学习环境界面。为此,首先创建观察和操作规范。

observationInfo = rlNumericSpec([6 1],“LowerLimit”,负无穷* (6,1),“UpperLimit”,正* (6,1));observationInfo。Name =“观察”;observationInfo。描述=横向偏差和相对偏航角的信息;actionInfo = rlFiniteSetSpec((-15:15)*pi/180);actionInfo。Name =“转向”

然后,创建环境接口。

env = rl万博1manbetxSimulinkEnv(mdl,agentblk,observationInfo,actionInfo);

该界面有一个离散的动作空间,代理可以应用31个可能的转向角度中的一个,从-15度到15度。观测是六维矢量,包含横向偏差,相对偏航角,以及它们对时间的导数和积分。

若要定义横向偏差和相对偏航角的初始条件,请使用匿名函数句柄指定环境重置函数。这个复位函数随机初始值的横向偏差和相对偏航角。

env。ResetFcn = @ localResetFcn(in);

固定随机生成器种子的再现性。

rng (0)

创建DQN代理

DQN智能体在给定观察和行动的情况下,使用价值函数评论家表示来近似长期奖励。

DQN代理可以使用多输出q值临界逼近器,这通常更有效。多输出逼近器将观测值作为输入,状态动作值作为输出。每个输出元素表示从观察输入所指示的状态中采取相应离散行动所期望的累计长期奖励。

为了创建评论家,首先创建一个深度神经网络,它有一个输入(六维观察状态)和一个包含31个元素的输出向量(从-15到15度的均匀间隔转向角)。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示

nI = observationInfo.Dimension(1);输入数% (6)nL = 24;神经元数目%nO =数字(actionInfo.Elements);输出数% (31)dnn = [featureInputLayer(nI,“归一化”“没有”“名字”“状态”) fullyConnectedLayer(问,“名字”“fc1”) reluLayer (“名字”“relu1”) fullyConnectedLayer(问,“名字”“取得”) reluLayer (“名字”“relu2”) fullyConnectedLayer(不,“名字”“一个fc3”文件));

查看网络配置。

图绘制(layerGraph(款)

图中包含一个轴对象。axis对象包含一个graphplot类型的对象。

使用指定评论家表示的选项rlRepresentationOptions

criticOptions = rlRepresentationOptions(“LearnRate”1的军医,“GradientThreshold”,1,“L2RegularizationFactor”1的军医);

使用指定的深度神经网络和选项创建评论家表示。您还必须为评论家指定从环境接口获得的操作和观察信息。有关更多信息,请参见rlQValueRepresentation

评论= rlQValueRepresentation(dnn,observationInfo,actionInfo,...“观察”,{“状态”}, criticOptions);

要创建DQN代理,首先使用指定DQN代理选项rlDQNAgentOptions

agentOptions = rlDQNAgentOptions(...“SampleTime”Ts,...“UseDoubleDQN”,真的,...“TargetSmoothFactor”1 e - 3,...“DiscountFactor”, 0.99,...“ExperienceBufferLength”1 e6,...“MiniBatchSize”, 64);

然后,使用指定的批评表示和代理选项创建DQN代理。有关更多信息,请参见rlDQNAgent

agent = rlDQNAgent(批评家,agentOptions);

火车代理

要培训代理,首先指定培训选项。对于本例,使用以下选项:

  • 每个训练集最多运行5000集,每个训练集最长持续时间装天花板(T / T)时间的步骤。

  • 在“事件管理器”对话框中显示培训进度情节选项训练进步)并禁用命令行显示(设置详细的选项).

  • 当情节奖励达到时停止训练1

  • 为累积奖励大于的每一集保存代理的副本-2.5

有关更多信息,请参见rlTrainingOptions

Maxepisodes = 5000;maxsteps = ceil(T/Ts);trainingOpts = rlTrainingOptions(...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”maxsteps,...“详细”假的,...“阴谋”“训练进步”...“StopTrainingCriteria”“EpisodeReward”...“StopTrainingValue”, 1...“SaveAgentCriteria”“EpisodeReward”...“SaveAgentValue”, -2.5);

培训代理使用火车函数。训练是一个计算密集的过程,需要几个小时才能完成。为了在运行此示例时节省时间,请通过设置加载预训练的代理doTraining.要亲自训练特工,请设置doTraining真正的

doTraining = false;如果doTraining培训代理。trainingStats = train(agent,env,trainingOpts);其他的为示例加载预训练的代理。负载(“万博1manbetxSimulinkLKADQNMulti.mat”“代理”结束

模拟DQN Agent

为了验证经过训练的代理的性能,取消下面两行注释,并在环境中模拟代理。有关代理模拟的详细信息,请参见rlSimulationOptions而且sim卡

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

为了在确定初始条件下演示训练后的智能体,在Simulink中对模型进行仿真。万博1manbetx

E1_initial = -0.4;E2_initial = 0.2;sim (mdl)

如图所示,横向误差(顶部图)和相对偏航角(中间图)都被驱动到接近零。飞行器从偏离中心线(-0.4米)开始并且具有非零偏航角误差(0.2 rad)。车道保持辅助使自我车在大约2.5秒后沿着中心线行驶。转向角度(下图)显示控制器在大约2秒后达到稳态。

关闭Simulink万博1manbetx模型。

如果~ doTraining% bdclose (mdl)结束

重置功能

函数in = localResetFcn(in)%重置in = setVariable(in,“e1_initial”, 0.5 *(1 + 2 *兰德));%横向偏差的随机值in = setVariable(in,“e2_initial”, 0.1 *(1 + 2 *兰德));%相对偏航角的随机值结束

另请参阅

相关的话题