这个例子展示了如何使用并行训练在Simulink®中训练一个深度q学习网络(DQN)代理保持车道辅助(LKA)。万博1manbetx有关如何在不使用并行训练的情况下训练代理的示例,请参见对DQN代理进行车道保持协助培训.
有关DQN代理的更多信息,请参见深Q-Network代理.在MATLAB®中训练DQN代理的示例,请参见培训DQN员工平衡车杆系统.
在DQN代理中,每个工作人员从代理和环境的副本生成新的体验。毕竟N
步骤,工作人员将经验发送给主机代理。主机代理更新其参数如下。
对于异步培训,主机代理从收到的经验中学习,而无需等待所有工人发送经验,并将更新的参数发送回提供经验的工作人员。然后,工人继续使用更新的参数从其环境生成经验。
对于同步培训,主机代理等待接收所有工人的经验,并从这些经验中学习。然后,主机同时向所有工人发送更新的参数。然后,所有工人继续使用更新的参数生成经验。
此示例的增强学习环境是自动车辆动态的简单自行车模型。培训目标是通过调整前转向角来保持沿着车道的中心线行驶的自我车辆。此示例使用与此相同的车型对DQN代理进行车道保持协助培训.
m = 1575;总载体质量(千克)工业区= 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 (
).横向偏差的初始值为0.2
m和相对偏航角的初始值是-0.1
rad。
ρ= 0.001;e1_initial = 0.2;e2_initial = -0.1;
打开模型。
mdl ='rllkamdl';Open_system (mdl) agentblk = [mdl . Open_system (mdl)'/ rl代理'];
对于这个模型:
来自代理到环境的转向角动作信号为-15度至15度。
来自环境的观察是横向偏差 ,相对偏航角 ,他们的衍生品 和 ,他们的积分 和 .
横向偏差时终止模拟
奖励 ,提供在每个时间步骤 ,是
在哪里 是前一步的控制输入 .
为自我车辆创建一个强化学习环境界面。
定义观察信息。
observationInfo = rlNumericSpec([6 1],“LowerLimit”,负无穷* (6,1),'上限',INF * of(6,1));观察info.name =“观察”;观察invfo.description =.“横向偏差和相对偏航角信息”;
定义动作信息。
actionInfo = rlFiniteSetSpec((15:15) *π/ 180);actionInfo。Name =“转向”;
创建环境界面。
ent = rl万博1manbetxsimulinkenv(mdl,agentblk,观察invo,afticeinfo);
该界面具有离散动作空间,其中代理可以将31个可能的转向角中的一个从-15度施加到15度。观察是含有横向偏差,相对偏航角的六维载体,以及相对于时间的衍生物和积分。
若要定义横向偏差和相对偏航角的初始条件,请使用匿名函数句柄指定环境复位函数。localResetFcn
,在该示例结束时定义,随机化初始横向偏差和相对偏航角。
env.resetfcn = @(in)localresetfcn(in);
修复随机发生器种子以进行再现性。
rng (0)
DQN代理可以使用多输出q值批判逼近器,这通常更有效。多输出近似器将观察值作为输入,状态行为值作为输出。每个输出元素表示从观察输入所指示的状态中采取相应离散行动的预期累积长期回报。
为了创建评论家,首先创建一个具有一个输入(六维观察状态)的深神经网络(六维观察状态)和31个元件的一个输出矢量(从-15到15度均匀间隔的转向角)。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和价值功能表示.
ni =观察invimo.dimension(1);%输入数(6)nl = 120;神经元百分数没有=元素个数(actionInfo.Elements);%输出数(31)dnn = [featureinputlayer(ni,“归一化”那'没有'那'名字'那“状态”) fullyConnectedLayer(问,'名字'那“fc1”)剥离('名字'那'relu1') fullyConnectedLayer(问,'名字'那“取得”)剥离('名字'那“relu2”)全康连接层(不,'名字'那“一个fc3”文件)];
查看网络配置。
图绘图(层图(DNN))
指定使用批评者的选项rlrepresentationOptions.
.
criticOptions = rlRepresentationOptions ('学习'1的军医,'gradientthreshold',1,'l2regularizationfactor',1E-4);
使用指定的深度神经网络和选项创建批评家表示。您还必须为评论家指定操作和观察信息,这些信息是从环境接口获得的。有关更多信息,请参见rlQValueRepresentation
.
评论家= rlqvaluerepresentation(dnn,devalidationinfo,afticeinfo,“观察”,{“状态”},批评);
要创建DQN代理,首先使用rlDQNAgentOptions
.
Agentopts = RLDQNAGENTOPTIONS(...“SampleTime”Ts,...'unmorblebledqn',真的,...“TargetSmoothFactor”1 e - 3,...'贴花因子',0.99,...'经验BufferLength',1e6,...“MiniBatchSize”,256);Adjeropts.epsilongredyexpliation.epsilondecay = 1e-4;
然后使用指定的评论家表示和代理选项创建DQN代理。有关更多信息,请参见rldqnagent.
.
代理= rldqnagent(批评者,代理商);
要培训代理,首先指定培训选项。对于此示例,请使用以下选项。
最多运行每个培训10000
每集最多持续一集CEIL(T / TS)
时间步骤。
仅显示Episode Manager对话框中的培训进度(设置情节
和verb
选择相应的选项)。
剧集奖励到达时停止培训-1
.
为每个累计奖励大于100,保存代理的副本。
有关更多信息,请参见rlTrainingOptions
.
maxepisodes = 10000;maxsteps = ceil(t / ts);训练= rltrainingOptions(...'maxepisodes'maxepisodes,...'maxstepperepisode'maxsteps,...“详细”假的,...'plots'那“训练进步”那...'stoptrinaincriteria'那'EpisodeReward'那...“StopTrainingValue”,-1,...“SaveAgentCriteria”那'EpisodeReward'那...'SaveagentValue',100);
要并行培训代理,请指定以下培训选项。
设置使用指α.
选择真正的
.
通过设置异步并行训练代理parallelizationOptions.mode.
选择“异步”
.
每30个步骤后,每个工人向主机发送经验。
DQN代理要求工作人员发送体验”
到主人。
训练.Useplate = true;训练.ParlellelizationOptions.Mode =.“异步”;训练.ParlellizationOptions.datatosendfromworkers =“经验”;训练.ParlellelizationOptions.stepsuntataissent = 32;
有关更多信息,请参见rlTrainingOptions
.
使用该代理商培训训练
功能。培训代理是一个计算密集的进程,需要几分钟才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理用圆形
来假
.自己训练代理人,设置用圆形
来真正的
.由于并行训练的随机性,您可以从下面的图中看到不同的训练结果。这张图显示了四名工人的培训结果。
doTraining = false;如果用圆形培训代理商。Trainstats =火车(代理,env,训练);别的%为示例加载预训练的代理。负载('万博1manbetxsimulinklkadqnparallel.mat'那“代理”)结束
要验证培训的代理的性能,请取消注释以下两行并在环境中模拟代理。有关代理模拟的更多信息,请参阅RlsimulationOptions.
和SIM
.
%simoptions = rlsimulationoptions('maxsteps',maxsteps);%体验= SIM(ENV,Agent,SimOptions);
要使用确定性初始条件展示培训的代理,请在Simulink中模拟模型。万博1manbetx
e1_initial = -0.4;e2_initial = 0.2;sim (mdl)
如下所示,横向误差(中图)和相对横摆角(底部曲线)被驱动为零。车辆从偏离中心线(-0.4米)和非零偏航角误差(0.2 rad)开始。LKA使自助式汽车能够在2.5秒后沿着中心线行进。转向角(顶部图)表明控制器在2秒后达到稳定状态。
函数= localResetFcn(中)%重置= setVariable (,'e1_initial', 0.5 *(1 + 2 *兰德));%横向偏差的随机值= setVariable (,'e2_initial',0.1 *( - 1 + 2 * rand));相对偏航角度的%随机值结束