基于强化学习DDPG算法的ACC自适应巡航控制器设计:Simulink中的奖励函数、动作空间与...

张开发
2026/4/3 21:44:02 15 分钟阅读
基于强化学习DDPG算法的ACC自适应巡航控制器设计:Simulink中的奖励函数、动作空间与...
基于强化学习 DDPG 算法实现的acc自适应巡航控制器设计ACC自适应巡航控制器设计附说明文档强化学习DDPG算法 基于simulink 中的强化学习工具箱设计agent 的奖励函数动作空间状态空间训练终止条件 设置领航车的速度和位移曲线然后自车的加速度基于ACC逻辑用ddpg agent 来控制 模型简单适用于初学强化学习算法的入门资源可改写成强化学习的车辆队列协同控制tt3最近在折腾用强化学习做车辆控制试了DDPG算法实现ACC自适应巡航发现Simulink的强化学习工具箱真香。咱们直接上干货手把手看怎么让自车跟着前车跑起来。先说说核心逻辑前车随便开它的咱们的自车通过DDPG agent输出加速度既要保持安全距离又不能急刹急加速。代码里最核心的是这个奖励函数function [reward, isDone] calculateReward(~, obs) % 状态参数提取 relSpeed obs(1); % 相对速度 distance obs(2); % 车间距 egoSpeed obs(3); % 自车速度 % 安全距离计算2秒跟车时距 safeDistance egoSpeed * 2 5; % 奖励函数三要素 tracking_error abs(distance - safeDistance)/safeDistance; speed_reward tanh(egoSpeed/30); action_penalty abs(currentAction) * 0.2; % 组合奖励 reward (1 - tracking_error) speed_reward - action_penalty; % 终止条件 isDone distance 2 || distance 150; end这里有个坑要注意——奖励函数里的tanh用来限制速度奖励在合理范围action_penalty防止加速度突变。安全距离用动态计算比固定值靠谱毕竟车速快的时候需要更大缓冲空间。动作空间设置直接上连续加速度范围actionInfo rlNumericSpec([1 1], LowerLimit, -3, UpperLimit, 2); actionInfo.Name acceleration;为啥上限2m/s²而下限-3实测急减速超过3m/s²乘客会骂娘加速太猛又费油。状态空间抓三个关键参数stateInfo rlNumericSpec([3 1],... LowerLimit, [-inf 0 0],... UpperLimit, [inf inf 120]); stateInfo.Name vehicleStates;这三个维度分别是相对速度、实际车距、自车速度。注意别把前车速度单独放进来相对速度已经包含两者速度关系。基于强化学习 DDPG 算法实现的acc自适应巡航控制器设计ACC自适应巡航控制器设计附说明文档强化学习DDPG算法 基于simulink 中的强化学习工具箱设计agent 的奖励函数动作空间状态空间训练终止条件 设置领航车的速度和位移曲线然后自车的加速度基于ACC逻辑用ddpg agent 来控制 模型简单适用于初学强化学习算法的入门资源可改写成强化学习的车辆队列协同控制tt3训练参数设置直接影响收敛速度agentOpts rlDDPGAgentOptions(... SampleTime, 0.1,... TargetSmoothFactor, 1e-3,... ExperienceBufferLength, 1e6); agentOpts.NoiseOptions.StandardDeviation 0.5; agentOpts.NoiseOptions.StandardDeviationDecayRate 1e-4;这里用了Ornstein-Uhlenbeck噪声初始标准差0.5让agent多探索。关键是要设置衰减率不然训练后期还在乱晃。经验池开满1e6条毕竟车辆状态具有连续性。在Simulink里搭环境时记得把领航车的速度曲线设得风骚点。我习惯用正弦波叠加阶跃信号leaderSpeed 20 5*sin(0.1*t) 2*heaviside(t-30);这样能同时考验跟车的稳态和瞬态响应。训练到500回合左右奖励曲线开始稳定这时候可以看实测效果了——自车像老司机一样前车突然减速时稳稳保持安全距离加速时也不会地板油。想改成多车队列在状态空间里多塞几辆前车的数据就行。比如把stateInfo改成[5 1]加前前车的相对速度和距离奖励函数里再加个跟车一致性惩罚项。这么一改立马变身车队协同控制方案。最后提醒新手别在GPU上死磕这种简单模型用CPU训练更快。遇到震荡问题时试着把奖励函数里的action_penalty系数从0.2调到0.5立竿见影。

更多文章