该示例演示了如何训练多个智能体协同执行车辆的路径跟踪控制(PFC)。PFC的目标是通过控制纵向加速和刹车,使自我车辆以设定的速度行驶,同时保持与领先车辆的安全距离,并通过控制前转向角度使车辆保持在车道的中心线上行驶。有关PFC的更多信息,请参见 培训强化学习代理执行PFC的示例如所示 经过训练的agent通过合作行为进行PFC,并取得了满意的结果。 本示例的环境包括ego汽车的简单自行车模型和lead汽车的简单纵向模型。训练目标是通过控制纵向加速和制动使自我车以设定的速度行驶,同时保持与领先车的安全距离,同时通过控制前转向角度使自我车保持在其车道的中心线上行驶。 加载环境参数。 打开Simulin万博1manbetxk模型。 在该模型中,两个reinforcement learning agent (RL Agent1和RL Agent2)分别提供纵向加速度和转向角度信号。 当发生下列任何情况时,模拟将终止。
(横向偏差的大小超过1)
自我车的纵向速度降到0.5以下。
(自我与领车的距离在零以下) 纵向控制器(RL Agent1): 汽车的参考速度 来自环境的观测包含了纵向测量:速度误差 动作信号由-3到2 m/s^2之间的连续加速度值组成。 奖励
在这里
如果模拟终止,则为
如果 对于横向控制器(RL Agent2): 环境观测包含横向测量:横向偏差 动作信号由离散转向角动作组成,其取值范围为-15度(-0.2618 rad)到15度(0.2618 rad),步长为1度(0.0175 rad)。 奖励
在这里
如果模拟终止,则为
否则 奖赏功能的逻辑术语( 创建纵向控制回路的观察和动作规范。 创建横向控制回路的观察和动作规范。 将观察和行动规范组合为一个单元阵列。 创建Simulin万博1manbetxk环境接口,为两个代理块指定块路径。块路径的顺序必须与观察和操作规范单元格数组的顺序相匹配。 使用为环境指定重置功能 在本例中,您创建了两个强化学习代理。首先,修复随机种子以获得再现性。 在本例中,两个代理在相同的采样时间运行。设置采样时间值(以秒为单位)。 纵向控制回路的代理是DDPG代理。DDPG代理使用临界值函数表示法近似给定观察和行动的长期回报,并使用参与者策略表示法选择行动。有关创建深度神经网络值函数和策略表示法的更多信息,请参阅 使用 横向控制回路的代理是DQN代理。DQN代理使用临界值函数表示来近似给定观察和动作的长期回报。 使用 指定培训选项。对于本例,请使用以下选项。 每一集最多5000集,每一集最多持续 在“事件管理器”对话框中显示培训进度(设置 当DDPG和DQN代理收到的平均奖励分别大于480和1195时,停止培训。当一个代理达到其停止标准时,它模拟自己的策略而不学习,而另一个代理继续培训。 训练特工使用 下图显示了两个代理的训练进度快照。 要验证经过培训的代理的性能,请通过取消注释以下命令在Simulink环境中模拟代理。有关代理模拟的更多信息,请参阅万博1manbetx 要使用确定性初始条件演示经过训练的agent,请在Simulink中模拟该模型。万博1manbetx 下图是模拟开始时,领头车领先自我车70米时的结果。 引车的速度从24米/秒周期性地变化到30米/秒(右上图)。ego汽车在整个模拟过程中保持安全距离(右下图)。 从0到30秒,ego汽车跟踪设定速度(右上角图)并经历一些加速度(左上角图)。之后,加速度降低到0。 左下方的图显示了横向偏差。如图所示,横向偏差在1秒内大大减小。横向偏差保持在0.1m以下。
概述
创建环境
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};
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)
另见