训练多个代理进行路径跟随控制
这个例子展示了如何训练多个代理协同执行车辆的路径跟踪控制(PFC)。PFC的目标是,通过控制纵向加速和制动,使自驾车在与前车保持安全距离的同时,以设定的速度行驶,同时通过控制前车转向角,使自驾车沿着车道中心线行驶。有关PFC的更多信息,请参见<一个href="//www.ru-cchi.com/help/mpc/ref/pathfollowingcontrolsystem.html" data-docid="mpc_ref#mw_78ac0ef3-0622-4d5f-907b-52f6c7bebff6" class="a">路径跟随控制系统(模型预测控制工具箱).
概述
一个训练强化学习代理执行PFC的例子显示在<一个href="//www.ru-cchi.com/help/reinforcement-learning/ug/train-ddpg-agent-for-path-following-control.html" data-docid="rl_ug#mw_e40d4da8-366f-4eca-8e57-5b6f6a4f5093" class="a">对DDPG代理进行路径跟随控制的培训.在那个例子中,一个深度确定性策略梯度(DDPG)代理被训练来控制自我车辆的纵向速度和横向转向。在本例中,您训练了两个强化学习代理——一个DDPG代理为纵向控制环提供连续加速度值,一个深q -网络(DQN)代理为横向控制环提供离散转向角值。
经过训练的代理通过合作行为进行PFC,并取得满意的结果。
创建环境
本例的环境包括用于自我汽车的简单自行车模型和用于领头汽车的简单纵向模型。训练目标是让自我车以设定的速度行驶,同时通过控制纵向加速和刹车保持与前车的安全距离,同时通过控制前车转向角度保持自我车沿着车道中心线行驶。
加载环境参数。
multiAgentPFCParams
打开Simulink模型。
mdl =“rlMultiAgentPFC”;open_system (mdl)
在该模型中,两个增强学习代理(RL Agent1和RL Agent2)分别提供纵向加速度和转向角信号。
当出现下列任何条件时,模拟终止。
(横向偏移幅度超过1)
(自我车的纵向速度降到0.5以下。
(自我和前导车之间的距离小于0)
对于纵向控制器(RL Agent1):
自我车的参考速度
定义如下。如果相对距离小于安全距离,自我车将跟踪前车速度和驾驶员设定速度的最小值。以这种方式,自我车与领头车保持一定距离。如果相对距离大于安全距离,自我汽车就会跟踪驾驶员设定的速度。在本例中,安全距离被定义为自我汽车纵向速度的线性函数
,也就是说,
.安全距离决定了自我车的跟踪速度。
来自环境的观测包含纵向测量:速度误差
,它的积分
,和自我车纵向速度
.
动作信号由-3到2 m/s^2之间的连续加速度值组成。
奖励
,每个时间步提供
,是
在这里,
为前一个时间步长的加速度输入,且:
如果模拟终止,则否则
.
如果
,否则
.
对于横向控制器(RL Agent2):
来自环境的观测包含横向测量:横向偏差
,相对偏航角
,他们的衍生品
而且
和它们的积分
而且
.
动作信号包括离散的转向角动作,从-15度(-0.2618 rad)到15度(0.2618 rad)在1度(0.0175 rad)的步骤。
奖励
,每个时间步提供
,是
在这里,
是前一个时间步长的转向输入,
为前一个时间步长的加速度输入,且:
如果模拟终止,则否则
.
,否则
.
奖励函数中的逻辑项(
,
,
)如果模拟提前结束,则惩罚代理,同时鼓励代理使横向误差和速度误差都较小。
建立纵向控制回路的观察和动作规范。
obsInfo1 = rlNumericSpec([3 1]);actInfo1 = rlNumericSpec([1 1],“LowerLimit”3,“UpperLimit”2);
创建横向控制回路的观察和动作规范。
obsInfo2 = rlNumericSpec([6 1]);actInfo2 = rlFiniteSetSpec((15:15) *π/ 180);
将观察和操作规范结合为单元阵列。
obsInfo = {obsInfo1, obsInfo2};actInfo = {actInfo1, actInfo2};
创建一个Simulink环境接口,为两个代理块指定块路径。块路径的顺序必须与观察和操作规范单元阵列的顺序匹配。
k + n + n“/ RL Agent1”,“/ RL Agent2”];env = rlSimulinkEnv (mdl,黑色,obsInfo actInfo);
方法为环境指定一个重置函数ResetFcn财产。这个函数pfcResetFcn在训练过程中,在每一集的开始随机设置主角和自我载具的初始姿势。
env。ResetFcn = @pfcResetFcn;
创建代理
对于本例,您创建了两个强化学习代理。首先,固定随机种子的可重复性。
rng (0)
在本例中,两个代理在相同的采样时间内操作。设置采样时间值(以秒为单位)。
t = 0.1;
纵向控制
纵向控制回路的代理是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">创建政策和价值功能.
使用createCCAgent函数创建用于纵向控制的DDPG代理。该代理的结构类似于<一个href="//www.ru-cchi.com/help/reinforcement-learning/ug/train-ddpg-agent-for-adaptive-cruise-control.html" data-docid="rl_ug#mw_e4e63d67-bb1a-4120-85cf-b20338729d59" class="a">训练DDPG代理进行自适应巡航控制的例子。
agent1 = createACCAgent (obsInfo1 actInfo1, Ts);
横向控制
侧向控制回路的代理是DQN代理。DQN代理使用一个临界值函数表示来近似给出观察和行动的长期奖励。
使用createLKAAgent功能来创建用于横向控制的DQN代理。该代理的结构类似于<一个href="//www.ru-cchi.com/help/reinforcement-learning/ug/train-dqn-agent-for-lane-keeping-assist.html" data-docid="rl_ug#mw_1b9850d5-18f3-4b9d-91fc-a45117c8e6cb" class="a">培训DQN人员协助保持车道的例子。
agent2 = createLKAAgent (obsInfo2 actInfo2, Ts);
培训代理商
指定培训选项。对于本例,使用以下选项。
每集训练最多5000集,每集最多持续5000集maxsteps时间的步骤。
在“集训管理器”对话框中显示训练进度详细的而且情节选项)。
当DDPG和DQN获得的平均奖励分别大于480和1195时,停止训练。当一个代理达到它的停止标准时,它模拟自己的策略而不学习,而另一个代理继续训练。
Tf = 60;%的仿真时间maxepisodes = 5000;maxsteps =装天花板(Tf / Ts);trainingOpts = rlTrainingOptions (...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”maxsteps,...“详细”假的,...“阴谋”,“训练进步”,...“StopTrainingCriteria”,“AverageReward”,...“StopTrainingValue”(480、1195));
训练特工使用<一个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 =火车([agent1 agent2], env, trainingOpts);其他的为示例加载经过预先训练的代理。负载(“rlPFCAgents.mat”)结束
下图显示了两个代理的训练进度快照。
模拟代理
为了验证经过训练的代理的性能,可以在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,[agent1, agent2],simOptions);
为了使用确定性初始条件来演示训练过的智能体,在Simulink中对模型进行了仿真。
e1_initial = -0.4;e2_initial = 0.1;x0_lead = 80;sim (mdl)
下图是模拟开始时,前导车距离自我车70米时的结果。
前车的速度周期性地从24米/秒变化到30米/秒(右上图)。在整个模拟过程中,自我汽车保持了一个安全距离(右下图)。
从0秒到30秒,自我汽车会沿着设定的速度前进(右上图),并经历一些加速(左上图)。之后,加速度降为0。
左下图显示了横向偏移。如图所示,1秒内横向偏移大大减小。侧向偏移小于0.1 m。
另请参阅
相关的话题
这个例子展示了如何训练多个代理协同执行车辆的路径跟踪控制(PFC)。PFC的目标是,通过控制纵向加速和制动,使自驾车在与前车保持安全距离的同时,以设定的速度行驶,同时通过控制前车转向角,使自驾车沿着车道中心线行驶。有关PFC的更多信息,请参见<一个href="//www.ru-cchi.com/help/mpc/ref/pathfollowingcontrolsystem.html" data-docid="mpc_ref#mw_78ac0ef3-0622-4d5f-907b-52f6c7bebff6" class="a">路径跟随控制系统 一个训练强化学习代理执行PFC的例子显示在<一个href="//www.ru-cchi.com/help/reinforcement-learning/ug/train-ddpg-agent-for-path-following-control.html" data-docid="rl_ug#mw_e40d4da8-366f-4eca-8e57-5b6f6a4f5093" class="a">对DDPG代理进行路径跟随控制的培训 经过训练的代理通过合作行为进行PFC,并取得满意的结果。 本例的环境包括用于自我汽车的简单自行车模型和用于领头汽车的简单纵向模型。训练目标是让自我车以设定的速度行驶,同时通过控制纵向加速和刹车保持与前车的安全距离,同时通过控制前车转向角度保持自我车沿着车道中心线行驶。 加载环境参数。 打开Simulink模型。 在该模型中,两个增强学习代理(RL Agent1和RL Agent2)分别提供纵向加速度和转向角信号。 当出现下列任何条件时,模拟终止。
(横向偏移幅度超过1)
(自我车的纵向速度降到0.5以下。
(自我和前导车之间的距离小于0) 对于纵向控制器(RL Agent1): 自我车的参考速度 来自环境的观测包含纵向测量:速度误差 动作信号由-3到2 m/s^2之间的连续加速度值组成。 奖励
在这里,
如果模拟终止,则否则
如果 对于横向控制器(RL Agent2): 来自环境的观测包含横向测量:横向偏差 动作信号包括离散的转向角动作,从-15度(-0.2618 rad)到15度(0.2618 rad)在1度(0.0175 rad)的步骤。 奖励
在这里,
如果模拟终止,则否则
,否则 奖励函数中的逻辑项( 建立纵向控制回路的观察和动作规范。 创建横向控制回路的观察和动作规范。 将观察和操作规范结合为单元阵列。 创建一个Simulink环境接口,为两个代理块指定块路径。块路径的顺序必须与观察和操作规范单元阵列的顺序匹配。 方法为环境指定一个重置函数 对于本例,您创建了两个强化学习代理。首先,固定随机种子的可重复性。 在本例中,两个代理在相同的采样时间内操作。设置采样时间值(以秒为单位)。 纵向控制回路的代理是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">创建政策和价值功能 使用 侧向控制回路的代理是DQN代理。DQN代理使用一个临界值函数表示来近似给出观察和行动的长期奖励。 使用 指定培训选项。对于本例,使用以下选项。 每集训练最多5000集,每集最多持续5000集 在“集训管理器”对话框中显示训练进度 当DDPG和DQN获得的平均奖励分别大于480和1195时,停止训练。当一个代理达到它的停止标准时,它模拟自己的策略而不学习,而另一个代理继续训练。 训练特工使用<一个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米时的结果。 前车的速度周期性地从24米/秒变化到30米/秒(右上图)。在整个模拟过程中,自我汽车保持了一个安全距离(右下图)。 从0秒到30秒,自我汽车会沿着设定的速度前进(右上图),并经历一些加速(左上图)。之后,加速度降为0。 左下图显示了横向偏移。如图所示,1秒内横向偏移大大减小。侧向偏移小于0.1 m。
概述
创建环境
multiAgentPFCParams
mdl =
obsInfo1 = rlNumericSpec([3 1]);actInfo1 = rlNumericSpec([1 1],
obsInfo2 = rlNumericSpec([6 1]);actInfo2 = rlFiniteSetSpec((15:15) *π/ 180);
obsInfo = {obsInfo1, obsInfo2};actInfo = {actInfo1, actInfo2};
k + n + n
env。ResetFcn = @pfcResetFcn;
创建代理
rng (0)
t = 0.1;
纵向控制
agent1 = createACCAgent (obsInfo1 actInfo1, Ts);
横向控制
agent2 = createLKAAgent (obsInfo2 actInfo2, Ts);
培训代理商
Tf = 60;
火车
doTraining = false;
模拟代理
rlSimulationOptions
sim卡
% simOptions = rlSimulationOptions('MaxSteps', MaxSteps);
e1_initial = -0.4;e2_initial = 0.1;x0_lead = 80;sim (mdl)
另请参阅