4. 速度约束的数学表达:线性不等式约束、非线性约束、凸约束与非凸约束

速度约束,说白了就是告诉自动驾驶系统:“你最快只能跑这么快,最慢不能低于这个值。” 听起来简单,但真要写成数学公式,让计算机去理解,这里面的门道可不少。

我个人习惯把速度约束分成两大类来理解:一类是“直来直去”的约束,另一类是“弯弯绕绕”的约束。前者对应线性不等式,后者对应非线性。而凸与非凸,则是从优化求解的难度角度去划分的。咱们一个一个来拆解。

4.1 线性不等式约束:最直白的“限速牌”

线性不等式约束,就是那种“速度不能超过某个固定值”的约束。你想想看,城市道路限速60 km/h,这就是一个典型的线性不等式。

数学上写出来很简单:

v_min ≤ v ≤ v_max

其中 v 是车辆的速度,v_min 和 v_max 是常数。在优化问题里,这种约束写成矩阵形式就是:

A * v ≤ b

这里的 A 和 b 都是已知的常数矩阵和向量。为什么叫“线性”?因为速度 v 的系数都是常数,没有 v² 或者 sin(v) 这种复杂项。

关键点:线性不等式约束的可行域是一个凸集。什么意思?就是任意两个可行速度点连成的线段,上面的每一个点也都是可行的。这个性质对优化求解非常友好。

我在项目中遇到过一个问题:有人把所有的限速都当成线性约束来处理,结果在弯道场景下出了问题。为什么?因为弯道限速其实跟曲率有关,而曲率本身不是线性的。嗯,这里要注意,线性约束只适用于那些与车辆状态无关的固定限速。

4.2 非线性约束:弯道、湿滑路面与动态限速

非线性约束就复杂多了。它通常跟车辆的状态、道路的几何形状、甚至天气条件有关。

举个例子,弯道限速。车辆在弯道中能安全通过的最大速度,取决于弯道的曲率 κ 和路面摩擦系数 μ:

v_max ≤ sqrt(μ * g / |κ|)

这里面有开方,有除法,还有曲率 κ 这个变量。曲率本身又是道路位置的函数,可能是非线性的。这就构成了一个典型的非线性约束。

再比如,跟车场景下的速度约束。前车突然刹车,你的速度必须满足:

v_ego ≤ v_lead + sqrt(2 * a_max * d_safe)

这里面有平方根,有前车速度 v_lead,还有安全距离 d_safe。这些变量之间不是简单的线性关系。

我的经验:处理非线性约束时,我建议先画个图。把约束的边界画出来,看看它长什么样。是凸的还是非凸的?这直接决定了你用什么求解器。

4.3 凸约束 vs 非凸约束:求解难度的分水岭

凸约束和非凸约束的区别,说白了就是“好解”和“难解”的区别。

凸约束:可行域是凸集。线性不等式约束是凸的,某些非线性约束(比如上面提到的弯道限速,在特定条件下)也是凸的。凸约束的好处是:局部最优解就是全局最优解。你不用担心陷入局部陷阱。

非凸约束:可行域不是凸集。比如,某些避障场景下的速度约束,或者带有“禁止速度区间”的约束(速度不能落在 [20, 30] km/h 这个区间内)。非凸约束的优化问题,求解起来要麻烦得多,通常需要全局优化算法或者启发式方法。

约束类型 数学形式 凸性 求解难度 典型场景
线性不等式 v_min ≤ v ≤ v_max 凸 容易 固定限速路段
非线性(凸) v ≤ sqrt(μ*g/|κ|) 凸(特定条件下) 中等 弯道限速
非线性(非凸) v ∉ [20, 30] 非凸 困难 禁止速度区间

避坑指南:我曾经把一个非凸约束当成凸约束来处理,用了标准的二次规划求解器。结果求解器一直报错,或者给出明显不合理的解。后来才发现,问题出在约束的非凸性上。从那以后,我每次建模都会先检查约束的凸性。

4.4 知识体系:速度约束的分类与关系

下面这张图,是我自己总结的速度约束分类体系。它把线性/非线性、凸/非凸这四类约束的关系,以及它们在实际场景中的应用,都串在了一起。

速度约束分类体系 速度约束 线性不等式约束 非线性约束 凸约束 非凸约束 固定限速、速度上下界 求解容易,全局最优 弯道限速、禁止速度区间 求解困难,需全局优化 特定条件下

从这张图可以看得很清楚:线性不等式约束一定是凸的,而非线性约束则可能是凸的,也可能是非凸的。我个人习惯在建模初期,先判断约束的凸性,再决定用哪种优化算法。

4.5 实际建模中的选择策略

在实际项目中,我一般遵循这样的策略:

  1. 优先使用线性约束:如果问题允许,尽量把约束简化成线性形式。求解速度快,稳定性好。
  2. 非线性约束尽量凸化:通过变量替换或松弛,把非凸约束转化为凸约束。比如,用 v² 代替 v,有时候就能把非凸问题变成凸问题。
  3. 实在不行再用非凸优化:如果约束天生就是非凸的,那就得用全局优化算法了。但要做好心理准备,求解时间可能会长很多。

一个小技巧:当你面对一个复杂的非线性约束时,先问问自己:“这个约束能不能分段线性化?” 如果能,那就把它拆成几个线性约束的组合。虽然约束数量变多了,但求解难度会大幅下降。

好了,关于速度约束的数学表达,咱们就聊到这里。记住一句话:约束越简单,求解越轻松;约束越复杂,效果可能越好,但代价也越大。怎么取舍,就看你的具体需求了。

可可精品资料库