训练DQN代理商进行车道保存协助
此示例显示了如何在Simulink®中训练深层学习网络(DQN)代理(DQN)代理(LKA)。金宝app有关DQN代理的更多信息,请参阅深Q网络代理。
金宝app自我汽车的模型模型
此示例的增强学习环境是一个简单的自行车模型,用于自我车辆动力学。训练目标是通过调整前转向角度来保持自我车辆沿着车道的中心线行驶。此示例使用与中相同的车辆模型使用模型预测控制的车道保持辅助系统(模型预测控制工具箱)。EGO CAR动力学由以下参数指定。
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定义( )。横向偏差的初始值为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度。
来自环境的观察结果是横向偏差 ,相对偏航角 ,他们的衍生物 和 ,以及他们的积分 和 。
横向偏差时终止模拟
奖励 ,在每个时间步骤中提供 , 是
在哪里 是前一个时间步骤的控件输入 。
创建环境接口
为自我车辆创建增强学习环境界面。为此,首先创建观察和行动规范。
obsvervationInfo = rlnumericspec([6 1],,“下限”,-inf*一个(6,1),“上限”,inf*一个(6,1));observationInfo.name =“观察”;观察Info.Description =“有关横向偏差和相对偏航角的信息”;ActionInfo = rlfinitesetsetspec(( - 15:15)*pi/180);ActionInfo.name ='操舵';
然后,创建环境接口。
env = rl金宝appSimulinkenv(MDL,AgentBlk,ObsevervingInfo,ActionInfo);
该界面具有一个离散的动作空间,代理可以将31个可能的转向角度之一应用于–15度到15度。该观察结果是包含横向偏差,相对偏航角及其衍生物和积分相对于时间的六维矢量。
要定义横向偏差和相对偏航角的初始条件,请使用匿名函数句柄指定环境重置函数。该重置功能随机将横向偏差和相对偏航角的初始值随机。
env.Resetfcn = @(in)localResetfcn(in);
修复随机发电机种子以获得可重复性。
RNG(0)
创建DQN代理
DQN代理使用价值函数评论家表示,给定观察和行动,近似长期的奖励。
DQN代理可以使用多输出Q值评论家近似器,通常更有效。多输出近似器的观察值是输入和状态行动值作为输出。每个输出元件代表了从观察输入指示的状态采取相应的离散作用的预期累积长期奖励。
为了创建评论家,首先创建一个具有一个输入(六维观察到的状态)和一个具有31个元素(均匀间隔的转向角度从-15到15度)的输出向量的深神经网络。有关创建深神网络值函数表示的更多信息,请参见创建策略和价值功能。
ni =观察info.dimension(1);投入的%(6)NL = 24;%神经元数no = numel(actionInfo.elements);输出数量的%(31)dnn = [featurenputlayer(ni,'正常化',,,,'没有任何',,,,'姓名',,,,'状态')完整连接的layerer(nl,'姓名',,,,'fc1')relulayer('姓名',,,,'relu1')完整连接的layerer(nl,'姓名',,,,'fc2')relulayer('姓名',,,,'relu2')完整连接的layerer(否,'姓名',,,,'fc3');dnn = dlnetwork(dnn);
查看网络配置。
图图(layergraph(dnn))
使用评论家优化器指定选项rloptimizerOptions
。
批评= rloptimizeroptions(“学习率”,1E-4,“梯度阈值”,1,“ L2ReminizationFactor”,1E-4);
使用指定的深神经网络和选项创建评论家表示。您还必须为评论家指定动作和观察信息,该信息是从环境接口中获得的。有关更多信息,请参阅rlvectorqvaluefunction
。
评论家= rlvectorqvalueFunction(DNN,观察Interverationinfo,ActionInfo);
要创建DQN代理,请首先使用rldqnagentoptions
。
agentOptions = rldqnagentoptions(...'采样时间',TS,...“二手rubedqn”,真的,...``批评'',批评,...“ ExperienceBufferLength”,1E6,...“ MINIBATCHSIZE”,64);
然后,使用指定的评论家表示和代理选项创建DQN代理。有关更多信息,请参阅rldqnagent
。
agent = rldqnagent(评论家,代理);
火车代理
要培训代理商,请首先指定培训选项。对于此示例,请使用以下选项:
每次训练剧集最多只有5000集,每集最多持续
CEIL(T/TS)
时间步骤。在“情节经理”对话框中显示培训进度(设置
情节
选项训练过程
)并禁用命令行显示(设置冗长
选项错误的
)。播放奖励到达时停止训练
–1
。保存每个情节的代理商副本,累积奖励大于
–2.5
。
有关更多信息,请参阅rltrainingoptions
。
maxepisodes = 5000;maxsteps = ceil(t/ts);trienderOpts = rltrainingoptions(...“ maxepisodes”,maxepisodes,...'MaxStepsperperepisode',maxsteps,...“冗长”,错误的,...“绘图”,,,,“训练过程”,,,,...“停止训练有素”,,,,“ epipodereward',,,,...“停止训练值”,-1,...“ saveagentCriteria',,,,“ epipodereward',,,,...“ saveagentvalue”,-2.5);
使用火车
功能。培训是一个计算密集型过程,需要几个小时才能完成。为了节省此示例时的时间,请通过设置加载预处理的代理dotraining
至错误的
。自己训练代理商,设置dotraining
至真的
。
dotraining = false;如果dotraining%训练代理。triendstats = train(代理,env,trieberopts);别的%为示例加载预验证的代理。加载('金宝appsimulinklkadqnmulti.mat',,,,'代理人')结尾
模拟DQN代理
为了验证训练有素的代理的性能,请输入以下两条线并模拟环境中的代理。有关代理模拟的更多信息,请参阅rlsimulationptions
和SIM
。
%simOptions = rlSimulationOptions('MaxSteps',MaxSteps);%经验= SIM(Env,代理,SimOptions);
为了在确定性初始条件下演示受过训练的代理,请在Simulink中模拟该模型。金宝app
e1_initial = -0.4;e2_initial = 0.2;SIM(MDL)
如图所示,横向误差(顶部图)和相对偏航角(中间图)均接近零。车辆从中心线(–0.4 m)开始,并具有非零偏航角误差(0.2 rad)。车道保持辅助使自我汽车在大约2.5秒后沿着中心线行驶。转向角(底部图)表明,控制器在大约2秒后达到稳态。
关闭Simulink金宝app模型。
如果〜dotraining%bdclose(MDL)结尾
重置功能
功能in = localResetfcn(in)% 重置in = setVariable(in,'e1_initial',0.5*(-1+2*rand));横向偏差的随机值%in = setVariable(in,'e2_initial',0.1*(-1+2*rand));相对偏航角的随机值%结尾