此示例显示如何在Simulink®中培训用于车道保持辅助(LKA)的深度Q学习网络(DQN)代理。万博1manbetx有关DQN代理商的更多信息,请参阅深度Q-Network代理商。
此示例的增强学习环境是自动车辆动态的简单自行车模型。培训目标是通过调整前转向角来保持沿着车道的中心线行驶的自我车辆。此示例使用相同的车辆模型使用模型预测控制的车道保持辅助系统(模型预测控制工具箱)。自我汽车动力学由以下参数指定。
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( )。横向偏差的初始值为0.2μm,相对横摆角的初始值为-0.1rad。
rho = 0.001;e1_initial = 0.2;e2_initial = -0.1;
打开模型。
mdl ='rllkamdl';Open_System(MDL);AppletBlk = [MDL'/ rl代理'];
对于此模型:
来自代理到环境的转向角动作信号为-15度至15度。
来自环境的观察是横向偏差 ,相对的横摆角 ,他们的衍生品 和 ,他们的积分 和 。
横向偏差时终止模拟
奖励 ,每次都提供 , 是
在哪里 是前一步的控制输入 。
为自我车辆创建强化学习环境界面。为此,首先创建观察和行动规范。
观察invfo = rlnumericspec([6 1],'lowerimit',-inf *那些(6,1),'上限',INF * of(6,1));观察info.name ='观察';观察invfo.description =.“关于横向偏差和相对偏航角的信息”;ActionInfo = rlfinitesetspec(( - 15:15)* pi / 180);ActionInfo.name =.'操舵';
然后,创建环境界面。
ent = rl万博1manbetxsimulinkenv(mdl,agentblk,观察invo,afticeinfo);
该界面具有离散动作空间,其中代理可以将31个可能的转向角中的一个从-15度施加到15度。观察是含有横向偏差,相对偏航角的六维载体,以及相对于时间的衍生物和积分。
要定义横向偏差和相对偏航角的初始条件,请使用匿名功能手柄指定环境复位功能。此复位功能随机化横向偏差和相对偏航的初始值
% 角度。env.resetfcn = @(in)localresetfcn(in);
修复随机发生器种子以进行再现性。
RNG(0)
DQN代理使用价值函数批读表示来估计长期奖励,给定观察和行动。
DQN代理可以使用多输出Q值评分近似器,这通常更有效。多输出近似器具有作为输出的输入和状态动作值的观察结果。每个输出元件代表从观察输入所示的状态采取相应的离散动作的预期累积长期奖励。
为了创建评论家,首先创建一个具有一个输入(六维观察状态)的深神经网络(六维观察状态)和31个元件的一个输出矢量(从-15到15度均匀间隔的转向角)。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和值函数表示。
ni =观察invimo.dimension(1);%输入数(6)nl = 24;%神经元数量no = numel(afticeinfo.elements);%输出数(31)dnn = [featureinputlayer(ni,'正常化'那'没有任何'那'名称'那'状态')全连接列(NL,'名称'那'fc1')剥离('名称'那'relu1')全连接列(NL,'名称'那'fc2')剥离('名称'那'relu2')全康连接层(不,'名称'那'fc3')];
查看网络配置。
图绘图(层图(DNN))
指定使用批评者的选项rlrepresentationOptions.
。
QuandOptions = rlrepresentationOptions('学习',1e-4,'gradientthreshold',1,'l2regularizationfactor',1E-4);
使用指定的深度神经网络和选项创建批读表示。您还必须指定从环境界面获取的批评的操作和观察信息。有关更多信息,请参阅rlqvalueerepresentation
。
评论家= rlqvaluerepresentation(dnn,devalidationinfo,afticeinfo,......'观察',{'状态'},批评);
要创建DQN代理,请首先指定DQN代理选项使用rldqnagentoptions.
。
代理选项= rldqnagentoptions(......'采样时间',ts,......'unmorblebledqn',真的,......'targetsmoothfactor',1e-3,......'贴花因子',0.99,......'经验BufferLength',1e6,......'minibatchsize',64);
然后,使用指定的批评批准表示和代理选项创建DQN代理。有关更多信息,请参阅rldqnagent.
。
代理= rldqnagent(批评者,代理选项);
要培训代理,首先指定培训选项。对于此示例,请使用以下选项:
每次运行每个培训集,最多有5000个剧集,每一集最多持续CEIL(T / TS)
时间步骤。
在Episode Manager对话框中显示培训进度(设置绘图
选择培训进展
)并禁用命令行显示(设置verb
选择错误的
)。
剧集奖励到达时停止培训-1
。
为每个集中的累计奖励的副本保存代理的副本大于-2.5
。
有关更多信息,请参阅rltringOptions.
。
maxepisodes = 5000;maxsteps = ceil(t / ts);trainingopts = rltringoptions(......'maxepisodes',maxepisodes,......'maxstepperepisode',maxsteps,......'verbose',错误的,......'plots'那'培训 - 进步'那......'stoptrinaincriteria'那'EpisodeReward'那......'stoptriningvalue',-1,......'SaveAgentCriteria'那'EpisodeReward'那......'SaveagentValue',-2.5);
使用该代理商培训火车
功能。培训是一种计算密集型进程,需要几个小时才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理用圆形
至错误的
。训练代理人,套装用圆形
至真的
。
dotraining = false;如果用圆形%训练代理人。Trainstats =火车(代理,ENV,Trainpepopts);别的%加载预磨料的代理。加载('万博1manbetxsimulinklkadqnmulti.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)。车道保持辅助使自助式汽车在约2.5秒后沿着中心线行驶。转向角(底部图)表明控制器在大约2秒后达到稳定状态。
关闭Simulink万博1manbetx模型。
如果〜偶然%bdclose(mdl)结尾
功能在= localresetfcn(in)% 重启在= setVariable(在,'e1_initial',0.5 *( - 1 + 2 * rand));横向偏差的%随机值在= setVariable(在,'e2_initial',0.1 *( - 1 + 2 * rand));相对偏航角度的%随机值结尾