训练DDPG Agent进行路径跟踪控制
本示例展示了如何在Simulink®中训练深度确定性策略梯度(DDPG)代理用于路径跟踪控制(PFC)。有关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)代理.
仿真软件模型
本例的强化学习环境是自我车的简单自行车模型和领先车的简单纵向模型。训练目标是通过控制纵向加速和制动,使小我车以设定的速度行驶,同时与前车保持安全距离,同时通过控制前转向角,使小我车沿着车道的中心线行驶。有关PFC的更多信息,请参见<一个href="//www.ru-cchi.com/help/mpc/ref/pathfollowingcontrolsystem.html" data-docid="mpc_ref#mw_78ac0ef3-0622-4d5f-907b-52f6c7bebff6" class="a">路径跟踪控制系统(模型预测控制工具箱).自我汽车的动态由以下参数指定。
M = 1600;车辆总质量百分比(kg)Iz = 2875;%横摆惯性矩(mNs^2)Lf = 1.4;重心到前轮纵向距离% (m)Lr = 1.6;重心到后轮纵向距离% (m)Cf = 19000;前轮胎转弯刚度% (N/rad)Cr = 33000;后轮胎转弯刚度% (N/rad)Tau = 0.5;%纵向时间常数
指定两辆车的初始位置和速度。
X0_lead = 50;%前车初始位置(m)V0_lead = 24;前车初速度% (m/s)X0_ego = 10;%自我车初始位置(m)V0_ego = 18;初始速度% (m/s)
指定静止默认间距(m)、时间间隔(s)和驱动设置速度(m/s)。
D_default = 10;T_gap = 1.4;V_set = 28;
为了模拟车辆动力学的物理限制,将加速度限制在范围内(3 2)(m/s^2),以及转向角与距离的比值[-0.2618, 0.2618](rad)是-15和15度。
Amin_ego = -3;Amax_ego = 2;Umin_ego = -0.2618;% +15度Umax_ego = 0.2618;% -15度
道路的曲率由常数0.001 (
).横向偏差的初始值为0.2 m,相对偏航角的初始值为-0.1 rad。
Rho = 0.001;E1_initial = 0.2;E2_initial = -0.1;
定义采样时间Ts以及模拟持续时间特遣部队在几秒钟内。
Ts = 0.1;Tf = 60;
打开模型。
mdl =“rlPFCMdl”;Open_system (mdl) agentblk = [mdl . txt]' / RL代理'];
对于这个模型:
动作信号由加速和转向角动作组成。加速度动作信号的值在-3到2 (m/s^2)之间。转向动作信号的值介于-15度(-0.2618 rad)和15度(0.2618 rad)之间。
自我车的参考速度
定义如下。当相对距离小于安全距离时,自车跟踪前车速度和驾驶员组速度的最小值。以这种方式,自我车与领头车保持一定距离。如果相对距离大于安全距离,自我车跟踪驾驶员设定的速度。在本例中,安全距离定义为汽车纵向速度的线性函数
,也就是说,
.安全距离决定了自我车的跟踪速度。
来自环境的观测包含纵向测量:速度误差
,其积分
,和自负车纵向速度
.此外,观测还包含横向测量:横向偏移
,相对偏航角
,它们的导数
而且
和它们的积分
而且
.
当侧向偏移时,模拟结束
,当纵向速度
,或当领先车与自我车之间的相对距离
.
奖励
,在每个时间步提供
,是
在哪里
转向输入来自前一个时间步长吗
,
是前一个时间步长的加速度输入。三个逻辑值如下所示。
如果模拟被终止,否则
如果横向误差
,否则
如果速度误差
,否则
奖励中的三个逻辑项鼓励智能体使横向误差和速度误差都小,同时,如果模拟提前结束,则对智能体进行惩罚。
创建环境界面
为Simulink模型创建一个环境接口。
创建观察规范。
observationInfo = rlNumericSpec([9 1],“LowerLimit”负无穷*的(9,1)“UpperLimit”,正* (9,1));observationInfo。Name =“观察”;
创建动作规范。
actionInfo = rlNumericSpec([2 1],“LowerLimit”(3; -0.2618),“UpperLimit”, 2, 0.2618);actionInfo。Name =“accel;引导”;
创建环境接口。
env = rlSimulinkEnv(mdl,agentblk,observationInfo,actionInfo);
若要定义初始条件,请使用匿名函数句柄指定环境重置函数。复位功能localResetFcn,在例末定义,随机化前车的初始位置、横向偏差和相对偏航角。
env。ResetFcn = @ localResetFcn(in);
固定随机生成器种子的再现性。
rng (0)
创建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 = 100;神经元数目%statePath = [featureInputLayer(9,“归一化”,“没有”,“名字”,“观察”) fullyConnectedLayer (L,“名字”,“fc1”) reluLayer (“名字”,“relu1”) fullyConnectedLayer (L,“名字”,“取得”) additionLayer (2“名字”,“添加”) reluLayer (“名字”,“relu2”) fullyConnectedLayer (L,“名字”,“一个fc3”文件) reluLayer (“名字”,“relu3”) fullyConnectedLayer (1,“名字”,“fc4”));actionPath = [featureInputLayer(2,“归一化”,“没有”,“名字”,“行动”) fullyConnectedLayer (L,“名字”,“fc5”));criticNetwork = layerGraph(statePath);criticNetwork = addLayers(criticNetwork,actionPath);临界网络= connectLayers(临界网络,“fc5”,“添加/ in2”);临界网络= dlnetwork(临界网络);
查看关键网络配置。
图绘制(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(9,“归一化”,“没有”,“名字”,“观察”) fullyConnectedLayer (L,“名字”,“fc1”) reluLayer (“名字”,“relu1”) fullyConnectedLayer (L,“名字”,“取得”) reluLayer (“名字”,“relu2”) fullyConnectedLayer (L,“名字”,“一个fc3”文件) reluLayer (“名字”,“relu3”) fullyConnectedLayer (2“名字”,“fc4”) tanhLayer (“名字”,“tanh1”) scalingLayer (“名字”,“ActorScaling1”,“规模”[2.5, 0.2618],“偏见”, -0.5, 0));actorNetwork = dlnetwork(actorNetwork);actorOptions = rlOptimizerOptions(“LearnRate”1的军医,“GradientThreshold”,1,“L2RegularizationFactor”1的军医);actor = 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;0.1];agentOptions.NoiseOptions.VarianceDecayRate = 1e-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.
agent = rlDDPGAgent(actor,批评家,agentOptions);
火车代理
要培训代理,首先指定培训选项。对于本例,使用以下选项:
每个训练集最多运行一次10000集,每集最多maxsteps时间的步骤。
在“事件管理器”对话框中显示培训进度详细的而且情节选项)。
当代理收到的累积集奖励大于1700.
有关更多信息,请参见<一个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 = 1e4;maxsteps = ceil(Tf/Ts);trainingOpts = rlTrainingOptions(...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”maxsteps,...“详细”假的,...“阴谋”,“训练进步”,...“StopTrainingCriteria”,“EpisodeReward”,...“StopTrainingValue”, 1700);
培训代理使用<一个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 = train(agent,env,trainingOpts);其他的为示例加载预训练的代理。负载(“SimulinkPFCDDPG.mat”,“代理”)结束
模拟DDPG Agent
为了验证经过训练的代理的性能,可以在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中对模型进行仿真。
E1_initial = -0.4;E2_initial = 0.1;X0_lead = 80;sim (mdl)
下面的图显示了领先车领先自我车70 (m)时的模拟结果。
在前35秒内,相对距离大于安全距离(右下图),因此自我车会跟踪设定的速度(右上图)。为了加速并达到设定的速度,加速度通常是非负的(左上角的图)。
从35秒到42秒,相对距离大多小于安全距离(右下图),因此自我车跟踪引导速度和设定速度的最小值。由于先导速度小于设定速度(右上图),为了跟踪先导速度,加速度变为非零(左上图)。
从42秒到58秒,自我车跟踪设定的速度(右上图),加速度保持为零(左上图)。
从58秒到60秒,相对距离小于安全距离(右下图),因此自我车减速并跟踪领先速度。
左下角的图显示了横向偏移。如图所示,在1秒内,横向偏差大大减小。横向偏差小于0.05 m。
关闭Simulink模型。
bdclose (mdl)
重置功能
函数in = localResetFcn(in) in = setVariable(in,“x0_lead”40 +兰迪(60,1,1));引导车初始位置的随机值in = setVariable(in,“e1_initial”, 0.5 *(1 + 2 *兰德));%横向偏差的随机值in = setVariable(in,“e2_initial”, 0.1 *(1 + 2 *兰德));%相对偏航角的随机值结束
另请参阅
相关的话题
本示例展示了如何在Simulink®中训练深度确定性策略梯度(DDPG)代理用于路径跟踪控制(PFC)。有关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)代理 本例的强化学习环境是自我车的简单自行车模型和领先车的简单纵向模型。训练目标是通过控制纵向加速和制动,使小我车以设定的速度行驶,同时与前车保持安全距离,同时通过控制前转向角,使小我车沿着车道的中心线行驶。有关PFC的更多信息,请参见<一个href="//www.ru-cchi.com/help/mpc/ref/pathfollowingcontrolsystem.html" data-docid="mpc_ref#mw_78ac0ef3-0622-4d5f-907b-52f6c7bebff6" class="a">路径跟踪控制系统 指定两辆车的初始位置和速度。 指定静止默认间距(m)、时间间隔(s)和驱动设置速度(m/s)。 为了模拟车辆动力学的物理限制,将加速度限制在范围内 道路的曲率由常数0.001 ( 定义采样时间 打开模型。 对于这个模型: 动作信号由加速和转向角动作组成。加速度动作信号的值在-3到2 (m/s^2)之间。转向动作信号的值介于-15度(-0.2618 rad)和15度(0.2618 rad)之间。 自我车的参考速度 来自环境的观测包含纵向测量:速度误差 当侧向偏移时,模拟结束 奖励
在哪里
如果模拟被终止,否则
如果横向误差
如果速度误差 奖励中的三个逻辑项鼓励智能体使横向误差和速度误差都小,同时,如果模拟提前结束,则对智能体进行惩罚。 为Simulink模型创建一个环境接口。 创建观察规范。 创建动作规范。 创建环境接口。 若要定义初始条件,请使用匿名函数句柄指定环境重置函数。复位功能 固定随机生成器种子的再现性。 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"> 要培训代理,首先指定培训选项。对于本例,使用以下选项: 每个训练集最多运行一次 在“事件管理器”对话框中显示培训进度 当代理收到的累积集奖励大于 有关更多信息,请参见<一个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)时的模拟结果。 在前35秒内,相对距离大于安全距离(右下图),因此自我车会跟踪设定的速度(右上图)。为了加速并达到设定的速度,加速度通常是非负的(左上角的图)。 从35秒到42秒,相对距离大多小于安全距离(右下图),因此自我车跟踪引导速度和设定速度的最小值。由于先导速度小于设定速度(右上图),为了跟踪先导速度,加速度变为非零(左上图)。 从42秒到58秒,自我车跟踪设定的速度(右上图),加速度保持为零(左上图)。 从58秒到60秒,相对距离小于安全距离(右下图),因此自我车减速并跟踪领先速度。 左下角的图显示了横向偏移。如图所示,在1秒内,横向偏差大大减小。横向偏差小于0.05 m。 关闭Simulink模型。仿真软件模型
M = 1600;
X0_lead = 50;
D_default = 10;T_gap = 1.4;V_set = 28;
Amin_ego = -3;Amax_ego = 2;Umin_ego = -0.2618;
Rho = 0.001;E1_initial = 0.2;E2_initial = -0.1;
Ts = 0.1;Tf = 60;
mdl =
创建环境界面
observationInfo = rlNumericSpec([9 1],
actionInfo = rlNumericSpec([2 1],
env = rlSimulinkEnv(mdl,agentblk,observationInfo,actionInfo);
env。ResetFcn = @ localResetFcn(in);
rng (0)
创建DDPG代理
L = 100;
图绘制(layerGraph (criticNetwork))
criticOptions = rlOptimizerOptions(
rlQValueFunction
rlQValueFunction(criticNetwork,observationInfo,actionInfo,
rlContinuousDeterministicActor
actorNetwork = [featureInputLayer(9,
rlDDPGAgentOptions
agentOptions = rlDDPGAgentOptions(
rlDDPGAgent
agent = rlDDPGAgent(actor,批评家,agentOptions);
火车代理
rlTrainingOptions
Maxepisodes = 1e4;maxsteps = ceil(Tf/Ts);trainingOpts = rlTrainingOptions(
火车
doTraining = false;
模拟DDPG Agent
rlSimulationOptions
sim卡
% simOptions = rlSimulationOptions('MaxSteps', MaxSteps);
E1_initial = -0.4;E2_initial = 0.1;X0_lead = 80;sim (mdl)
bdclose (mdl)
重置功能
函数
另请参阅
相关的话题