火车DQN车道保持辅助剂
这个例子展示了如何训练深q学习网络(DQN)代理车道保持辅助(党的)模型®。金宝appDQN代理的更多信息,请参阅深Q-Network (DQN)代理。
金宝app为自我汽车仿真软件模型
强化学习环境对于这个示例是一个简单的自行车自我车辆动力学模型。培训目标是保持自我沿着中心线调整车道的车辆行驶前转向角。下面的例子使用了相同的车辆模型车道保持辅助系统使用模型预测控制(模型预测控制工具箱)。以下指定的自我汽车动力学参数。
m = 1575;%车辆总质量(千克)工业区= 2875;%偏航惯性矩(mNs ^ 2)如果= 1.2;%的纵向距离重心前面轮胎(m)lr = 1.6;%纵向重心距离后方轮胎(m)Cf = 19000;%转弯前轮胎的刚度(N / rad)Cr = 33000;%转弯后轮胎的刚度(N / rad)Vx = 15;%的纵向速度(米/秒)
定义样本的时间Ts
和仿真时间T
在几秒钟内。
t = 0.1;T = 15;
党的系统的输出是自我的前转向角的车。模拟的物理限制自我,约束转向角的范围[-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代理'];
对于这个模型:
转向角动作信号从代理环境从-15度到15度。
环境的观察是横向偏差 ,相对偏航角 ,他们的衍生品 和 ,他们的积分 和 。
模拟横向偏差时终止
奖励 ,只要在每一个时间步 ,是
在哪里 之前的时间步的控制输入吗 。
创建环境接口
创建一个自我强化的学习环境界面。要做到这一点,首先创建观察和操作规范。
observationInfo = rlNumericSpec (1 [6],“LowerLimit”,负无穷* (6,1),“UpperLimit”,正* (6,1));observationInfo。Name =“观察”;observationInfo。描述=“横向偏差和相对偏航角的信息”;actionInfo = rlFiniteSetSpec((15:15) *π/ 180);actionInfo。Name =“转向”;
然后,创建环境的接口。
env = rl金宝appSimulinkEnv (mdl agentblk、observationInfo actionInfo);
代理的接口有一个离散的行动空间可以应用一个31可能转向角从-15度到15度。观察是六维向量包含横向偏差、相对偏航角,以及与对时间的微分和积分。
定义初始条件对横向偏差和相对偏航角,指定一个环境重置函数使用一个匿名函数处理。这个重置函数随机的初始值横向偏差和相对偏航角。
env。ResetFcn = @(在)localResetFcn(的);
解决随机发生器再现性的种子。
rng (0)
创建DQN代理
DQN代理接近长期奖励,观察和操作,使用价值函数评论家表示。
DQN代理可以使用多输出核反应能量评论家接近者,通常更有效率。一个多输出接近者已经观察输入和政府行动值作为输出。每个输出元素代表预期的长期累积奖励从国家采取相应的离散行动观察输入所示。
创建评论家,首先创建一个深层神经网络与一个输入(六维观测状态)和一个输出向量与31个元素(均匀间隔的转向角从-15年到15度)。更多信息创建一个深层神经网络价值函数表示,看到的创建政策和价值功能。
倪= observationInfo.Dimension (1);%的数量输入(6)问= 24;%的神经元数量没有=元素个数(actionInfo.Elements);%的输出(31)款= [featureInputLayer(镍、“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer(问,“名字”,“fc1”)reluLayer (“名字”,“relu1”)fullyConnectedLayer(问,“名字”,“取得”)reluLayer (“名字”,“relu2”)fullyConnectedLayer(不,“名字”,“一个fc3”文件));款= dlnetwork(款);
查看网络配置。
图绘制(layerGraph(款)
指定选项评论家优化器使用rlOptimizerOptions
。
criticOptions = rlOptimizerOptions (“LearnRate”1的军医,“GradientThreshold”,1“L2RegularizationFactor”1的军医);
创建一个使用指定的评论家表示深层神经网络和选项。您还必须指定动作和评论家的观测信息,你从环境中获取接口。有关更多信息,请参见rlVectorQValueFunction
。
评论家= rlVectorQValueFunction(款、observationInfo actionInfo);
创建DQN代理,首先使用指定DQN代理选项rlDQNAgentOptions
。
agentOptions = rlDQNAgentOptions (…“SampleTime”Ts,…“UseDoubleDQN”,真的,…“CriticOptimizerOptions”criticOptions,…“ExperienceBufferLength”1 e6,…“MiniBatchSize”,64);
然后,创建DQN代理和代理选项使用指定的评论家表示。有关更多信息,请参见rlDQNAgent
。
代理= rlDQNAgent(评论家,agentOptions);
火车代理
培训代理商,首先指定培训选项。对于这个示例,使用以下选项:
运行每个训练集最多5000集,每集与持久的最多
装天花板(T / T)
时间的步骤。在事件管理器对话框显示培训进展(设置
情节
选项训练进步
)和禁用命令行显示(设置详细的
选项假
)。当集奖励达到停止训练
1
。保存一份代理累积奖励大于每一集
-2.5
。
有关更多信息,请参见rlTrainingOptions
。
maxepisodes = 5000;maxsteps =装天花板(T / T);trainingOpts = rlTrainingOptions (…“MaxEpisodes”maxepisodes,…“MaxStepsPerEpisode”maxsteps,…“详细”假的,…“阴谋”,“训练进步”,…“StopTrainingCriteria”,“EpisodeReward”,…“StopTrainingValue”,1…“SaveAgentCriteria”,“EpisodeReward”,…“SaveAgentValue”,-2.5);
火车代理使用火车
函数。培训是一个计算密集型的过程需要几个小时才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainingOpts);其他的%加载pretrained代理的例子。负载(“金宝appSimulinkLKADQNMulti.mat”,“代理”)结束
模拟DQN代理
验证的性能训练有素的特工,取消以下两行和模拟环境中的代理。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
% simOptions = rlSimulationOptions (MaxSteps, MaxSteps);%的经验= sim (env,代理,simOptions);
演示培训代理确定的初始条件,模拟仿真软件的模型。金宝app
e1_initial = -0.4;e2_initial = 0.2;sim (mdl)
情节展示,横向误差(情节)和相对偏航角(情节)都是驱动接近于零。车辆从中心线(-0.4米)和一个非零偏航角误差(0.2 rad)。车道保持辅助使自我汽车沿着中心线大约2.5秒。转向角(图)显示,控制器达到稳态后约2秒。
关闭仿真软件模型。金宝app
如果~ doTraining% bdclose (mdl)结束
重置功能
函数= localResetFcn(中)%重置= setVariable (,“e1_initial”,0.5 *(1 + 2 *兰德));%横向偏差的随机值= setVariable (,“e2_initial”,0.1 *(1 + 2 *兰德));%相对偏航角的随机值结束