主要内容

培训DQN Agent for Lane保持辅助

此示例显示如何在Simulink®中培训用于车道保持辅助(LKA)的深度Q学习网络(DQN)代理。金宝app有关DQN代理商的更多信息,请参阅深Q-Network代理

金宝app用于自助式汽车的Simulink模型

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

m = 1575;总载体质量(千克)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。

ρ= 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 =.“转向”;

然后,创建环境接口。

ent = rl金宝appsimulinkenv(mdl,agentblk,观察invo,afticeinfo);

该界面具有离散动作空间,其中代理可以将31个可能的转向角中的一个从-15度施加到15度。观察是含有横向偏差,相对偏航角的六维载体,以及相对于时间的衍生物和积分。

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

%的角度。env.resetfcn = @(in)localresetfcn(in);

修复随机发生器种子以进行再现性。

rng (0)

创建DQN代理

DQN代理使用价值函数评论家表示来近似给定的观察和行动的长期回报。

DQN代理可以使用多输出q值临界逼近器,通常效率更高。多输出近似器以观察值作为输入,以状态-动作值作为输出。每个输出元素表示从观察输入所指示的状态中采取相应的离散行动所期望的累积长期回报。

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

倪= observationInfo.Dimension (1);%输入数(6)nl = 24;神经元数%没有=元素个数(actionInfo.Elements);输出数量% (31)dnn = [featureInputLayer(nI,'正常化','没有任何',“名字”,'状态')全连接列(NL,“名字”,“fc1”) reluLayer (“名字”,'relu1')全连接列(NL,“名字”,“取得”) reluLayer (“名字”,“relu2”)全康连接层(不,“名字”,“一个fc3”文件)];

查看网络配置。

图绘制(layerGraph(款)

使用rlRepresentationOptions

QuandOptions = rlrepresentationOptions(“LearnRate”1的军医,'gradientthreshold',1,'l2regularizationfactor'1的军医);

使用指定的深度神经网络和选项创建批读表示。您还必须指定从环境界面获取的批评的操作和观察信息。有关更多信息,请参阅rlQValueRepresentation

评论家= rlQValueRepresentation(款、observationInfo actionInfo,“观察”,{'状态'},批评);

要创建DQN代理,请首先指定DQN代理选项使用rldqnagentoptions.

代理选项= rldqnagentoptions('采样时间',ts,“UseDoubleDQN”,真的,'targetsmoothfactor'1 e - 3,'贴花因子', 0.99,“ExperienceBufferLength”1 e6,“MiniBatchSize”, 64);

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

代理= rlDQNAgent(评论家,agentOptions);

火车代理

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

  • 每次运行每个培训集,最多有5000个剧集,每一集最多持续CEIL(T / TS)时间的步骤。

  • 在“章节管理器”对话框中显示培训进度(设置绘图选择培训进展)并禁用命令行显示(设置verb选择错误的)。

  • 剧集奖励到达时停止培训1

  • 为每个集中的累计奖励的副本保存代理的副本大于-2.5

有关更多信息,请参阅rltringOptions.

maxepisodes = 5000;maxsteps = ceil(t / ts);trainingopts = rltringOptions('maxepisodes'maxepisodes,'maxstepperepisode',maxsteps,'verbose',错误的,“阴谋”,“训练进步”,“StopTrainingCriteria”,“EpisodeReward”,'stoptriningvalue',-1,'SaveAgentCriteria',“EpisodeReward”,“SaveAgentValue”, -2.5);

使用该代理商培训火车功能。培训是一种计算密集型进程,需要几个小时才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理doTraining错误的。训练代理人,套装doTraining真的

dotraining = false;如果doTraining%训练特工。trainingStats =火车(代理,env, trainingOpts);别的%加载预磨料的代理。负载('金宝appsimulinklkadqnmulti.mat',“代理”)结束

模拟DQN Agent.

要验证培训的代理的性能,请取消注释以下两行并在环境中模拟代理。有关代理模拟的更多信息,请参阅RlsimulationOptions.sim卡

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

为了在确定的初始条件下演示训练的agent,在Simulink中对模型进行仿真。金宝app

e1_initial = -0.4;e2_initial = 0.2;sim (mdl)

当绘图显示时,横向误差(顶部图)和相对横摆角(中图)被驱动接近零。车辆从中心线(-0.4米)的开始,并具有非零偏航角误差(0.2 rad)。车道保持辅助使自助式汽车在约2.5秒后沿着中心线行驶。转向角(底部图)表明控制器在大约2秒后达到稳定状态。

关闭Simulink金宝app模型。

如果〜偶然%bdclose(mdl)结束

重置功能

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

另请参阅

相关话题