QP 问题(Quadratic Programming, 二次规划)是什么?
QP(Quadratic Programming,二次规划)是一类优化问题,其中目标函数是二次型函数,约束条件可以是线性等式或不等式。
QP 问题是线性规划(LP,Linear Programming)的扩展形式,广泛应用于最优控制、机器学习、金融优化、信号处理等领域。
🚩 一、QP 问题的数学定义
标准形式的 QP 问题如下:
min
x
1
2
x
T
Q
x
+
c
T
x
\min_{x} \quad \frac{1}{2} x^T Q x + c^T x
xmin21xTQx+cTx
s.t. A x ≤ b , E x = d \text{s.t.} \quad Ax \leq b, \quad Ex = d s.t.Ax≤b,Ex=d
其中:
- 变量: x ∈ R n x \in \mathbb{R}^n x∈Rn(优化变量)
- 目标函数:
- Q Q Q 是 n × n n \times n n×n 对称矩阵(当 Q Q Q 是正定时,问题是凸的)
- c c c 是 n n n-维向量(线性项)
- 约束:
- A x ≤ b Ax \leq b Ax≤b(线性不等式约束,约束变量取值范围)
- E x = d Ex = d Ex=d(线性等式约束)
🚩 二、QP 问题的分类
1. 线性二次规划(Convex QP)
- 如果矩阵 Q Q Q正定( Q ≻ 0 Q \succ 0 Q≻0),则问题是凸优化问题,可以用梯度下降、KKT 条件、内点法(Interior Point Method)等方法求解。
- 应用:
- 机器人轨迹优化(无人机规划)
- 预测控制(Model Predictive Control, MPC)
- 机器学习(SVM 分类)
2. 非凸二次规划(Non-convex QP)
- 如果 ( Q ) 非正定(可能有负特征值),则问题可能有多个局部最优解,求解更复杂,需要启发式方法或全局优化方法。
- 应用:
- 经济学中的投资组合优化
- 结构优化(力学系统)
3. 约束二次规划
- 约束类型:
- 仅等式约束(Equality Constrained QP, EQP)
- 仅不等式约束
- 混合等式/不等式约束
- 应用:
- 机器学习中的拉格朗日对偶(Lagrange Duality)
- 约束最优控制(MPC)
🚩 三、QP 问题的求解方法
1. KKT 条件(Karush-Kuhn-Tucker 条件)
QP 问题满足 KKT 条件,其最优解满足:
Q x + c + A T λ + E T μ = 0 , A x − b ≤ 0 , λ ≥ 0 , E x − d = 0 , (等式约束) \begin{aligned} Qx + c + A^T \lambda + E^T \mu &= 0, \\ Ax - b &\leq 0, \quad \lambda \geq 0, \\ Ex - d &= 0, \quad \text{(等式约束)} \end{aligned} Qx+c+ATλ+ETμAx−bEx−d=0,≤0,λ≥0,=0,(等式约束)
其中:
- λ \lambda λ 是不等式约束的拉格朗日乘子
- μ \mu μ 是等式约束的拉格朗日乘子
如果 ( Q \succ 0 )(正定),则 KKT 方程是一个线性方程组,可以直接求解最优解。
2. 内点法(Interior Point Method)
- 适用于大规模 QP 问题,收敛快。
- 常用于最优控制(MPC)和机器学习(SVM)。
3. 主动集法(Active Set Method)
- 适用于小规模 QP 问题。
- 适合处理约束随时间变化的情况,如实时轨迹优化。
4. 梯度投影法(Projected Gradient Descent)
- 适用于大规模约束 QP 问题,如约束神经网络训练。
🚩 四、QP 在强化学习、控制和无人机中的应用
1. 在最优控制(MPC, Model Predictive Control)中的应用
在 MPC(模型预测控制)中,每个时刻求解一个 QP 问题,以计算最优控制输入:
min
u
∑
t
=
0
T
(
x
t
T
Q
x
t
+
u
t
T
R
u
t
)
\min_u \quad \sum_{t=0}^{T} \left( x_t^T Q x_t + u_t^T R u_t \right)
umint=0∑T(xtTQxt+utTRut)
s.t.
x
t
+
1
=
A
x
t
+
B
u
t
,
x
t
∈
X
,
u
t
∈
U
\text{s.t.} \quad x_{t+1} = A x_t + B u_t, \quad x_t \in X, \quad u_t \in U
s.t.xt+1=Axt+But,xt∈X,ut∈U
这里的 QP 优化保证:
- 控制输入 u t u_t ut 平滑变化
- 轨迹在约束范围内
2. 机器人运动规划(Quadratic Trajectory Optimization)
无人机或机械臂轨迹规划:
min
x
∑
t
=
1
T
(
x
t
−
x
target
)
T
Q
(
x
t
−
x
target
)
\min_x \quad \sum_{t=1}^{T} (x_t - x_{\text{target}})^T Q (x_t - x_{\text{target}})
xmint=1∑T(xt−xtarget)TQ(xt−xtarget)
s.t.
x
t
+
1
=
f
(
x
t
,
u
t
)
,
x
min
≤
x
t
≤
x
max
\text{s.t.} \quad x_{t+1} = f(x_t, u_t), \quad x_{\text{min}} \leq x_t \leq x_{\text{max}}
s.t.xt+1=f(xt,ut),xmin≤xt≤xmax
3. 机器学习(支持向量机 SVM)
SVM 的优化问题:
min
w
1
2
w
T
w
\min_w \quad \frac{1}{2} w^T w
wmin21wTw
s.t.
y
i
(
w
T
x
i
+
b
)
≥
1
,
∀
i
\text{s.t.} \quad y_i (w^T x_i + b) \geq 1, \forall i
s.t.yi(wTxi+b)≥1,∀i
这个优化问题也是一个 QP 问题,使用拉格朗日乘子法求解。
🚩 五、QP 和 DP(动态规划)的关系
1. 经典 QP vs DP
特性 | QP (Quadratic Programming) | DP (Dynamic Programming) |
---|---|---|
目标函数 | 二次型函数 | 递归求解最优策略 |
约束 | 线性等式/不等式 | 无约束(或通过贝尔曼方程处理) |
求解方法 | KKT, 内点法, 主动集法 | 递归求解, 迭代法 |
适用领域 | 最优控制、金融优化 | 强化学习、最优轨迹 |
2. QP 在 DP 问题中的应用
在动态规划(DP)问题中,某些最优控制问题(如LQR, MPC)的子问题可以转化为 QP 问题:
-
LQR(线性二次调节):
- 线性系统 + 二次成本 → QP 问题
- 通过求解里卡提方程得到最优反馈控制律
-
MPC(模型预测控制):
- 每个时刻求解一个 QP 问题,计算最优控制输入 u t u_t ut
- 确保控制输入平稳变化,满足状态/输入约束
🚩 六、总结
- QP(Quadratic Programming,二次规划) 是优化问题的一种特殊形式,目标函数为二次型,约束为线性等式或不等式。
- QP 的求解方法:KKT条件、内点法、主动集法、梯度投影法等。
- QP 在最优控制、机器学习、金融优化等领域广泛应用,特别是在MPC、LQR、轨迹优化、SVM等问题中。
在强化学习和最优控制研究中,掌握QP 和 DP的关系非常重要,可以帮助解决 连续控制问题(如无人机轨迹规划) 和 最优决策问题 。
例子 🚀 以 MPC 控制无人机为例,详细解析 QP 求解过程
模型预测控制(Model Predictive Control, MPC) 是一种基于最优控制理论的方法,它在每个时间步求解一个**二次规划(QP, Quadratic Programming)**问题,以获得最优控制输入。
在本例中,我们详细解析 MPC 控制无人机的 QP 求解过程,从建模到求解的每个步骤。
📌 1. 建立无人机的动态模型
假设无人机是一个简单的线性离散系统,状态变量 x t x_t xt 和控制输入 u t u_t ut 满足:
x t + 1 = A x t + B u t x_{t+1} = A x_t + B u_t xt+1=Axt+But
其中:
-
状态 (x_t):无人机的二维位置和速度(简化版)
x t = [ p x , p y , v x , v y ] T x_t = [p_x, p_y, v_x, v_y]^T xt=[px,py,vx,vy]T- p x , p y p_x, p_y px,py:位置
- v x , v y v_x, v_y vx,vy:速度
-
控制输入 (u_t):加速度输入
u t = [ a x , a y ] T u_t = [a_x, a_y]^T ut=[ax,ay]T- ( a_x, a_y ):无人机在 x 和 y 方向的加速度
-
系统动力学矩阵(离散化):
A = [ 1 0 d t 0 0 1 0 d t 0 0 1 0 0 0 0 1 ] , B = [ 0 0 0 0 d t 0 0 d t ] A = \begin{bmatrix} 1 & 0 & dt & 0 \\ 0 & 1 & 0 & dt \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}, \quad B = \begin{bmatrix} 0 & 0 \\ 0 & 0 \\ dt & 0 \\ 0 & dt \end{bmatrix} A= 10000100dt0100dt01 ,B= 00dt0000dt
其中 ( dt ) 是时间步长(离散化时间间隔)。
📌 2. 设定 MPC 的优化目标
MPC 通过优化 未来 ( N ) 步内的轨迹,生成最优控制输入 ( u_t )。
优化目标:
J
=
∑
t
=
0
N
−
1
(
(
x
t
−
x
ref
)
T
Q
(
x
t
−
x
ref
)
+
u
t
T
R
u
t
)
J = \sum_{t=0}^{N-1} \left( (x_t - x_{\text{ref}})^T Q (x_t - x_{\text{ref}}) + u_t^T R u_t \right)
J=t=0∑N−1((xt−xref)TQ(xt−xref)+utTRut)
- ( x_{\text{ref}} ):期望的轨迹(目标点)
- ( Q ):状态误差的权重(鼓励轨迹跟踪)
- ( R ):控制输入的权重(防止过大加速度)
约束条件:
x
t
+
1
=
A
x
t
+
B
u
t
x_{t+1} = A x_t + B u_t
xt+1=Axt+But
u
min
≤
u
t
≤
u
max
u_{\min} \leq u_t \leq u_{\max}
umin≤ut≤umax
x
min
≤
x
t
≤
x
max
x_{\min} \leq x_t \leq x_{\max}
xmin≤xt≤xmax
其中:
- ( u_{\min}, u_{\max} ) 限制无人机最大加速度
- ( x_{\min}, x_{\max} ) 限制无人机运动范围
📌 3. 将 MPC 问题转换为标准 QP 问题
MPC 需要预测未来 ( N ) 步的状态,并优化控制输入。为此,我们展开状态方程 预测整个时间窗内的状态演化。
(1)构造状态预测矩阵
对 整个预测时间窗 (N),我们将状态方程展开为矩阵形式:
X = A x 0 + B U X = \mathcal{A} x_0 + \mathcal{B} U X=Ax0+BU
其中:
-
状态向量(合并整个时间窗):
X = [ x 1 x 2 ⋮ x N ] , U = [ u 0 u 1 ⋮ u N − 1 ] X = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_N \end{bmatrix}, \quad U = \begin{bmatrix} u_0 \\ u_1 \\ \vdots \\ u_{N-1} \end{bmatrix} X= x1x2⋮xN ,U= u0u1⋮uN−1 -
状态转移矩阵:
A = [ A A 2 ⋮ A N ] \mathcal{A} = \begin{bmatrix} A \\ A^2 \\ \vdots \\ A^N \end{bmatrix} A= AA2⋮AN -
控制影响矩阵:
B = [ B 0 0 … 0 A B B 0 … 0 A 2 B A B B … 0 ⋮ ⋮ ⋮ ⋱ ⋮ A N − 1 B A N − 2 B A N − 3 B … B ] \mathcal{B} = \begin{bmatrix} B & 0 & 0 & \dots & 0 \\ A B & B & 0 & \dots & 0 \\ A^2 B & A B & B & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ A^{N-1} B & A^{N-2} B & A^{N-3} B & \dots & B \end{bmatrix} B= BABA2B⋮AN−1B0BAB⋮AN−2B00B⋮AN−3B………⋱…000⋮B
最终预测模型:
X
=
A
x
0
+
B
U
X = \mathcal{A} x_0 + \mathcal{B} U
X=Ax0+BU
(2)将目标函数转化为 QP 形式
J
=
(
X
−
X
ref
)
T
Q
(
X
−
X
ref
)
+
U
T
R
U
J = (X - X_{\text{ref}})^T Q (X - X_{\text{ref}}) + U^T R U
J=(X−Xref)TQ(X−Xref)+UTRU
代入状态预测矩阵 ( X = \mathcal{A} x_0 + \mathcal{B} U ):
J = ( A x 0 + B U − X ref ) T Q ( A x 0 + B U − X ref ) + U T R U J = (\mathcal{A} x_0 + \mathcal{B} U - X_{\text{ref}})^T Q (\mathcal{A} x_0 + \mathcal{B} U - X_{\text{ref}}) + U^T R U J=(Ax0+BU−Xref)TQ(Ax0+BU−Xref)+UTRU
展开并整理得:
J
=
U
T
(
B
T
Q
B
+
R
)
U
+
2
U
T
B
T
Q
(
A
x
0
−
X
ref
)
+
(
A
x
0
−
X
ref
)
T
Q
(
A
x
0
−
X
ref
)
J = U^T (\mathcal{B}^T Q \mathcal{B} + R) U + 2 U^T \mathcal{B}^T Q (\mathcal{A} x_0 - X_{\text{ref}}) + (\mathcal{A} x_0 - X_{\text{ref}})^T Q (\mathcal{A} x_0 - X_{\text{ref}})
J=UT(BTQB+R)U+2UTBTQ(Ax0−Xref)+(Ax0−Xref)TQ(Ax0−Xref)
最终标准 QP 形式:
min U 1 2 U T H U + f T U \min_U \quad \frac{1}{2} U^T H U + f^T U Umin21UTHU+fTU
其中:
- Hessian 矩阵(正定矩阵):
H = B T Q B + R H = \mathcal{B}^T Q \mathcal{B} + R H=BTQB+R - 线性项:
f = B T Q ( A x 0 − X ref ) f = \mathcal{B}^T Q (\mathcal{A} x_0 - X_{\text{ref}}) f=BTQ(Ax0−Xref)
约束条件变为:
- 控制输入约束:
U min ≤ U ≤ U max U_{\min} \leq U \leq U_{\max} Umin≤U≤Umax - 状态约束:
X min ≤ X ≤ X max X_{\min} \leq X \leq X_{\max} Xmin≤X≤Xmax
📌 4. 使用 QP 求解器计算最优控制输入
(1)QP 求解方法
MPC 需要每个时间步求解 QP 问题,求解方法包括:
- 内点法(Interior Point Method):适用于大规模 QP 问题
- 主动集法(Active Set Method):适用于小规模问题
- 梯度投影法(Projected Gradient Descent):适用于约束优化
(2)求解步骤
- 构造 QP 矩阵 H , f H, f H,f
- 设定约束条件
- 调用 QP 求解器(如 OSQP, quadprog, CVXPY)
- 获得最优控制输入 U ∗ U^* U∗
- 执行第一个控制步 u 0 u_0 u0,并进入下一时间步
🚀 5. 总结
- MPC 通过求解 QP 问题获得最优控制输入,每个时间步优化未来 (N) 步的轨迹。
- QP 通过二次优化目标+线性约束求解,最终转换为标准凸优化问题。
- QP 求解方法(内点法、主动集法)可高效求解控制问题,在无人机轨迹规划、自主导航、自动驾驶等领域广泛应用。
MPC + QP 是现代最优控制的核心技术之一,也是强化学习、控制系统研究的重要基础。🚀🚀🚀