中秋节前一天,小天刚拿到驾照,老司机韩叔带他从城里开车回山里老家。出城是双向八车道的大路,阳光灿烂,视野开阔;进山后却是大雾弥漫的盘山公路,十米外几乎什么都看不清。 韩叔一边握方向盘一边说:“自动驾驶的车,其实也分两种'看路'的本事。晴天大路,适合 MPC——模型预测控制,像你有望远镜一样,提前看好前方几百米,在心里排好接下来几秒的走线,走几步再重新看一眼、微调方向;雾天山路看不清,就得靠 POMDP——部分可观测马尔可夫决策过程,像现在的我们,看不清就'猜',每看到一点新信息就更新一次猜测,在每个弯道前用概率决定是加油还是收油。” 小天恍然大悟:“所以自动驾驶不是一种算法走天下,而是像老司机一样,天晴有晴天的开法,起雾有起雾的开法,还会随时切换。” 韩叔笑了:“对。而且光会聪明还不够,量产车上的算法,还得扛得住'考试'——成千上万公里的仿真测试、安全冗余、法规合规,才能真正放心让它上路。”

岗位关联

决策规划是自动驾驶“承上启下”的指挥官,掌握 MPC 与 POMDP 的取舍逻辑与工程落地思路,是从事自动驾驾驶规控算法、系统量产与安全验证工作的核心能力。

目录
  1. 可视化演示
  2. 模块定位:车上的“指挥官”
  3. MPC原理:晴天看远路
  4. POMDP原理:雾天摸着石头过河
  5. 方案对比:阴晴切换怎么选
  6. 工程落地:从教练场到真马路
  7. 量产安全:不犯错才是硬道理
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

在自动驾驶规划场景中对比MPC模型预测控制与POMDP部分可观测决策:前者滚动优化生成确定性轨迹,后者处理不完全可观测状态,右侧指标呈现规划效率与鲁棒性。

本节配有交互动效(进入视口后自动加载,约 3KB)。

MPC滚动优化 滚动时域 最优轨迹 min J(u) 确定性优化选轨迹

模块定位:车上的“指挥官”

车在服务区停下,韩叔在引擎盖上画了个简图:“一辆自动驾驶的车,就像车上四个人分工——眼睛负责看(感知),参谋负责猜别人接下来往哪走(预测),指挥官负责拍板走哪条线(决策规划),手脚负责执行(控制)。”小天问:“那为什么非要单独的指挥官?眼睛看完,手脚直接动不就行了?”

韩叔摇头:“看到和动手之间,隔着一个大问题——接下来几秒,车要走一条怎样的轨迹?这条轨迹既要安全(不撞护栏)、又要舒适(不让乘客晕车)、还得守规矩(不压双黄线)。”决策规划模块干的正是这件事:接收感知模块输出的障碍物位置、预测模块输出的周边车辆意图,在一个极短的时间窗口内解出一条最优轨迹,再交给底层控制去跟踪执行。

从系统架构看,决策规划处在“预测之后、控制之前”的咽喉位置:预测模块给它“前方两秒后左侧车道可能有一辆车并入”的假设,它要把这些假设融入候选轨迹的评估;控制模块在等它的输出,慢一毫秒,车身就会晃一晃。因此,所有决策规划算法的本质,都可以写成下面这个“挑轨迹”的最优化问题:

韩叔说:“指挥官不用自己开车,但必须会'算账'——每一条候选轨迹的代价,心里要有数。”接下来,就是这位指挥官的两套“看路功夫”:晴天大路的 MPC,和雾天山路的 POMDP。

τ∗=arg⁡min⁡τ∈T  Jtotal(τ∣xt,Pt)\tau^* = \arg\min_{\tau \in \mathcal{T}} \; J_{\text{total}}\big(\tau \mid x_t, \mathcal{P}_t\big)
这个式子是说:在所有候选轨迹里,挑一条让总代价最小的轨迹;代价依据当前自车状态 $x_t$ 和预测信息 $\mathcal{P}_t$ 来计算。
  1. 决策变量 τ我们要求解的轨迹本身,是一串带时间戳的路径点。
    τ={(xt+1,yt+1),(xt+2,yt+2),…}\tau = \big\{ (x_{t+1}, y_{t+1}), (x_{t+2}, y_{t+2}), \dots \big\}
  2. argmin 含义在候选轨迹集合里挑代价最小的那一条,就像在三条回家路线里选最省时的一条。
    τ∗=arg⁡min⁡τ∈TJtotal(τ)\tau^* = \arg\min_{\tau \in \mathcal{T}} J_{\text{total}}(\tau)
  3. 条件信息总代价由多项子代价加权而成,每项代表一个目标(安全、舒适、效率),权重由场景标定。
    Jtotal(τ∣xt,Pt)=∑iwi Ji(τ)J_{\text{total}}\big(\tau \mid x_t, \mathcal{P}_t\big) = \sum_{i} w_i \, J_i(\tau)

MPC原理:晴天看远路

过了服务区,天气放晴,笔直的高速伸向远方。韩叔提速说:“这种路况,最适合 MPC——模型预测控制。你看我怎么开:先抬头看前面几百米,记住路况(这是预测模型);然后在心里把接下来 3 秒的走线预演一遍——直路就稳着走,弯道就提前打方向,前面有慢车就提前收油(这是预测 N 步);打方向时只执行预演中的第一步(这是只执行第一步);走出几十米,再抬头重新看一遍、重新预演(这是滚动优化)。”

MPC 这个英文名的三个词,正好对应这套功夫的三件装备:Model(模型),车辆运动学的数学描述——给定当前速度、方向盘角度,能推算出下一秒的位置;Predictive(预测),在模型之上把未来 N 个时刻的状态全部“预演”一遍;Control(控制),在预演中选出最好的控制序列。三者合起来,就是把“看路、预演、行动”变成一个每几十毫秒循环一次的闭环。

每个控制周期,MPC 要解一个有限时域优化问题:在一组动力学约束和执行器极限约束(最大转向角、最大加速度)之下,最小化“跟踪参考轨迹的偏差”与“控制量的幅值”的加权和。偏差越小,车越贴近理想路线;控制量越小,车开得越平顺、越省能。车辆状态维度通常不高,因此这个带约束的优化问题能在毫秒级求解,这也是 MPC 能被搬上量产车的前提:

韩叔总结:“这套开法的底气,是'看得清、看得远'。但它也有软肋——如果模型没预测到的东西突然出现,比如高速上滚来一个轮胎,MPC 的反应就会滞后。这种'看不清'的局面,就得换雾天那套功夫了。”

min⁡u0:N−1  ∑k=0N−1(∥xk−xkref∥Q2+∥uk∥R2),s.t. xk+1=f(xk,uk),  uk∈U\min_{u_{0:N-1}} \; \sum_{k=0}^{N-1} \left( \big\| x_k - x_k^{\text{ref}} \big\|_Q^2 + \big\| u_k \big\|_R^2 \right), \quad \text{s.t. } x_{k+1} = f(x_k, u_k),\; u_k \in \mathcal{U}
这个式子的意思是:在未来 N 步里,找一组控制序列,使“偏离参考轨迹的代价”和“控制动作太猛的代价”总和最小,同时每一步都必须满足车辆运动学模型和执行器的物理极限。
  1. 决策序列 u未来 N 步要执行的控制量(转向角、加速度),是优化问题的求解对象。
    u0:N−1=(u0,u1,…,uN−1)u_{0:N-1} = (u_0, u_1, \dots, u_{N-1})
  2. 跟踪偏差项每一步状态与参考轨迹的偏差,用权重矩阵 Q 加权,偏差越小车越贴线。
    ∥xk−xkref∥Q2=(xk−xkref)TQ(xk−xkref)\big\| x_k - x_k^{\text{ref}} \big\|_Q^2 = (x_k - x_k^{\text{ref}})^T Q (x_k - x_k^{\text{ref}})
  3. 控制代价项每一步控制量的幅值,用权重矩阵 R 抑制激烈操作,让车开得更平顺。
    ∥uk∥R2=ukTRuk\big\| u_k \big\|_R^2 = u_k^T R u_k
  4. 约束条件状态演化必须符合车辆运动学模型,控制量必须落在执行器极限内。
    xk+1=f(xk,uk),umin⁡≤uk≤umax⁡x_{k+1} = f(x_k, u_k), \quad u_{\min} \le u_k \le u_{\max}

POMDP原理:雾天摸着石头过河

山路一转,雾气从山谷漫上来,十米外只剩下两团模糊的车灯。韩叔减速、打开雾灯:“现在的环境就是'部分可观测'——我大概知道前方有路,但二十米外是直路、急弯、还是停着一辆故障车,我全不知道。这种情况不能精确规划,只能'猜':我猜前面 60% 概率是直路、30% 概率有车、10% 概率有行人,然后选一个让期望损失最小的动作——慢慢滑过去。每前进十米,新的灯影和声音都会让我修正一次猜测。”

这套“边猜边修正”的决策框架,在数学上就是 POMDP——部分可观测马尔可夫决策过程。它和经典 MDP 的关键区别在于:MDP 假设智能体完全掌握状态,而 POMDP 认为真实状态(比如旁边那辆车的司机到底想不想强行加塞)不可直接观测,只能通过传感器拿到“观测”。于是状态被替换成“信念状态”——对真实状态的一个概率分布,决策时把它当作“软状态”来用。

每个决策时刻,POMDP 做两件事:第一步,用贝叶斯公式更新信念状态——先用状态转移模型把信念往前推一步,再用新观测的似然去加权修正,最后归一化;第二步,基于新信念选择一个动作,使“当前即时奖励 + 未来折扣期望价值”最大化。为了算未来价值,需要对所有可能的信念状态做期望,这正是 POMDP 计算量巨大的根源。信念更新公式如下:

韩叔说:“雾天开车,求的不是'最优',而是'稳'。POMDP 也一样——它不追求一步算到完美,而是让每个决策都留有概率余地,新信息一到就立刻修正。”这正是它在城市路口、行人横穿等“看不清”场景特别有用的原因。

b′(s′)=O(o∣s′,a)∑s∈ST(s′∣s,a) b(s)P(o∣b,a)b'(s') = \frac{O(o \mid s', a) \sum_{s \in \mathcal{S}} T(s' \mid s, a)\, b(s)}{P(o \mid b, a)}
这个式子描述“新猜测”如何由“旧猜测”演进而来:先把旧信念按状态转移模型往前推一步,再用新观测的似然修正,最后归一化成一个合法的概率分布。
  1. 先验预测用状态转移模型把当前信念往前推一步,得到“没看新信息之前的猜测”。
    ∑s∈ST(s′∣s,a) b(s)\sum_{s \in \mathcal{S}} T(s' \mid s, a)\, b(s)
  2. 观测加权用观测模型给出的似然对猜测打分——和实际看到的越吻合,权重越高。
    ×  O(o∣s′,a)\times \; O(o \mid s', a)
  3. 归一化除以观测总概率,保证新信念的所有可能性之和为 1。
    ÷P(o∣b,a)=∑s′O(o∣s′,a)∑sT(s′∣s,a) b(s)\div P(o \mid b, a) = \sum_{s'} O(o \mid s', a) \sum_{s} T(s' \mid s, a)\, b(s)

方案对比:阴晴切换怎么选

雾气时浓时淡,韩叔的脚在油门和刹车之间轻轻切换:“你看,我没有一种固定的开法:雾淡一点,视线能到两百米,我就用 MPC 那套,提高车速、平滑走线;雾又聚拢,能见度骤降,我立刻换回 POMDP 那套,减速、留出更大的安全余地。高手开车,不是把一种功夫练到极致,而是会'看天切换'。”

工程界对这两种框架的评价,也像看天一样分明。MPC 面向确定性建模:它把周边车辆的未来轨迹当成已知输入,问题简化为“在线优化”,优点是轨迹平滑、实时性好、工程成熟;POMDP 面向不确定性建模:它把周边车辆的隐藏意图建入信念状态,决策天然考虑风险,鲁棒性强,但求解复杂度随状态、观测、历史维度指数膨胀。

两者的计算负担可以用复杂度公式直观对比。MPC 的复杂度主要由预测步数 N 和状态维度 n_x 决定,通常呈多项式级增长;POMDP 的复杂度则取决于离散状态空间大小 |S| 的平方、动作空间大小 |A| 与迭代次数。状态一旦多起来(比如把路口所有车辆的位置和意图都离散化),POMDP 的求解时间会迅速超过实时预算:

所以选型原则很简单:高速巡航、车道保持这类“看得清”的工况,MPC 是主力;城市路口、被遮挡行人这类“看不清”的工况,POMDP 更可靠。量产车往往同时配备两套,由系统置信度裁决器自动切换——就像韩叔根据雾的浓度,决定用哪套开法。

MPC: O(N⋅nx3)POMDP: O(∣S∣2⋅∣A∣⋅Niter)\text{MPC: } O(N \cdot n_x^3) \qquad \text{POMDP: } O(|\mathcal{S}|^2 \cdot |\mathcal{A}| \cdot N_{\text{iter}})
这个对比是说:MPC 的耗时随“模型精细度”平缓增长,而 POMDP 的耗时随“状态数量”急剧膨胀,两者在实时性上不是一个量级。
  1. MPC 的复杂度与预测步数 N 和状态维度的三次方成正比,状态少时毫秒级可解。
    O(N⋅nx3)O(N \cdot n_x^3)
  2. POMDP 的复杂度与状态空间大小的平方、动作空间大小、迭代次数成正比,状态一多就爆炸。
    O(∣S∣2⋅∣A∣⋅Niter)O(|\mathcal{S}|^2 \cdot |\mathcal{A}| \cdot N_{\text{iter}})
  3. 工程含义状态维度从 6 涨到 60,MPC 还能扛;状态离散化到百万级,POMDP 就超出实时预算。
    nx=6⇒O(216N)vs∣S∣=106⇒O(1012)n_x = 6 \Rightarrow O(216N) \quad \text{vs} \quad |\mathcal{S}| = 10^6 \Rightarrow O(10^{12})

工程落地:从教练场到真马路

傍晚进了县城,韩叔把车停在路边,指着驾校方向笑:“你在教练场学的'入库三把轮',书上写得严丝合缝,真上了社会停车场,车位长短不一、旁边还有电线杆,哪能照搬?所以教练会在旁边教你怎么'简化'。量产车上跑决策规划,道理一模一样:论文里的全量模型,必须按芯片算力'打折'。”

从算法到量产,决策规划要过四道“工程适配”的关:模型简化——用线性化模型或低阶运动学模型替代非线性动力学模型,把求解时间压到几十毫秒;硬件加速——利用 CPU 多核并行或 NPU 专用算子,把优化求解“算得更快”;降级策略——当算力不足、感知置信度低或出现故障时,从“最优规划”降级到“保守跟车/靠边停车”,兜住安全底线;参数调优——在不同场景下反复整定代价函数里的权重,让车既不平庸也不激进。

这四道关里,最核心的一条安全红线是“刹得住”。决策规划生成的每一条候选轨迹,都必须满足一个物理上的安全距离约束——当前速度下,留出足以反应和刹停的距离:

韩叔说:“教练教我的是'标准动作',但真上路,标准动作要变成'能简则简、能快则快、不行就降级'的生存哲学。”车载算法也一样——先保证算得动、刹得住,再谈最优。

dsafe=v⋅treact+v22 amax⁡+d0d_{\text{safe}} = v \cdot t_{\text{react}} + \frac{v^2}{2\, a_{\max}} + d_0
这个公式是说:安全距离 = 反应时间内走过的距离 + 全力制动到停下的距离 + 最后保留的安全余量,三者缺一不可。
  1. 反应距离系统从发现危险到开始制动之间,车辆以当前速度继续行驶的距离。
    v⋅treactv \cdot t_{\text{react}}
  2. 制动距离从开始制动到完全停下所需的距离,速度越快,这段距离增长得越猛烈。
    v22amax⁡\frac{v^2}{2 a_{\max}}
  3. 安全余量停车后与前车或障碍物之间额外保留的间隙,用来对抗模型误差和突发状况。
    d0d_0

量产安全:不犯错才是硬道理

车子终于停进老家院子。小天熄了火,韩叔却没收住话头:“学了两种开法,只是会开车;真正让一台车敢坐上乘客的,是'不犯错'。老司机的安全带、后视镜、刹车习惯,全是冗余;自动驾驶的安全,靠的是冗余设计、仿真验证与合规认证三驾马车。”

冗余设计:感知、计算、执行三个环节都做备份,一套失效另一套立刻接管;仿真验证:在虚拟环境里跑数百万公里的极端场景,把现实中很难复现的“鬼探头”“加塞博弈”注入测试;安全合规:满足 ISO 26262 功能安全等标准,让每一次决策都可审计、可追溯。决策规划在这套体系里承担“安全兜底”角色——它输出的每条轨迹,都要能量化地证明风险可接受。

如何量化?把碰撞风险写成约束:对当前信念状态覆盖的所有可能场景,计算轨迹引发碰撞的概率,并要求它低于安全阈值。这个概率约束,就是把“安全”变成可计算的工程指标:

韩叔最后指了指仪表台上的行车记录仪:“真正的老司机还会'复盘'——每次遇到新情况,记录仪数据回传,算法工程师离线重放、改进模型、再丢回仿真验证。这个'路上发现问题—回传—迭代—再上路'的闭环,就是数据闭环。”决策规划系统正是在这样的闭环里,一代比一代更稳。

Pcollision=∑s∈SI[collide(τ,s)]⋅b(s)≤εP_{\text{collision}} = \sum_{s \in \mathcal{S}} \mathbb{I}\big[\text{collide}(\tau, s)\big] \cdot b(s) \le \varepsilon
这个式子是说:一条轨迹的碰撞概率,等于“每个可能场景下是否相撞”乘上“这个场景发生的概率”后求和,结果必须小于安全阈值 ε。
  1. 碰撞指示函数给定轨迹 τ 与某个可能场景 s,若会碰撞记 1,否则记 0。
    I[collide(τ,s)]∈{0,1}\mathbb{I}\big[\text{collide}(\tau, s)\big] \in \{0, 1\}
  2. 概率加权求和把所有可能场景按信念概率加权,得到整条轨迹的碰撞概率。
    ∑sI[⋅]⋅b(s)=Pcollision\sum_{s} \mathbb{I}[\cdot] \cdot b(s) = P_{\text{collision}}
  3. 安全阈值约束碰撞概率必须不大于 ε,否则该轨迹不允许执行。
    Pcollision≤εP_{\text{collision}} \le \varepsilon

AI 应用场景

城市领航辅助(NOA)的复杂路口博弈

阶段:决策规划(POMDP 分支)

解决的问题:传统规控在无保护左转、行人不确定过街等场景只能保守急刹或原地等待,通行效率低,且无法量化风险。POMDP 把行人过街意图、对向直行车是否礼让建模为信念状态,在“加速通过”“减速等待”“停车让行”之间计算期望风险最小且效率较高的动作,实现既安全又顺畅的博弈通行。

具体案例:某量产车在城市无信号灯路口左转时,系统通过视觉识别对向车的减速趋势,将“对方会让行”的信念概率从 0.3 更新到 0.75,随后平稳提速完成左转;若概率下降,则立即降级到停车等待。

高速公路巡航的 ACC+LKA 轨迹跟踪

阶段:决策规划(MPC 分支)

解决的问题:传统 PID 控制看到误差才纠正,过弯和上下坡时频繁超调、车身晃动,乘客容易晕车。MPC 利用前方道路曲率模型提前预测弯道所需的转向和加减速,在约束内平滑过渡,把“事后纠偏”变成“事前预判”。

具体案例:某车型的 ACC 系统在进入大曲率匝道前 200 米开始平滑减速并持续修正转向角,全程横向加速度波动比上一代 PID 方案降低约 40%,被用户评价为“有老司机的预判感”。

自动驾驶仿真验证(SIL 在环测试)

阶段:量产安全(仿真验证)

解决的问题:纯实车路测成本高、危险场景难以复现,无法证明系统在极端情况下的安全性。在虚拟仿真环境中注入鬼探头、雨天打滑、前方急刹等边缘场景,对决策规划模块做百万公里级回归测试,统计碰撞概率是否低于安全阈值。

具体案例:某自动驾驶公司在发布新版本规控前,在仿真平台上构造 1 万个 corner case,将 POMDP 决策模块在“遮挡行人”场景下的碰撞概率从 10⁻³ 压到 10⁻⁵ 以下,才进入实车验证。

Python 演示

python44 行
import math def kinematic_step(state, v, delta, dt=0.1):    """车辆运动学模型: 状态 (x, y, heading),控制量 delta 为前轮转角"""    x, y, heading = state    wheel_base = 2.5    yaw_rate = v * math.tan(delta) / wheel_base    return (x + v * math.cos(heading) * dt,            y + v * math.sin(heading) * dt,            heading + yaw_rate * dt) def reference_y(x):    """参考轨迹: 带弯曲的道路中心线"""    return math.sin(x * 0.4) * 2.0 def shooting_mpc(state, v, horizon=8, candidates=15, dt=0.1):    """简化 MPC: 生成多条候选转向序列, 用模型预演未来代价, 选最优并返回第一步"""    best_delta = 0.0    best_cost = float("inf")    for i in range(candidates):        delta = -0.6 + i * (1.2 / (candidates - 1))        sim = state        cost = 0.0        for k in range(horizon):            sim = kinematic_step(sim, v, delta, dt)            cost += (sim[1] - reference_y(sim[0])) ** 2        if cost < best_cost:            best_cost = cost            best_delta = delta    return best_delta def main():    state = (0.0, -1.0, 0.0)    speed = 3.0    for i in range(120):        delta = shooting_mpc(state, speed)        state = kinematic_step(state, speed, delta)        if i % 10 == 0:            err = state[1] - reference_y(state[0])            print("t={:5.1f}s x={:5.2f}m err={:6.3f}m delta={:+.3f}rad".format(                i * 0.1, state[0], err, delta)) if __name__ == "__main__":    main()
目的:用“候选转向序列采样 + 运动学模型预演 + 代价最小化”实现一个简化版 MPC,让一辆小车在正弦弯道参考线上滚动跟踪,展示“看远、预演、执行第一步”的核心思想。
  1. delta = -0.6 + i * (1.2 / (candidates - 1))生成一组候选方向盘转角,相当于韩叔在脑海中“试打”不同角度的方向。
  2. sim = kinematic_step(sim, v, delta, dt)用运动学模型把车辆状态往前推一步,这是 MPC 的“预测”环节。
  3. cost += (sim[1] - reference_y(sim[0])) ** 2累加横向偏差的平方作为代价,偏差越大代价越高。
  4. if cost < best_cost在候选动作里挑代价最小的,对应“滚动优化”中的最优选择。
  5. best_delta = delta记录当前最优转角,供本周期执行。
  6. delta = shooting_mpc(state, speed)每个控制周期重新求解,体现“只执行第一步、下一周期重算”。
  7. state = kinematic_step(state, speed, delta)执行第一步动作,系统推进到下一时刻。

常见误区

误区初学者把 MPC 看成“高级 PID”,觉得只要把 P、I、D 三个参数调得足够好,效果就和 MPC 差不多。

正解PID 是“响应式”控制——看到误差才动作,无法提前规避;MPC 是“前瞻式”控制——用模型预测未来 N 步,在约束下滚动优化。区别就像“看到弯道才急刹车”和“提前松油门入弯”,本质差异在于有没有预测模型和约束优化。

为何常见:两者都输出控制量,在简单场景下曲线很像,初学者只看到输入输出,忽略了内部完全不同的预测机制。

误区学了 POMDP 觉得它处理不确定性最完备,所有决策问题都应该用它来解。

正解POMDP 的理论完备性换来的是指数级计算量,实车上往往需要极大的简化近似,甚至退化成启发式策略。工程上“够用就行”:看得清的场景用 MPC 更划算,POMDP 只在关键不确定性场景(路口、遮挡)使用。

为何常见:论文里 POMDP 表现惊艳,但没强调计算成本;初学者容易把“理论最优”和“工程最优”混为一谈。

误区MPC 每步都要解优化问题,车载芯片算力弱,所以量产车只会用查表或简单 PID。

正解实际上,通过模型线性化、约束简化和硬件加速,简化版 MPC 已经广泛部署在量产车的 ACC、LKA 等系统中。关键是按芯片算力裁剪模型复杂度,让求解在几十毫秒内完成。

为何常见:只见过全量非线性 MPC 的论文实验,没接触过工程上的降级与裁剪做法。

误区MPC 靠模型预测,所以模型越贴近真实动力学,控制效果一定越好。

正解模型太复杂会增加求解耗时,且对噪声更敏感;实践中常用线性化模型或轮胎模型近似,配合鲁棒修正项,效果反而稳定。就像老司机不需要精确到厘米的物理公式,只需要“大概手感 + 随时修正”。

为何常见:直觉上觉得“模型准 = 预测准”,忽略了实时性和鲁棒性这两个工程维度。

面试题

Q1. MPC(模型预测控制)的核心思想是什么?

单选题 · easy

  • A.对所有历史数据做回归拟合
  • B.基于模型前瞻并滚动优化← 正确答案
  • C.只用当前误差做比例调节
  • D.随机搜索最优全局路径

答案:B。MPC 用预测模型预演未来 N 步,优化出控制序列后只执行第一步,下一个周期重新求解——就像晴天开车先看远路、走一步、再看一眼。A 是数据拟合方法,C 是 PID 思路,D 没有模型预测与滚动闭环。

Q2. 在 POMDP 中,信念状态(belief state)表示什么?

单选题 · easy

  • A.对系统真实状态的概率分布← 正确答案
  • B.对目标位置的距离描述
  • C.对传感器精度的等级划分
  • D.对地图路线的静态规划

答案:A。信念状态是 POMDP 的核心,它用概率分布描述“真实状态可能是什么”,像雾天开车时对前路的猜测——60% 直路、30% 有车、10% 有人。B、C、D 分别对应位置、传感器和地图,都不是概率化的状态认知。

Q3. MPC 与 PID 控制在本质上的区别是什么?

单选题 · mid

  • A.是否依赖预测模型做前瞻← 正确答案
  • B.是否使用比例积分微分
  • C.是否要求传感器高精度
  • D.是否支持多目标跟踪

答案:A。PID 是反应式控制——看到误差才出手;MPC 是前瞻式控制——用模型预测未来再滚动优化,差别就像“看到弯道才急刹车”和“提前松油门入弯”。B 是 PID 的手段,C 不是两者本质区别,D 属于感知跟踪概念。

Q4. POMDP 求解困难、常说的“维度爆炸”主要指什么?

单选题 · mid

  • A.状态观测历史组合指数增加← 正确答案
  • B.传感器数据量过大无法存储
  • C.地图分辨率过高存储不足
  • D.交通参与者增多导致拥堵

答案:A。POMDP 的信念状态是连续分布,每一步还要对所有状态、观测、历史组合求期望,复杂度呈指数级增长——就像雾天每多一个“看不清的东西”,猜测组合就翻倍。B、C 是存储问题,D 是交通拥堵,都不是算法复杂度来源。

Q5. MPC 的代价函数通常由哪些项构成?

多选题 · mid

  • A.跟踪参考轨迹的偏差惩罚← 正确答案
  • B.控制输入幅值大小的惩罚← 正确答案
  • C.违反物理约束条件的惩罚← 正确答案
  • D.历史数据拟合误差的惩罚

答案:ABC。MPC 代价函数的核心是“既要贴得近(跟踪偏差)、又要开得稳(控制量小)、还要不越界(约束惩罚)”,三者加权求和。D 的历史数据拟合是离线辨识模型的工作,不属于在线滚动优化的代价项。

Q6. 决策规划模块在自动驾驶系统中位于什么位置?

单选题 · easy

  • A.感知之后、控制之前← 正确答案
  • B.传感器标定的前期准备
  • C.云端大模型的数据标注
  • D.硬件底座的电源管理

答案:A。自动驾驶链条是“感知→预测→决策规划→控制”。决策规划吃进感知和预测的信息,输出轨迹交给控制执行,是名副其实的“承上启下”指挥官。B、C、D 分别属于传感器、数据与底座的职责,均不涉及轨迹决策。

Q7. MPC 中“滚动优化”的含义是什么?

单选题 · mid

  • A.每个控制周期重新求解优化问题← 正确答案
  • B.只离线计算一次控制策略
  • C.随机挑选一组控制动作
  • D.冻结模型参数不再更新

答案:A。滚动优化是指每个控制周期都基于最新状态重新求解未来 N 步的优化问题,只执行第一步,然后推进一个周期再重解——正如晴天开车“走一步、看一眼、再算一次”。B 是一次性离线求解,C、D 都不是闭环迭代。

Q8. 让 MPC 在车载芯片上实时运行的工程手段有哪些?

多选题 · hard

  • A.用线性模型近似车辆动力学← 正确答案
  • B.置信度低时启动降级策略← 正确答案
  • C.用 GPU 集群训练预测大模型
  • D.离线预计算部分优化结果← 正确答案

答案:ABD。车载部署的核心是“算得快、兜得住”:线性化降低求解耗时(A),降级策略保证算力不足时安全(B),离线预计算把部分求解结果提前准备(D)。C 是离线训练环节,与车载实时求解的工程手段无关。

Q9. POMDP 相比 MDP 最关键的扩展是什么?

单选题 · hard

  • A.状态不可直接观测、需信念状态← 正确答案
  • B.动作空间被彻底离散化
  • C.奖励函数必须为常数
  • D.状态转移完全确定性

答案:A。MDP 假设状态可见,POMDP 放宽为“不可直接观测,只能用信念状态刻画”,这是两者最根本的分野。B 是工程上的离散化手段,C、D 反而把问题变得更简单,与 POMDP 的扩展方向相反。

Q10. 关于 POMDP 信念状态的更新,下列说法正确的有?

多选题 · extreme

  • A.用贝叶斯公式融合新的观测← 正确答案
  • B.观测越丰富,信念状态越集中← 正确答案
  • C.更新后概率总和保持为一← 正确答案
  • D.更新过程不需要任何模型

答案:ABC。信念更新是“预测 + 修正 + 归一化”三步:先由状态转移模型预测(需要模型,D 错),再用观测似然加权(贝叶斯公式,A 对),最后归一化保证和为 1(C 对)。新观测不断消除不确定性,分布由分散变集中(B 对),就像雾天看得越清楚,猜测越笃定。