恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
决策规划十年演进:从规则状态机到学习范式的工程实践
首页
资讯中心
/
决策规划十年演进:从规则状态机到学习范式的工程实践
决策规划十年演进:从规则状态机到学习范式的工程实践
发布时间:2026/10/19 7:58:38
做决策规划这一行到今天正好跨过完整的十年。这十年里我从用上千行规则代码撑着决策树的时代走过来也从头参与了用优化框架重构规划器的项目再到近两年带着团队在仿真环境里调强化学习策略。“决策规划”这四个字的含义在这十年里被彻底改写——十年前它更多指一套状态机和几何曲线如今它是预测、决策、规划、控制交织的复杂系统甚至开始被端到端模型重新定义。这篇文章我想把这十年的演进脉络、关键选型逻辑、以及我在工程化过程中踩过的坑完整地梳理一遍。无论你是刚入行想做决策规划算法还是已经在做规控模块但想补全历史拼图这份记录应该都能给你一些参考。1. 十年起点规则逻辑与状态机的黄金时代1.1 决策层的老底子有限状态机十年前如果你打开一辆智能车的决策模块十有八九会看到一个有限状态机FSM。所谓决策本质就是枚举场景当前是跟车、是静止等待、还是换道、是超车、还是靠边停车每一个状态对应一套行为参数状态之间用一组条件和优先级去切换。我在早期项目里就维护过这样一套状态机节点大概几十个切换条件超过两百条。每条条件都是工程师从实车测试和场景分析里总结出来的经验例如“当前车道前车距离小于三十米且持续一秒邻车道后方来车相对速度小于某个阈值时才能发起换道”。这套东西的好处非常明显可解释、可调试、好预期。出了问题打开状态机图从哪个状态跳到了哪个状态一目了然。坏处也很致命条件之间存在大量隐式耦合改一条阈值可能让另一个路口的行为变得奇怪。那时候团队里最怕的不是开发是加场景。每发现一个新的十字路口行为不满足预期就要在状态机里加分支、加嵌套、加优先级。维护到后期状态图已经复杂到没人敢轻易动它因为改任何一处都可能引发连锁反应。1.2 早期的规划器几何曲线与速度剖面决策层给出指令后规划层负责把它变成一条可执行的轨迹。早期的规划器和今天完全不是一个画风路径规划常用多项式曲线、圆弧拼接、直线圆弧组合这类几何方法速度规划则多用梯形速度曲线或者S型速度曲线。当时做换道我会在目标车道中心线附近采几个横向偏移量用五次多项式把当前点和目标点拼起来然后用当前车速和限制加速度去算速度剖面。这种方案在低速、空旷、结构化的场地里表现不错所以早期的园区车、封闭场景示范项目大多这样工作。但一进开放道路就露馅。路面曲率变化、横坡、障碍物分布不均这些几何方法很难把“舒适”和“安全”同时表达清楚。我还记得有一次在园区里做测试一个小半径弯道加路肩石边缘多项式曲线硬是拧出了一个让乘客明显前倾的姿态调参调了整整三天最后也只是把一个弯道做好了换个半径又得重来。1.3 规则方案的天然天花板现在回头看规则状态机方案的天花板不是算法本身而是场景的组合爆炸。真实交通里路口、车道线模糊、行人横穿、非机动车逆行、施工改道这些要素叠在一起用规则去枚举几乎是不可能的。我算过一笔账如果状态机只有十个状态每个状态有五个关键判断条件理论上的行为组合就已经过万更不用说每个条件还带连续阈值。到后期团队真正的瓶颈不是写规则而是如何证明这些规则在所有组合下不会冲突、不会漏判。这件事靠人肉review做不到靠穷举测试也做不到。所以从那时起行业逐渐意识到决策规划不能只靠“人写逻辑”需要一个更能表达复杂约束和不确定性的框架。这个认知直接推动了接下来五年的技术换代。2. 中间十年搜索、采样与优化方法的合流2.1 架构分层预测并入主流水线从规则状态机向现代架构演进的第一个标志性变化是“预测”正式成为决策规划的上游模块而不是一个可有可无的附件。早期很多方案根本不预测默认周围车辆保持当前速度决策只响应当前帧状态。这个假设在车少的时候还能用一旦遇到旁车减速让行、对向车抢道、行人犹豫不决反应就总是慢半拍。后来的主流架构逐渐固定为感知、预测、决策、规划、控制五层串行。预测模块输出周围目标在未来几秒内的可能轨迹决策模块根据这些轨迹选择行为意图规划模块在意图约束下搜索并优化出一条可行轨迹。这个分层的本质是把“不确定的未来”拆成“先评估再应对”的流水线。我参与重构的第一个大型项目做的就是这件事。最大的感触不是算法切换而是接口设计。预测输出多少条候选轨迹每条轨迹带什么置信度决策是直接选一条还是综合多条这些问题看起来是定义问题实际上决定了整个系统的上限和可调试性。2.2 路径规划器从“几何”走向“搜索”规划层的换代更为剧烈。几何方法逐渐被采样和搜索类方法取代栅格地图上的A*、Dijkstra成为全局路径规划的标配局部规划里RRT系列、状态栅格Lattice方法开始普及。这里有个很关键的工程经验RRT这类随机采样方法在低维空间里有效但直接用于车辆轨迹规划必须考虑运动学约束。所以后续出现了混合A*在状态空间里做栅格化再结合车辆最小转弯半径做节点扩展。我在一个泊车项目里用过混合A*它能在狭窄空间里硬找出一条能拐出来的路径这是几何方法完全做不到的。不过搜索方法的问题在于解往往不平滑所以工程上很少直接执行A输出的折线路径。常见做法是把搜索作为“拓扑决策”先用A或混合A*求出宏观路径确定走哪条路、绕过哪片区域再用局部优化生成平滑轨迹。这个“全局搜索做布局局部优化做平滑”的组合成了那几年规划器的主流形态。2.3 轨迹优化把安全与舒适写进目标函数如果搜索解决的是“往哪走”轨迹优化解决的就是“怎么走得舒服又安全”。这到五年前已经成为行业标配把轨迹生成建模成一个带约束的最优化问题目标函数里包含加速度、加加速度、横向偏移误差、与障碍物的距离惩罚约束条件里包含车辆动力学、执行器极限、交通规则。我记得第一次把轨迹生成从几何插值换成优化框架时感受完全是降维打击。以前多项式曲线只能保证端点位置和姿态中间过程是否碰到障碍物要靠采样点一个个检查优化框架则可以把“离障碍物太近”写成一个惩罚项让解自动往安全区域偏。更重要的是安全性约束可以被显式建模比如横向加速度不能超过某个值、前轮转角不能超过某个极限这些在几何方法里都很难处理。但这套方法也有代价优化问题如果建模不好很容易陷入局部最优。我遇到过很多次优化器给出的一条轨迹在代价函数上确实比当前轨迹好但实际开起来却是在跟一个障碍物“顶牛”。后来才明白这类问题多半是目标函数里缺乏对“行为意图”的引导——也就是决策层只给了终点约束没有告诉规划器优先走左侧还是右侧。所以后来越来越多的系统选择让决策层不仅给目标点还给走廊约束或语义引导把“决策”和“优化”的边界重新模糊化。2.4 决策边界模糊从状态机到约束与博弈到了这个阶段决策层本身也在变。原来那种离散的“状态跳转”逐渐被更连续的决策表达取代。比如换道决策不再是一个布尔值而是“换道时机”和“换道轨迹”的联合求解让车决策也不再是简单避让而是通过预测与规划反复迭代形成一个带博弈意味的交互策略。这背后其实是一个本质认知转变交通行为不是一个单方决策问题而是一个多方博弈问题。你打方向灯后车可能加速也可能减速你减速让行行人可能走也可能停。所以决策规划系统必须具备“我预期你预期我”的推演能力。有些团队用轻量级博弈模型比如把周围车辆的意图作为隐变量在规划时做少量前向模拟有些团队把决策问题转成带约束的优化用“安全距离走廊”来隐式处理交互。但共同点是过去那条“决策-规划”的硬边界已经撑不住了必须把意图与轨迹放在一起考虑。也是在这个阶段行业里出现了比较成熟的三代方案对比方案决策表达规划方式优势主要问题规则状态机离散状态几何曲线可解释、易调试场景组合爆炸搜索与优化离散连续混合搜索数值优化可处理复杂约束局部最优、计算量大学习与博弈连续策略/交互模型学习生成或优化适应性强、能处理不确定可解释性差、安全验证难这张表基本概括了我过去几年在不同项目里的体感并没有一个方案能通吃所有场景最后的系统形态几乎都是三者混搭。3. 近五年学习范式的冲击与现实的融合3.1 模仿学习成为数据入口大概从五年前开始深度学习方法开始大规模涌入决策规划领域。最早产生实际效果的是模仿学习也叫行为克隆直接拿人类司机的轨迹数据训练一个模型输入是感知和地图信息输出是方向盘转角或目标轨迹。模仿学习的吸引力非常直观——人类司机就是海量数据的免费标签。我在一个高速巡航项目里试过用模仿学习做换道决策数据量到几千小时时模型已经能很好地学习常见的换道时机和加速度曲线行为风格甚至比一些手调规则更接近真人。但模仿学习的坑也很深。最大的问题是“分布偏移”模型训练时见过的大多是常规驾驶数据一旦遇到训练分布之外的场景输出就可能变得不可预测。而且人类驾驶数据里充满隐式的交互博弈——你判断对方会让还是不会让——这些很难在行为克隆中学到因为模型只看到了最终轨迹没有看到背后的推理过程。所以我的实操经验是模仿学习适合用来生成“初始策略”适合做暖启动但绝不能直接作为安全关键决策的唯一来源。后面几乎所有项目模仿学习的输出都会再接一个安全过滤器或优化网络把不可信的原始输出拉回安全域内。3.2 强化学习仿真里跑分实车上求生强化学习RL在决策规划里的热度这几年一直很高但落地难度也是肉眼可见。我最早在某个开放场地项目里试过DQN训练几百轮后在仿真环境里确实能学会避障但一上实车就崩——仿真里的动力学、传感器噪声、时延都和现实对不上这个差距就是常说的sim-to-real gap。后来我们做了两件关键的事才逐渐让RL真正可用。第一是领域随机化训练时把车辆质量、轮胎摩擦系数、传感器噪声、控制延时都加随机扰动逼着策略学出对参数变化鲁棒的方案。第二是安全层约束RL策略输出的目标可以任意但底层规划必须通过一个硬安全约束检查比如最小碰撞距离、最大减速度如果违反就回退到保守策略或直接触发紧急制动。现在我对RL的定位很清楚它擅长的是在规则和优化都难写的高维交互场景里找到一个“足够好”的策略雏形但产品化的时候策略外面必须裹上确定性兜底。奖励函数设计更是泥潭稀疏奖励训练不收敛密集奖励又容易让策略钻漏洞比如为了减少加加速度惩罚而贴着障碍物边缘走。这类问题没有银弹只能靠扎实的仿真评估和逐场景分析去一轮轮调。3.3 端到端热潮下的冷思考最近两三年端到端成了无法回避的话题。所谓端到端就是从传感器原始输入直接输出控制指令或轨迹决策和规划不再有明确边界。支持者认为模块化架构存在信息瓶颈感知压缩损失了太多细节端到端用一个完整模型可以保留更多信息。从我自身的经验看端到端确实有令人兴奋的潜力但它目前最大的问题不是效果而是工程可控性。模块化系统里我可以单独看感知漏检了、预测偏了、规划撞了每一层都有单独的评价指标和调试手段。端到端出了事故你很难知道是网络哪一层出了问题更难以用传统工具去定位。此外安全验证的方式也会完全不同——模块化系统可以对预测模块做穷举测试端到端模型做不到这种“单元验证”。所以现实中的做法越来越趋向于混合架构感知用端到端模型提供更丰富的语义信息决策和规划保留模块化或半模块化结构。决策部分用学习模型生成意图但轨迹优化和安全检查仍然走确定性的约束求解。这个路线稳妥也更容易过安全评审我个人认为未来很长一段时间都将是主流。3.4 基础模型带来的新变量最近一两年大语言模型和多模态基础模型也开始试探性地进入决策规划领域。它们最直接的用法是做“场景理解”和“常识推理”比如某个路口没有护栏但地面有大量刹车痕迹普通视觉模型只会当成普通路面但结合自然语言知识的基础模型可能推断出这里事故频发需要更保守的决策。我在一个模拟项目里试过把基础模型当作决策前置模块用视觉-语言模型输出场景的语义描述再把这些描述注入传统的规则规划器。效果是喜忧参半的——对常见场景的描述非常贴切但在少见的长尾场景里模型可能一本正经地给出错误推理而且这种错误比感知漏检更难识别。不过我更关注的是这类基础模型带来的并不是某个算法突变而是“先验知识”的注入方式变化。以前人类的交通常识要一条条写成规则现在可以让模型在训练时从海量文本和视频里隐式学到。这个变化会让决策规划系统更快地适应新场景但也对验证体系提出了更高要求。顺便说一句决策规划这个概念并不只在智能车领域。我做过的调度系统、仓储机器人路径规划、供应链订单决策背后几乎都经历了从规则到优化再到学习的相似演进。底层的决策逻辑是通用的只是约束和目标函数不同所以这套方法论可以迁移到很多行业场景。4. 工程化演进让决策规划从论文走向产品4.1 仿真与场景库把真实世界搬进实验室决策规划算法迭代快不快很大程度上取决于测试体系。十年前的仿真基本是桌面级的小场景一条直线路、一个障碍物跑通就算完。后来行业意识到真正决定系统水平的是长尾场景覆盖率于是开始系统性地建场景库。场景库不是简单堆几百段录像而是要对场景要素做结构化拆解道路拓扑、车道数、曲率、坡度、天气、光照、交通参与者类型、相对位置、相对速度、意图组合。每个要素的不同取值组合在一起就形成一个场景谱系。我所在团队的方法是把真实路采数据先自动挖掘成片段再通过参数化变异生成大量相似但不完全相同的场景灌进仿真里做回归测试。这个做法的价值在于决策规划最怕的不是一个已知问题而是“上一次改动破坏了某个过去明明好的场景”。有了场景库和自动回归每次代码修改都能在几百上千个场景里跑一遍哪个行为退化一目了然。可以说如果只让我给一个新团队一个建议我不会建议先上多先进的算法而是建议先把场景库和自动化评估搭起来。4.2 安全兜底与降级策略永远假设会出错十年做下来我认为决策规划最重要的一个原则就是永远假设上游会出错、模型会失效、预测会偏差然后把兜底做得足够硬比追求任何单点算法的先进性都重要。具体来说一套成熟的系统至少要有三层兜底。第一层是预测兜底如果预测模块给的轨迹置信度很低决策层要能主动降低对预测的依赖拉大安全距离。第二层是规划兜底优化求解失败、搜索超时要有预先算好的安全停车轨迹能在任意时刻执行。第三层是控制兜底即使上层全失效底层还有基于安全距离和最大制动能力的直通保护逻辑它不应该经过复杂的决策推理而应该像保险丝一样直接断开危险状态。我记得有一次真实路测感知模块因为逆光把前方静止的施工锥桶漏检了两帧决策层的数据里瞬间没有任何障碍物。如果不是规划层做了“状态保持障碍物记忆”的机制系统大概率会直接加速过去。这件事之后我再也没有怀疑过兜底设计的必要性。4.3 可解释性与调试出了事故怎么定位随着系统复杂度上升“可解释性”从加分项变成了必需品。产品事故后第一个问题永远是“决策规划当时为什么这么做”。如果系统是个黑盒这个问题根本无法回答。我们常用的做法有三层。第一层是结构化日志每一次决策切换、每一条规划轨迹的代价函数各项分值、每条预测轨迹的置信度全部按时间戳记录。第二层是可视化回放在仿真环境里同步回放感知、预测、决策、规划四层数据能暂停、能查看任意时刻的输入输出。第三层是决策依据标注在轨迹上标注“这里因为右侧障碍物距离小于阈值所以选择了左侧绕行”这样的解释文本极大降低事故分析成本。这套体系听起来不复杂但很多团队都是出了几次事故之后才开始补的。我的建议是决策规划模块从第一天起就要设计成可debug的而不是等到出了问题再试图加日志。5. 十年踩坑实录实操细节与避坑经验5.1 长尾场景不是统计问题而是系统问题处理长尾场景最容易犯的错误是把它当成一个“多收集数据”或“多加点规则”的问题。但实际经验告诉我长尾场景是一个系统问题必须从场景发现、仿真训练、安全兜底三个层面同时解决。场景发现层面不能只看人工上报要有自动挖掘工具从路采数据里寻找异常片段比如急刹、偏离中心线、方向盘抖动这些往往是决策规划的隐性失败。仿真训练层面要能对场景做组合式变异把单场景变成场景族。安全兜底层面刚才已经强调过面对任何没见过的场景系统最差也要能做出“安全停车”或“低速通过”绝不能给出一个自信但危险的轨迹。我现在对“corner case”这个词已经有些保留意见。因为它暗示是一个个孤立的边角但实际上这些所谓边角在概率上并不独立它们聚集在长尾分布里随便拿出两个都能组合出新的边缘情况。应对它的根本思路不是穷举而是让系统对“不确定”本身有敬畏输出置信度低的时候自动降级。5.2 预测与规划的接口设计输出什么比怎么算更关键决策规划系统里我认为最容易被低估的接口是预测模块的输出表示。预测模块辛辛苦苦算了半天给规划器传什么格式的数据直接决定整个系统的上限。最简单的接口是传一条最可能的轨迹规划器拿它当参考。这个方案实现快但一旦预测错了规划就没有回旋余地。稍微好一点的是传多条带置信度的轨迹多模态预测规划器在代价函数里对每条轨迹分别评估选择整体风险最低的行为。这个方案对预测质量的要求依然很高但它给规划器留出了“综合判断”的空间。实际操作中我踩过的一个坑是预测模块输出了十条轨迹但其中真正有区分度的只有两条另外八条几乎一样。规划器面对冗余轨迹时反而会被多数投票效应误导以为某个方向的可能性极高。后来我们增加了聚类和后处理把轨迹集压缩到几类代表性的意图而且强制要求每条轨迹携带一个“存在概率”和一个“风险等级”规划器将这两个量直接放进代价函数。5.3 上下游协作感知与控制之间的决策夹层决策规划位于感知和控制之间位置决定了它最吃亏的地方感知的误差、控制的不确定性都会在决策层被放大。我见过不少项目决策规划算法明明没问题但实车表现很怪一查根因在感知时间戳和控制指令时延。这里有一条几乎不变的铁律输入数据必须有时间戳对齐和合法性检查。感知偶尔会漏一帧控制指令有几十到几百毫秒的延迟如果决策层没有处理这些异常系统就会在“看到障碍物”和“障物突然消失”之间频繁切换轨迹抖动甚至急刹。我建议在决策规划模块前加一个小的“状态缓冲层”做三件事丢失检测、状态外推、可疑数据标记。丢失检测发现某目标超过一定帧数没更新就启动保守策略状态外推用运动学模型把目标位置补到最新时刻可疑数据标记用来告诉下游这条输入可能不可靠风险权重需要提高。别小看这几行逻辑很多实际性能提升就是从这里来的。5.4 给新入行朋友的几条实用建议如果读者里有刚接触决策规划的朋友我想分享几点这十年沉淀下来的实用建议不是教科书上的那种。第一先把优化理论、概率论、控制理论打牢。决策规划听起来是算法问题但底层是数学问题。很多复杂方案的瓶颈最后都落在“这个优化问题怎么建模”“这个概率分布怎么估计”上。第二不要一上来就追端到端或强化学习。先把规则状态机和轨迹优化做一遍亲身感受一下为什么规则会爆炸、优化会陷入局部最优。没有这个对比你对新范式的理解是空的。第三一定要重视仿真和场景库。我个人见过太多聪明的算法死在评估体系不健全上一个改动跑两天然后放三个场景就上线这种流程再好的算法也会被拖垮。第四保持对“异常”的敏感。决策规划工程师最该具备的能力不是写出漂亮的公式而是能快速定位“为什么这个场景下行为怪怪的”。这种能力靠大量调试、大量路测、大量事故分析练出来。最后再分享一个小技巧当你在调试一个复杂问题时第一件事永远是“把输入数据一帧一帧看一遍”而不是去看算法逻辑。我统计过我处理过的问题里有一半以上最终的根因根本不在决策规划本身而在于上游输入有异常。先把“输入是否可信”这个前置问题解决决策规划才能真正安心工作。这十年走下来我最大的体会是行业的真正进步不在于从规则换成优化、从优化换成了学习而在于我们把“造一个聪明的规划器”变成了“造一个可以被信任的系统”。技术名词换了一波又一波但让决策规划真正落地的东西始终是围绕它的工程体系——场景、仿真、兜底、调试、验证这些才是把每一项单点技术串成可靠产品的线。如果你打算投入这个方向也请记住这一点先学会在一个真实系统里把一个简单方案做到稳定不出错再去碰那些让人觉得兴奋的复杂模型顺序反了的话你会被长尾场景和调试地狱折磨得怀疑人生。