第四节:凸优化基础——速度规划的核心数学工具

各位同学好,我是你们的老朋友。今天我们来聊聊凸优化。说实话,我刚入行时觉得这玩意儿就是数学家的玩具,跟工程实践八竿子打不着。直到有一次,我在做城市道路的速度规划,遇到一个非凸问题,求解器跑了半天不收敛,最后车辆差点撞上路沿……嗯,从那以后,我再也不敢小看凸优化了。

什么是凸优化?

凸优化,说白了就是一类特殊的优化问题。它的特点是:目标函数是凸函数,约束条件构成的集合是凸集。

为什么叫“凸”?你想象一个碗的形状,碗的内侧就是凸的。或者更形象一点——你往地上扔一个弹珠,它最终会滚到碗底的最低点。这个最低点就是全局最优解。非凸问题就像是一个凹凸不平的锅底,弹珠可能卡在某个小坑里,永远到不了真正的最低点。

我在项目中遇到过这样一个场景:做路径规划时,目标函数是非凸的,结果每次跑出来的轨迹都不一样,有时候好有时候差。后来改成凸优化建模,结果稳定多了,求解时间也从几百毫秒降到了几十毫秒。

核心要点:凸优化保证任何局部最优解就是全局最优解。这是它最迷人的地方。

凸集与凸函数

先说说凸集。一个集合是凸的,当且仅当集合内任意两点的连线,整条线段都在集合内部。

举个例子:一个圆盘是凸集,一个哑铃形状就不是。为什么?因为哑铃中间细,两端的点连线会穿过外部区域。

再来看凸函数。一个函数是凸的,当且仅当函数图像上任意两点的连线,都在函数图像的上方。

我习惯用二阶导数来判断:如果二阶导数恒大于等于0,那函数就是凸的。比如 f(x)=x² 是凸的,f(x)=sin(x) 就不是。

类型 定义 例子
凸集 任意两点连线在集合内 超平面、多面体、球
凸函数 二阶导数 ≥ 0 二次函数、指数函数

避坑指南:我曾经以为所有二次函数都是凸的,结果发现 f(x)= -x² 是凹函数。判断时一定要看二次项系数的正负。

线性规划(LP)与二次规划(QP)简介

线性规划是最简单的凸优化问题。目标函数和约束条件都是线性的。说白了就是在一堆直线围成的区域里,找一个点让某个线性表达式最大或最小。

举个例子:你要在限速范围内,找一个速度让行驶时间最短。限速是线性约束,时间是速度的线性函数(距离固定时)。这就是一个LP问题。

# 一个简单的LP例子
# 目标:最小化 f(x) = 3x1 + 2x2
# 约束:x1 + x2 ≥ 4
#       2x1 + x2 ≤ 8
#       x1 ≥ 0, x2 ≥ 0

二次规划稍微复杂一点。目标函数是二次的,约束是线性的。比如你要在限速范围内,找一个速度让加速度变化最小。加速度变化是速度的二次函数,这就是QP问题。

我建议你在速度规划中优先考虑QP。为什么?因为LP只能处理线性关系,而速度规划中很多目标(如舒适性、能耗)都是非线性的,用二次函数拟合效果更好。

类型 目标函数 约束条件 求解难度
LP 线性 线性 极低
QP 二次 线性 低

为什么凸优化适合速度规划?

你想想看,速度规划本质上是在做什么?是在满足各种约束(限速、加速度限制、舒适性要求)的前提下,找一条最优的速度曲线。

这些约束条件,比如速度不能超过某个值、加速度不能超过某个范围,都是线性约束,构成的是凸集。目标函数,比如最小化加速度变化率、最小化能耗,通常可以建模成凸函数。

所以速度规划天然适合用凸优化来求解。我做过一个项目,用凸优化做速度规划,求解时间稳定在10毫秒以内,而且每次都能找到全局最优解。换成非凸方法,求解时间波动很大,有时候要几百毫秒,而且结果不稳定。

注意:不是所有速度规划问题都是凸的。比如考虑障碍物避让时,如果障碍物位置不确定,约束可能变成非凸的。这时候需要做一些近似处理,把问题转化成凸优化。

我个人总结了几点凸优化在速度规划中的优势:

  • 全局最优:不会陷入局部最优,保证找到最好的速度曲线
  • 求解高效:有成熟的求解器,计算速度快
  • 稳定性好:输入微小变化,输出也只会微小变化,不会出现跳变
  • 易于调试:如果结果不对,很容易找到是哪个约束出了问题

我曾经踩过一个坑:用非凸优化做速度规划,结果在高速场景下,求解器偶尔会给出一个急加速再急减速的方案,虽然数学上可行,但实际驾驶体验极差。换成凸优化后,这种问题再也没出现过。

凸优化在速度规划中的应用框架 输入 道路信息、车辆状态 凸优化建模 凸目标函数 + 凸约束 LP / QP 问题 凸优化求解器 内点法 / 有效集法 输出 最优速度曲线 约束条件 限速、加速度限制 舒适性、能耗约束

这张图展示了凸优化在速度规划中的完整流程。从输入道路信息和车辆状态开始,经过凸优化建模(确定目标函数和约束条件),然后交给求解器求解,最终输出最优速度曲线。约束条件会反馈到建模环节,形成一个闭环。

好了,关于凸优化的基础就讲到这里。记住一句话:能用凸优化解决的问题,尽量用凸优化。它会让你的代码更稳定、更高效、更容易维护。

核心总结:凸优化 = 凸目标函数 + 凸约束条件 → 全局最优解。LP和QP是两种最常用的凸优化形式,速度规划中优先考虑QP。

可可精品资料库