训练多智能体路径跟随控制
这个示例展示了如何训练多个代理协作地为车辆执行路径跟踪控制(PFC)。PFC的目标是通过控制纵向加速度和制动,使自驾汽车以设定的速度行驶,同时与前车保持安全距离,同时通过控制前转向角,使车辆沿着车道的中心线行驶。有关PFC的更多信息,请参见<一个href="//www.ru-cchi.com/it/help/mpc/ref/pathfollowingcontrolsystem.html" data-docid="mpc_ref#mw_78ac0ef3-0622-4d5f-907b-52f6c7bebff6" class="a">路径跟踪控制系统(模型预测控制工具箱).
概述
中给出了训练强化学习代理执行PFC的示例<一个href="//www.ru-cchi.com/it/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 Agent进行路径跟踪控制.在该示例中,训练单个深度确定性策略梯度(DDPG)代理来控制自我车辆的纵向速度和横向转向。在本例中,您训练了两个强化学习代理——DDPG代理为纵向控制环提供连续的加速度值,而深度q -网络(DQN)代理为横向控制环提供离散的转向角度值。
经过训练的智能体通过合作行为进行PFC,并获得满意的结果。
创建环境
本例的环境包括自我车的简单自行车模型和领头车的简单纵向模型。训练目标是通过控制纵向加速和制动,使小我车以设定的速度行驶,同时与前车保持安全距离,同时通过控制前转向角,使小我车沿车道中心线行驶。
加载环境参数。
multiAgentPFCParams
打开Simulink模型。
mdl =“rlMultiAgentPFC”;open_system (mdl)
在该模型中,两个强化学习agent (RL Agent1和RL Agent2)分别提供纵向加速度和转向角信号。
当出现下列任何一种情况时,模拟将终止。
(横向偏移幅度超过1)
(自我车的纵向速度下降到0.5以下。
(自我和领头车之间的距离小于零)
纵向控制器(RL Agent1):
自我车的参考速度
定义如下。当相对距离小于安全距离时,自车跟踪前车速度和驾驶员组速度的最小值。以这种方式,自我车与领头车保持一定距离。如果相对距离大于安全距离,自我车跟踪驾驶员设定的速度。在本例中,安全距离定义为汽车纵向速度的线性函数
,也就是说,
.安全距离决定了自我车的跟踪速度。
来自环境的观测包含纵向测量:速度误差
,其积分
,和自负车纵向速度
.
动作信号由-3到2m /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)*pi/180);
将观察和操作规范组合为单元格数组。
obsInfo = {obsInfo1,obsInfo2};actInfo = {actInfo1,actInfo2};
创建一个Simulink环境接口,为两个代理块指定块路径。块路径的顺序必须与观察和操作规范单元格数组的顺序相匹配。
BLKS = MDL + [“/ RL Agent1”,“/ RL Agent2”];env = rlSimulinkEnv(mdl,blks,obsInfo,actInfo);
属性为环境指定重置函数ResetFcn财产。这个函数pfcResetFcn在训练期间的每一集开始时,随机设置主角和自我载具的初始姿势。
env。ResetFcn = @pfcResetFcn;
创建代理
对于本例,您将创建两个强化学习代理。首先,固定随机种子的重现性。
rng (0)
在本例中,两个代理都在相同的采样时间操作。设置采样时间值(以秒为单位)。
Ts = 0.1;
纵向控制
纵向控制回路的药剂为DDPG药剂。DDPG代理使用评价值函数表示近似于给定的观察和操作的长期奖励,并使用参与者策略表示选择操作。有关创建深度神经网络值函数和策略表示的更多信息,请参见<一个href="//www.ru-cchi.com/it/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/it/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 Agent进行自适应巡航控制的例子。
agent1 = createACCAgent(obsInfo1,actInfo1,Ts);
横向控制
用于横向控制环的代理是DQN代理。DQN智能体使用临界值函数表示来近似给定观察和行动的长期奖励。
使用createLKAAgent功能来创建用于横向控制的DQN代理。该代理的结构类似于<一个href="//www.ru-cchi.com/it/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集,每个训练集最长持续时间maxsteps时间的步骤。
在“事件管理器”对话框中显示培训进度详细的而且情节选项)。
当DDPG和DQN的平均奖励分别大于480和1195时,停止训练。当一个智能体达到它的停止标准时,它不学习而模拟自己的策略,而另一个智能体继续训练。
Tf = 60;模拟时间%Maxepisodes = 5000;maxsteps = ceil(Tf/Ts);trainingOpts = rlTrainingOptions(...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”maxsteps,...“详细”假的,...“阴谋”,“训练进步”,...“StopTrainingCriteria”,“AverageReward”,...“StopTrainingValue”(480、1195));
培训特工使用<一个href="//www.ru-cchi.com/it/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([agent1,agent2],env,trainingOpts);其他的为示例加载预训练的代理。负载(“rlPFCAgents.mat”)结束
下图显示了两个代理的训练进度快照。
模拟代理
为了验证经过训练的代理的性能,可以在Simulink环境中通过取消以下命令的注释来模拟代理。有关代理模拟的详细信息,请参见<一个href="//www.ru-cchi.com/it/help/reinforcement-learning/ref/rlsimulationoptions.html" data-docid="rl_ref#mw_983bb2e9-0115-4548-8daa-687037e090b2" class="a">rlSimulationOptions而且<一个href="//www.ru-cchi.com/it/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 m时的结果。
领头车的速度周期性地从24米/秒变到30米/秒(右上图)。自我车在整个模拟过程中保持安全距离(右下图)。
从0秒到30秒,自我车跟踪设定的速度(右上图)并经历一些加速度(左上图)。之后,加速度减小为0。
左下角的图显示了横向偏移。如图所示,在1秒内,横向偏差大大减小。横向偏差小于0.1 m。
另请参阅
相关的话题
这个示例展示了如何训练多个代理协作地为车辆执行路径跟踪控制(PFC)。PFC的目标是通过控制纵向加速度和制动,使自驾汽车以设定的速度行驶,同时与前车保持安全距离,同时通过控制前转向角,使车辆沿着车道的中心线行驶。有关PFC的更多信息,请参见<一个href="//www.ru-cchi.com/it/help/mpc/ref/pathfollowingcontrolsystem.html" data-docid="mpc_ref#mw_78ac0ef3-0622-4d5f-907b-52f6c7bebff6" class="a">路径跟踪控制系统 中给出了训练强化学习代理执行PFC的示例<一个href="//www.ru-cchi.com/it/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 Agent进行路径跟踪控制 经过训练的智能体通过合作行为进行PFC,并获得满意的结果。 本例的环境包括自我车的简单自行车模型和领头车的简单纵向模型。训练目标是通过控制纵向加速和制动,使小我车以设定的速度行驶,同时与前车保持安全距离,同时通过控制前转向角,使小我车沿车道中心线行驶。 加载环境参数。 打开Simulink模型。 在该模型中,两个强化学习agent (RL Agent1和RL Agent2)分别提供纵向加速度和转向角信号。 当出现下列任何一种情况时,模拟将终止。
(横向偏移幅度超过1)
(自我车的纵向速度下降到0.5以下。
(自我和领头车之间的距离小于零) 纵向控制器(RL Agent1): 自我车的参考速度 来自环境的观测包含纵向测量:速度误差 动作信号由-3到2m /s^2之间的连续加速度值组成。 奖励
在这里,
如果模拟被终止,否则
如果 横向控制器(RL Agent2): 来自环境的观测包含横向测量:横向偏移 动作信号由离散的转向角动作组成,其值从-15度(-0.2618 rad)到15度(0.2618 rad),每步1度(0.0175 rad)。 奖励
在这里,
如果模拟被终止,否则
,否则 奖励函数中的逻辑项( 创建纵向控制回路的观察和操作规范。 创建横向控制回路的观察和操作规范。 将观察和操作规范组合为单元格数组。 创建一个Simulink环境接口,为两个代理块指定块路径。块路径的顺序必须与观察和操作规范单元格数组的顺序相匹配。 属性为环境指定重置函数 对于本例,您将创建两个强化学习代理。首先,固定随机种子的重现性。 在本例中,两个代理都在相同的采样时间操作。设置采样时间值(以秒为单位)。 纵向控制回路的药剂为DDPG药剂。DDPG代理使用评价值函数表示近似于给定的观察和操作的长期奖励,并使用参与者策略表示选择操作。有关创建深度神经网络值函数和策略表示的更多信息,请参见<一个href="//www.ru-cchi.com/it/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集,每个训练集最长持续时间 在“事件管理器”对话框中显示培训进度 当DDPG和DQN的平均奖励分别大于480和1195时,停止训练。当一个智能体达到它的停止标准时,它不学习而模拟自己的策略,而另一个智能体继续训练。 培训特工使用<一个href="//www.ru-cchi.com/it/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/it/help/reinforcement-learning/ref/rlsimulationoptions.html" data-docid="rl_ref#mw_983bb2e9-0115-4548-8daa-687037e090b2" class="a"> 为了演示使用确定性初始条件训练的智能体,在Simulink中对模型进行仿真。 下图为模拟开始时领先车领先自我车70 m时的结果。 领头车的速度周期性地从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)*pi/180);
obsInfo = {obsInfo1,obsInfo2};actInfo = {actInfo1,actInfo2};
BLKS = MDL + [
env。ResetFcn = @pfcResetFcn;
创建代理
rng (0)
Ts = 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)
另请参阅