训练DDPG代理进行自适应巡航控制
这个例子展示了如何在Simulink®中训练用于自适应巡航控制(ACC)的深度确定性策略梯度(DDPG)代理。有关DDPG代理的更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ug/ddpg-agents.html" data-docid="rl_ug#mw_66c8fe60-f58e-4bdb-904a-21d442f0a879" class="a">深度确定性策略梯度(DDPG)代理.
仿真软件模型
本例中的强化学习环境是自我车和领头车的简单纵向动力学。训练目标是使自我车以设定的速度行驶,同时通过控制纵向加速和制动与前车保持安全距离。此示例使用与。相同的车辆模型<一个href="//www.ru-cchi.com/help/mpc/ug/adaptive-cruise-control-using-model-predictive-controller.html" data-docid="mpc_ug#mw_5d3362c7-033d-4773-a8e5-5f3d303a9c10" class="a">模型预测控制自适应巡航控制系统(模型预测控制工具箱)的例子。
指定两辆车的初始位置和速度。
x0_lead = 50;前车初始位置% (m)v0_lead = 25;前车初始速度% (m/s)x0_ego = 10;自我车初始位置% (m)v0_ego = 20;自我车初始速度% (m/s)
指定停顿默认间距(m)、时间间隔(s)和驾驶员设定速度(m/s)。
D_default = 10;t_gap = 1.4;v_set = 30;
为了模拟车辆动力学的物理限制,将加速度限制在该范围内(3 2)米/秒^ 2。
amin_ego = 3;amax_ego = 2;
定义样本时间Ts和仿真时间特遣部队在几秒钟内。
t = 0.1;Tf = 60;
打开模型。
mdl =“rlACCMdl”;Open_system (mdl) agentblk = [mdl .' / RL代理'];
对于这个模型:
从代理到环境的加速动作信号从-3到2 m/s^2。
自我车的参考速度
定义如下。如果相对距离小于安全距离,自我车将跟踪前车速度和驾驶员设定速度的最小值。以这种方式,自我车与领头车保持一定距离。如果相对距离大于安全距离,自我汽车就会跟踪驾驶员设定的速度。在本例中,安全距离被定义为自我汽车纵向速度的线性函数
;也就是说,
.安全距离决定了自我车的参考跟踪速度。
来自环境的观测是速度误差
,它的积分
,和自我车纵向速度
.
当自我车纵向速度小于0,或前导车与自我车的相对距离小于0时,模拟终止。
奖励
,每个时间步提供
,是
在哪里
是来自前一个时间步骤的控制输入。逻辑值
如果速度误差
;否则,
.
创建环境接口
为模型创建一个强化学习环境接口。
创建观察规范。
observationInfo = rlNumericSpec([3 1],“LowerLimit”负无穷*的(1),“UpperLimit”,正* (3,1));observationInfo。Name =“观察”;observationInfo。描述=“速度误差和自我速度的信息”;
创建操作规范。
actionInfo = rlNumericSpec([1 1],“LowerLimit”3,“UpperLimit”2);actionInfo。Name =“加速”;
创建环境接口。
env = rlSimulinkEnv (mdl agentblk、observationInfo actionInfo);
要定义前导车位置的初始条件,请使用匿名函数句柄指定环境重置函数。重置功能localResetFcn,它在例末定义,对前车的初始位置进行随机化。
env。ResetFcn = @(在)localResetFcn(的);
固定随机生成器种子的再现性。
rng (“默认”)
创建DDPG代理
DDPG代理使用临界价值函数表示来近似给出观察和行动的长期奖励。要创建批评家,首先创建一个具有两个输入(状态和行为)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ug/create-policy-and-value-function-representations.html" data-docid="rl_ug#mw_2c7e8669-1e91-4d42-afa6-674009a08004" class="a">创建政策和价值功能.
L = 48;神经元百分数statePath = [featureInputLayer(3,“归一化”,“没有”,“名字”,“观察”) fullyConnectedLayer (L,“名字”,“fc1”) reluLayer (“名字”,“relu1”) fullyConnectedLayer (L,“名字”,“取得”) additionLayer (2“名字”,“添加”) reluLayer (“名字”,“relu2”) fullyConnectedLayer (L,“名字”,“一个fc3”文件) reluLayer (“名字”,“relu3”) fullyConnectedLayer (1,“名字”,“fc4”));actionPath = [featureInputLayer(1,“归一化”,“没有”,“名字”,“行动”) fullyConnectedLayer (L,“名字”,“fc5”));criticNetwork = layerGraph (statePath);关键网络= addLayers(关键网络,actionPath);criticNetwork = connectLayers (criticNetwork,“fc5”,“添加/ in2”);criticNetwork = dlnetwork (criticNetwork);
查看批评家网络配置。
情节(layerGraph (criticNetwork))
指定所使用的批评家优化器的选项rlOptimizerOptions.
criticOptions = rlOptimizerOptions (“LearnRate”1 e - 3,“GradientThreshold”, 1“L2RegularizationFactor”1的军医);
使用指定的神经网络和选项创建批评家表示。您还必须为批评者指定操作和观察信息,这些信息将从环境接口获得。有关更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlqvaluefunction.html" data-docid="rl_ref#mw_e6e7abac-0a33-423b-8473-1409879db701" class="a">rlQValueFunction.
评论家= rlQValueFunction (criticNetwork observationInfo actionInfo,...“ObservationInputNames”,“观察”,“ActionInputNames”,“行动”);
DDPG代理通过使用参与者表示来决定执行给定的观察结果。要创建参与者,首先创建一个深度神经网络,它有一个输入(观察)和一个输出(动作)。
把演员比作评论家。有关更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlcontinuousdeterministicactor.html" data-docid="rl_ref#mw_c2909424-90f4-4a52-803b-73310483e6c3" class="a">rlContinuousDeterministicActor.
actorNetwork = [featureInputLayer(3,“归一化”,“没有”,“名字”,“观察”) fullyConnectedLayer (L,“名字”,“fc1”) reluLayer (“名字”,“relu1”) fullyConnectedLayer (L,“名字”,“取得”) reluLayer (“名字”,“relu2”) fullyConnectedLayer (L,“名字”,“一个fc3”文件) reluLayer (“名字”,“relu3”) fullyConnectedLayer (1,“名字”,“fc4”) tanhLayer (“名字”,“tanh1”) scalingLayer (“名字”,“ActorScaling1”,“规模”, 2.5,“偏见”-0.5)];actorNetwork = dlnetwork (actorNetwork);actorOptions = rlOptimizerOptions (“LearnRate”1的军医,“GradientThreshold”, 1“L2RegularizationFactor”1的军医);演员= rlContinuousDeterministicActor (actorNetwork observationInfo actionInfo);
要创建DDPG代理,首先使用指定DDPG代理选项<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlddpgagentoptions.html" data-docid="rl_ref#mw_5e9a4c5d-03d5-48d9-a85b-3c2d25fde43c" class="a">rlDDPGAgentOptions.
agentOptions = rlDDPGAgentOptions (...“SampleTime”Ts,...“ActorOptimizerOptions”actorOptions,...“CriticOptimizerOptions”criticOptions,...“ExperienceBufferLength”1 e6);agentOptions.NoiseOptions.Variance = 0.6;agentOptions.NoiseOptions.VarianceDecayRate = 1 e-5;
然后,使用指定的参与者表示、批评家表示和代理选项创建DDPG代理。有关更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlddpgagent.html" data-docid="rl_ref#mw_7e49ed9c-eea8-4994-8532-c7f66d5359ef" class="a">rlDDPGAgent.
代理= rlDDPGAgent(演员、评论家、agentOptions);
火车代理
要培训代理,首先要指定培训选项。对于本例,使用以下选项:
每次训练最多跑一段时间5000章节,每章节最多持续600个时间步。
在“集训管理器”对话框中显示训练进度。
当代理获得的章节奖励大于260时停止训练。
有关更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rltrainingoptions.html" data-docid="rl_ref#mw_1f5122fe-cb3a-4c27-8c80-1ce46c013bf0" class="a">rlTrainingOptions.
maxepisodes = 5000;maxsteps =装天花板(Tf / Ts);trainingOpts = rlTrainingOptions (...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”maxsteps,...“详细”假的,...“阴谋”,“训练进步”,...“StopTrainingCriteria”,“EpisodeReward”,...“StopTrainingValue”, 260);
训练代理使用<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rl.agent.rlqagent.train.html" data-docid="rl_ref#mw_c0ccd38c-bbe6-4609-a87d-52ebe4767852" class="a">火车函数。训练是一个计算密集的过程,需要几分钟才能完成。要在运行此示例时节省时间,请通过设置加载预先训练过的代理doTraining来假.亲自训练探员,设doTraining来真正的.
doTraining = false;如果doTraining培训代理。trainingStats =火车(代理,env, trainingOpts);其他的为示例加载一个预先训练过的代理。。负载(“SimulinkACCDDPG.mat”,“代理”)结束
模拟DDPG代理
为了验证经过训练的代理的性能,可以在Simulink环境中通过取消以下命令的注释来模拟代理。有关代理模拟的更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlsimulationoptions.html" data-docid="rl_ref#mw_983bb2e9-0115-4548-8daa-687037e090b2" class="a">rlSimulationOptions而且<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rl.env.abstractenv.sim.html" data-docid="rl_ref#mw_e6296379-23b5-4819-a13b-210681e153bf" class="a">sim卡.
% simOptions = rlSimulationOptions('MaxSteps', MaxSteps);% experience = sim(env,agent,simOptions);
为了使用确定性初始条件来演示训练过的智能体,在Simulink中对模型进行了仿真。
x0_lead = 80;sim (mdl)
下图为前导车领先自我车70 (m)时的模拟结果。
在前28秒内,相对距离大于安全距离(底部图),所以自我汽车跟踪设定速度(中间图)。为了加速并达到设定的速度,加速度为正(上图)。
从28秒到60秒,相对距离小于安全距离(底部图),所以自我车跟踪的是领先速度和设定速度的最小值。从28秒到36秒,领先速度小于设定速度(中间图)。为了减速并跟踪前车速度,加速度为负(上图)。从36秒到60秒,自我汽车调整它的加速度以密切跟踪参考速度(中间图)。在这个时间间隔内,自我车跟踪设定的速度从43秒到52秒,跟踪领先速度从36秒到43秒和52秒到60秒。
关闭Simulink模型。
bdclose (mdl)
重置功能
函数= localResetFcn(中)重置前车的初始位置。。= setVariable (,“x0_lead”40 +兰迪(60,1,1));结束
另请参阅
相关的话题
这个例子展示了如何在Simulink®中训练用于自适应巡航控制(ACC)的深度确定性策略梯度(DDPG)代理。有关DDPG代理的更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ug/ddpg-agents.html" data-docid="rl_ug#mw_66c8fe60-f58e-4bdb-904a-21d442f0a879" class="a">深度确定性策略梯度(DDPG)代理 本例中的强化学习环境是自我车和领头车的简单纵向动力学。训练目标是使自我车以设定的速度行驶,同时通过控制纵向加速和制动与前车保持安全距离。此示例使用与。相同的车辆模型<一个href="//www.ru-cchi.com/help/mpc/ug/adaptive-cruise-control-using-model-predictive-controller.html" data-docid="mpc_ug#mw_5d3362c7-033d-4773-a8e5-5f3d303a9c10" class="a">模型预测控制自适应巡航控制系统 指定两辆车的初始位置和速度。 指定停顿默认间距(m)、时间间隔(s)和驾驶员设定速度(m/s)。 为了模拟车辆动力学的物理限制,将加速度限制在该范围内 定义样本时间 打开模型。 对于这个模型: 从代理到环境的加速动作信号从-3到2 m/s^2。 自我车的参考速度 来自环境的观测是速度误差 当自我车纵向速度小于0,或前导车与自我车的相对距离小于0时,模拟终止。 奖励
在哪里 为模型创建一个强化学习环境接口。 创建观察规范。 创建操作规范。 创建环境接口。 要定义前导车位置的初始条件,请使用匿名函数句柄指定环境重置函数。重置功能 固定随机生成器种子的再现性。 DDPG代理使用临界价值函数表示来近似给出观察和行动的长期奖励。要创建批评家,首先创建一个具有两个输入(状态和行为)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ug/create-policy-and-value-function-representations.html" data-docid="rl_ug#mw_2c7e8669-1e91-4d42-afa6-674009a08004" class="a">创建政策和价值功能 查看批评家网络配置。 指定所使用的批评家优化器的选项 使用指定的神经网络和选项创建批评家表示。您还必须为批评者指定操作和观察信息,这些信息将从环境接口获得。有关更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlqvaluefunction.html" data-docid="rl_ref#mw_e6e7abac-0a33-423b-8473-1409879db701" class="a"> DDPG代理通过使用参与者表示来决定执行给定的观察结果。要创建参与者,首先创建一个深度神经网络,它有一个输入(观察)和一个输出(动作)。 把演员比作评论家。有关更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlcontinuousdeterministicactor.html" data-docid="rl_ref#mw_c2909424-90f4-4a52-803b-73310483e6c3" class="a"> 要创建DDPG代理,首先使用指定DDPG代理选项<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlddpgagentoptions.html" data-docid="rl_ref#mw_5e9a4c5d-03d5-48d9-a85b-3c2d25fde43c" class="a"> 然后,使用指定的参与者表示、批评家表示和代理选项创建DDPG代理。有关更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlddpgagent.html" data-docid="rl_ref#mw_7e49ed9c-eea8-4994-8532-c7f66d5359ef" class="a"> 要培训代理,首先要指定培训选项。对于本例,使用以下选项: 每次训练最多跑一段时间 在“集训管理器”对话框中显示训练进度。 当代理获得的章节奖励大于260时停止训练。 有关更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rltrainingoptions.html" data-docid="rl_ref#mw_1f5122fe-cb3a-4c27-8c80-1ce46c013bf0" class="a"> 训练代理使用<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rl.agent.rlqagent.train.html" data-docid="rl_ref#mw_c0ccd38c-bbe6-4609-a87d-52ebe4767852" class="a"> 为了验证经过训练的代理的性能,可以在Simulink环境中通过取消以下命令的注释来模拟代理。有关代理模拟的更多信息,请参见<一个href="//www.ru-cchi.com/help/reinforcement-learning/ref/rlsimulationoptions.html" data-docid="rl_ref#mw_983bb2e9-0115-4548-8daa-687037e090b2" class="a"> 为了使用确定性初始条件来演示训练过的智能体,在Simulink中对模型进行了仿真。 下图为前导车领先自我车70 (m)时的模拟结果。 在前28秒内,相对距离大于安全距离(底部图),所以自我汽车跟踪设定速度(中间图)。为了加速并达到设定的速度,加速度为正(上图)。 从28秒到60秒,相对距离小于安全距离(底部图),所以自我车跟踪的是领先速度和设定速度的最小值。从28秒到36秒,领先速度小于设定速度(中间图)。为了减速并跟踪前车速度,加速度为负(上图)。从36秒到60秒,自我汽车调整它的加速度以密切跟踪参考速度(中间图)。在这个时间间隔内,自我车跟踪设定的速度从43秒到52秒,跟踪领先速度从36秒到43秒和52秒到60秒。 关闭Simulink模型。仿真软件模型
x0_lead = 50;
D_default = 10;t_gap = 1.4;v_set = 30;
amin_ego = 3;amax_ego = 2;
t = 0.1;Tf = 60;
mdl =
创建环境接口
observationInfo = rlNumericSpec([3 1],
actionInfo = rlNumericSpec([1 1],
env = rlSimulinkEnv (mdl agentblk、observationInfo actionInfo);
env。ResetFcn = @(在)localResetFcn(的);
rng (
创建DDPG代理
L = 48;
情节(layerGraph (criticNetwork))
criticOptions = rlOptimizerOptions (
rlQValueFunction
评论家= rlQValueFunction (criticNetwork observationInfo actionInfo,
rlContinuousDeterministicActor
actorNetwork = [featureInputLayer(3,
rlDDPGAgentOptions
agentOptions = rlDDPGAgentOptions (
rlDDPGAgent
代理= rlDDPGAgent(演员、评论家、agentOptions);
火车代理
rlTrainingOptions
maxepisodes = 5000;maxsteps =装天花板(Tf / Ts);trainingOpts = rlTrainingOptions (
火车
doTraining = false;
模拟DDPG代理
rlSimulationOptions
sim卡
% simOptions = rlSimulationOptions('MaxSteps', MaxSteps);
x0_lead = 80;sim (mdl)
bdclose (mdl)
重置功能
函数
另请参阅
相关的话题