图片来自网络
摄影|网络
#1 QP 背景
百度阿波罗规模模块的EM规划器用到了DP(动态规划)、QP(二次规划)对路径和速度进行规划,QP是求解问题的核心。
阿波罗源代码中用osqp进行轨迹平滑计算等
#2 QP 介绍
我们先看看QP问题的通用形式,标准的QP问题可以表示如下:
X是一个向量,可展开表示为X1,...,Xn。P 和 q 是定义了目标函数。由于目标函数中有平方(二次项),这个问题就是一个标准的二次规划问题。 (G,h) 和(A,b) 分别代表了问题的不等式约束和等式约束,他们都是矩阵的形式表示的,展开就和X类似。
上述问题可以理解成在线性集上找到变量有平方项的目标函数的最小值,反应在图上就是:
QP 2D图示
高中数学学过,两个变量的二次项组成的是椭圆 (x^2)/(a^2)+(y^2)/(a^2)=1,那虚线代表的是目标函数的等高线,浅蓝色代表的就是不等式约束围起来的可行域空间。那些在最优解 x* 处成立的不等式集合称为有效集(active set),这也意味着在最优解处有些不等式可能恒成立,不需要关心。
有效集其实就是单纯型的升级版,单纯型说线性问题的最优解在可行域的边界上,单纯型法就是不断出基、入基,在边界上移动去找到最优点。
到二次规划 - 非线性里面,虽然约束围起来的多边体边上不一定是最优解(Wikipedia)。但是如果知道最优点处的有效集,对于那些恒成立的不等式可以直接删掉,那么约束中就只有等式约束了,等式约束相对于不等式约束是更容易搜索求解的。
#3 QP 例子
考虑一个简单的例子
Minimize 2 x^2 +y^2 +xy +x +y
Subject to - x < 0
- y < 0
x + y = 1
在Python中 可以使用 cvxopt求解,得到结果如下。
Optimal solution found.
x
[ 2.50e-01]
[ 7.50e-01]
这里使用SCIP求解(https://scipopt.org/),SCIP基于C语言开发,可以求解很多不同的问题,线性、非线性都可以求解,而且其好处是求解速度快,可以并行处理,代码开源,不用花钱购买。其求解结果如下:
SCIP 7.0 下求解结果
对于SCIP的下载安装以及求解的好处,我们后续安排。
感兴趣,可以关注公众号elegantcoin,接受更多消息