概述
本文将探究一个被称为二次规划的优化问题,这是一种特殊形式的非线性约束优化问题。二次规划在许多领域都有运用,比如投资组合优化、求解支持向量机(SVM)分类问题等。在R中求解二次规划有许多包,这次,我们将讨论一下quadprog
包。在我们开始讲解案例之前,我们将先简短地介绍一下二次规划的机理。
什么是二次规划
对于一个二次规划问题,首先要考虑的就是一个二次目标函数:$$ Q(x) = \frac{1}{2} x^T D x - d^T x + c. $$
这里 \(x\) 在 \(\mathbb{R}^n\) 中是一个向量, \(D\) 是一个\(n \times n\) 的对称正定矩阵,在 \(\mathbb{R}^n\) 中 \(d\) 是常数项约束,\(c\) 是一个标量常数。\(Q(x)\)函数通常以二次函数的形式出现,并且它高维的通项表达式是:$$ q(x) = ax^2 +bx + c$$\(Q(x)\)的关键特性在于这是一个凸函数。
我们也对向量\(x\)构造一个线性约束集合,即\(x\) \(\in \mathbb{R}^n\)。
我们把这些约束写成:$$Ax = f \qquad Bx \geq g$$
这里,\(A\) 是一个 \(m_1 \times n\) 的矩阵且约束为 \(m_1 \leq n \),\(B\)B 是一个 \(m_2 \times n\) 的矩阵.向量 \(f\) 和向量 \(g\)的长度分别是\(m_1\)和\(m_2\).
这是一种让我们可以充分考虑实际条件的标准型。比如我们让 \(x\) 强制满足$$ \sum_{i=1}^n x_i = 1$$的求和条件,或者满足\(a_i \leq x_i \leq b_i