此示例显示了如何在Simulink®中为车道保持辅助(LKA)培训深度Q学习网络(DQN)代理。有关DQN代理的更多信息,请参阅万博1manbetx深Q-Network代理.
本例的强化学习环境是一个简单的自我车辆动力学自行车模型。训练的目标是通过调整前转向角度来使自我车辆沿着车道的中心线行驶。这个例子使用了与在基于模型预测控制的车道保持辅助系统(模型预测控制工具箱). ego汽车动力学由以下参数指定。
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系统的输出是ego汽车的前转向角。为了模拟ego汽车的物理限制,将转向角限制在范围内[-0.5,0.5]
rad。
u_min=-0.5;u_max=0.5;
道路的曲率定义为常数0.001 ( ).横向偏差的初始值为0.2 m,相对偏航角的初始值为-0.1 rad。
ρ= 0.001;e1_initial = 0.2;e2_initial = -0.1;
打开模型。
mdl =“rlLKAMdl”;open_system (mdl);agentblk = [mdl' / RL代理'];
对于这个模型:
从agent到环境的转向角动作信号为–15度到15度。
从环境中观察到的是横向偏差 ,相对偏航角 ,它们的衍生物 和 ,以及它们的积分 和 .
当出现横向偏差时,模拟终止
奖赏 ,提供在每个时间步骤 是
在哪里 控制输入是否来自前一个时间步骤 .
为ego车辆创建强化学习环境界面。为此,首先创建观察和行动规范。
observationInfo = rlNumericSpec([6 1],“LowerLimit”,负无穷* (6,1),“UpperLimit”,正* (6,1));observationInfo。Name =“观察”;observationInfo。描述=“关于横向偏差和相对偏航角的信息”;actionInfo=rlFiniteSetSpec(-15:15)*pi/180);actionInfo.Name=“转向”;
然后,创建环境接口。
env=rlSi万博1manbetxmulinkEnv(mdl、agentblk、observationInfo、actionInfo);
该界面有一个离散的动作空间,在该空间中,代理可以应用-15度到15度之间的31个可能转向角中的一个。观测是包含横向偏差、相对偏航角及其对时间的导数和积分的六维向量。
若要定义横向偏差和相对偏航角的初始条件,请使用匿名函数句柄指定环境复位函数。这个复位函数随机化横向偏差和相对偏航角的初始值。
env.ResetFcn=@(in)localResetFcn(in);
修复随机生成器种子以获得再现性。
rng (0)
DQN代理使用价值函数批判表示来近似给定的观察和行动的长期回报。
DQN代理可以使用多输出q值批判逼近器,这通常更有效。多输出近似器将观察值作为输入,状态行为值作为输出。每个输出元素表示从观察输入所指示的状态中采取相应离散行动的预期累积长期回报。
要创建批评家,首先创建一个具有一个输入(六维观察状态)和一个具有31个元素(从-15到15度均匀间隔的转向角度)的输出向量的深度神经网络。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能表示.
倪= observationInfo.Dimension (1);%输入数量(6)nL=24;神经元百分数没有=元素个数(actionInfo.Elements);%输出数量(31)dnn = [featureputlayer (nI,“正常化”,“没有”,“名字”,“国家”)完全连接层(nL,“名字”,“fc1”) reluLayer (“名字”,“relu1”)完全连接层(nL,“名字”,“取得”) reluLayer (“名字”,“relu2”)完全连接层(编号:,“名字”,“一个fc3”文件)];
查看网络配置。
图绘制(layerGraph(款)
为使用的批评家表示指定选项rlRepresentationOptions
.
临界点=rlRepresentationOptions(“LearnRate”1的军医,“梯度阈值”1.“L2调节因子”1的军医);
使用指定的深度神经网络和选项创建批评家表示。还必须为批评家指定操作和观察信息,这些信息是从环境界面获得的。有关详细信息,请参阅rlQValueRepresentation
.
评论家= rlQValueRepresentation(款、observationInfo actionInfo,...“观察”,{“国家”},批评);
要创建DQN代理,首先使用rlDQNAgentOptions
.
agentOptions=rldqnagnOptions(...“采样时间”,Ts,...“UseDoubleDQN”,真的,...“目标平滑因子”1 e - 3,...“折扣演员”, 0.99,...“ExperienceBufferLength”1 e6,...“MiniBatchSize”, 64);
然后,使用指定的critic表示和代理选项创建DQN代理。有关更多信息,请参阅rlDQNAgent
.
代理= rlDQNAgent(评论家,agentOptions);
要培训代理,请首先指定培训选项。对于本例,请使用以下选项:
每集训练最多5000集,每集持续时间最多5000集ceil(T/Ts)
时间的步骤。
在“插曲管理器”对话框中显示培训进度(设置阴谋
选择培训进度
)并禁用命令行显示(设置冗长的
选择错误的
).
当情节奖励达到时停止训练1
.
为累积奖励大于的每集保存一份代理副本-2.5
.
有关详细信息,请参阅RL培训选项
.
最大事件数=5000;maxsteps=ceil(T/Ts);培训选项=RL培训选项(...“最大集”maxepisodes,...“MaxStepsPerEpisode”,maxsteps,...“冗长”错误的...“阴谋”,“训练进步”,...“StopTrainingCriteria”,“EpisodeReward”,...“停止训练值”,-1,...“SaveAgentCriteria”,“EpisodeReward”,...“SaveAgentValue”, -2.5);
使用火车
作用培训是一个计算密集的过程,需要几个小时才能完成。要在运行此示例时节省时间,请通过设置doTraining
来错误的
.要亲自培训特工,请设置doTraining
来符合事实的
.
doTraining=false;如果doTraining培训代理商。trainingStats =火车(代理,env, trainingOpts);其他的%加载示例的预训练代理。负载(“万博1manbetxSimulinkLKADQNMulti.mat”,“代理”)结束
要验证经过培训的代理的性能,请取消注释以下两行并在环境中模拟代理。有关代理模拟的更多信息,请参阅模拟选项
和sim卡
.
% simOptions = rlSimulationOptions('MaxSteps', MaxSteps);% experience = sim(env,agent,simOptions);
为了演示在确定性初始条件下训练的agent,在Simulink中对模型进行仿真。万博1manbetx
e1_initial = -0.4;e2_initial = 0.2;sim (mdl)
如图所示,横向误差(顶部图)和相对偏航角(中间图)均接近于零。车辆从偏离中心线(–0.4 m)且横摆角误差非零(0.2 rad)的位置起动。车道保持辅助系统使ego车辆在大约2.5秒后沿中心线行驶。转向角(下图)显示控制器在大约2秒后达到稳定状态。
关闭Simulink万博1manbetx模型。
如果~z~多特林%bdclose(mdl)结束
作用= localResetFcn(中)%重置= setVariable (,“e1_initial”, 0.5 *(1 + 2 *兰德));%横向偏差的随机值= setVariable (,“e2_initial”, 0.1 *(1 + 2 *兰德));%相对偏航角的随机值结束