二次规划问题(Quadratic Programming, QP)

二次规划问题(Quadratic Programming, QP) 从直观理解到数学定义、例子、应用场景等都讲一遍。

一、什么是二次规划

二次规划(Quadratic Programming)是一类 目标函数是二次函数、但 约束是线性 的优化问题。

可以理解为:

“在线性约束条件下,找到一个变量组合,使一个二次函数取得最小(或最大)值”。

二、数学形式

标准形式如下:

\[ \begin{aligned} &\min_{x \in \mathbb{R}^n} \quad \frac{1}{2} x^T Q x + c^T x \\ &\text{subject to:} \\ &\quad A x \le b \\ &\quad E x = d \end{aligned} \]

其中:

  • \(x \in \mathbb{R}^n\):决策变量向量
  • \(Q \in \mathbb{R}^{n \times n}\)对称正定或半正定矩阵(对应目标函数的“二次项”)
  • \(c \in \mathbb{R}^n\):线性项系数
  • \(A \in \mathbb{R}^{m \times n}, b \in \mathbb{R}^m\):不等式约束
  • \(E \in \mathbb{R}^{p \times n}, d \in \mathbb{R}^p\):等式约束

三、图像直观

如果你只考虑二维的情况(\(x \in \mathbb{R}^2\)),那么:

  • 目标函数 \(\frac{1}{2}x^T Qx + c^T x\) 是一个“碗状”或“马鞍形”曲面(取决于 \(Q\)
  • 约束构成一个多边形区域(线性不等式的交)
  • 二次规划的目标就是:在这个线性区域中,找到曲面最低点

四、例子

例子:投资组合优化(Markowitz)

有3个资产,期望收益为 \(r\),协方差矩阵为 \(\Sigma\),目标是在固定收益水平下最小化风险(方差):

\[ \begin{aligned} & \min_{w} \quad \frac{1}{2} w^T \Sigma w \\ & \text{subject to:} \quad r^T w \ge R_0 \\ & \quad \mathbf{1}^T w = 1, \quad w \ge 0 \end{aligned} \]

其中 \(w\) 是投资权重,\(R_0\) 是期望最低收益。

这个就是典型的 二次规划问题

五、特殊情况:与线性规划的关系

  • \(Q = 0\) 时,目标函数退化为线性,变成线性规划(LP)
  • \(Q \succ 0\)(正定),问题是凸优化问题,可以找到全局最优解

六、常用求解器

  • Python:
    • cvxpy, quadprog, scipy.optimize.minimize(带 'trust-constr' 方法)
  • MATLAB:
    • quadprog
  • R:
    • quadprog

七、应用场景

场景 描述
投资组合优化 在收益约束下最小化风险
支持向量机 最大间隔分类器中出现二次项
工业控制 模型预测控制(MPC)中的控制量优化
资源分配 有二次成本函数的工程优化问题

八、总结一句话:

二次规划 = 二次目标函数 + 线性约束 + 有限维变量空间的凸优化问题。

它是很多机器学习、工程、金融优化问题的核心工具之一。