等式约束二次规划——变量消除法和KKT法

基本思想

如果遇到这种简单的问题:
m i n   x 1 2 + x 2 2 + x 1 + 2 x 2 s . t .     x 1 + x 2 = 1 \begin{aligned} &min x^2_1+x^2_2+x_1+2x_2 \\ &s.t.  x_1+x_2=1 \end{aligned} ​min x12​+x22​+x1​+2x2​s.t.  x1​+x2​=1​
基本的思想就有两个,第一种是消除一个变量,这样就可以很简单的求解出来:
m i n   ( 1 − x 2 ) 2 + x 2 2 + 1 − x 2 + 2 x 2 \begin{aligned} &min (1-x_2)^2+x^2_2+1-x_2+2x_2 \end{aligned} ​min (1−x2​)2+x22​+1−x2​+2x2​​
第二种就是可以使用拉格朗日法,这最后可以推导出KKT条件:
m i n   x 1 2 + x 2 2 + x 1 + 2 x 2 + λ ( x 1 + x 2 − 1 ) min x^2_1+x^2_2+x_1+2x_2+λ(x_1+x_2-1) min x12​+x22​+x1​+2x2​+λ(x1​+x2​−1)
对于等式约束的二次规划方法,这两种思路都可以求解,把上面的问题变成更高级更抽象的形式:
m i n   1 2 x T Q x + c T x s . t .     A x = b \begin{aligned} &min \frac{1}{2}x^TQx+c^Tx\\ &s.t.  Ax=b \end{aligned} ​min 21​xTQx+cTxs.t.  Ax=b​

变量消除法

这种方法对应的是上一章说的第一种思想,基本推导思路其实是一样的,只不过变成了更高级的矩阵形式,相同的推导还有线性规划中的单纯形方法。
一般来说,等式约束中的 A A A是一个扁长的矩阵,也就是说虽然这个是等式,但是满足它的也有很多很多的解。最简单的例子就是上一章的 x 1 + x 2 = 1 x_1+x_2=1 x1​+x2​=1。所以这里我们和上一章思路一样,使用某些变量表示其他变量,然后变成无约束二次规划进行求解。无约束二次规划——共轭梯度法

对 A x = b Ax=b Ax=b的求解

如果熟悉单纯形法的意义和推导,其实就是一模一样的。
首先将矩阵分块,等式写成:
( B , N ) ( x b x n ) = b (B,N)\left( \begin{array}{c} x_b\\ x_n \end{array} \right)=b (B,N)(xb​xn​​)=b
这里 x b x_b xb​是一组基,对应的矩阵B是一个方阵,而且应该是可逆的。那么后面的工作就是做一个简单的移项:
B x b + N x n = b x b = B − 1 b − B − 1 N x n Bx_b+Nx_n=b\\ x_b=B^{-1}b-B^{-1}Nx_n Bxb​+Nxn​=bxb​=B−1b−B−1Nxn​
这样原变量就可以写成:
x = ( x b x n ) = ( B − 1 b − B − 1 N x n x n ) = ( B − 1 b 0 ) + ( − B − 1 N I ) x n x=\left( \begin{array}{c} x_b\\ x_n \end{array} \right)=\left( \begin{array}{c} B^{-1}b-B^{-1}Nx_n\\ x_n \end{array} \right)=\left( \begin{array}{c} B^{-1}b\\ 0 \end{array} \right)+\left( \begin{array}{c} -B^{-1}N\\ I \end{array} \right)x_n x=(xb​xn​​)=(B−1b−B−1Nxn​xn​​)=(B−1b0​)+(−B−1NI​)xn​
即写成了一个类似于 x = x 0 + Z x n x=x_0+Zx_n x=x0​+Zxn​的形式,这样我们将其代入进去,并使用无约束方法求解,就能解出答案

唯一解条件

我们将 x = x 0 + Z x n x=x_0+Zx_n x=x0​+Zxn​带入到目标函数中:
1 2 ( x 0 + Z x n ) T Q ( x 0 + Z x n ) + c T ( x 0 + Z x n ) \frac{1}{2}(x_0+Zx_n)^TQ(x_0+Zx_n)+c^T(x_0+Zx_n) 21​(x0​+Zxn​)TQ(x0​+Zxn​)+cT(x0​+Zxn​)
这里面 x 0 x_0 x0​是已知的, x n x_n xn​是未知的,并且这里再次省略常数项,他就变成了如下的形式:
1 2 x n T ( Z T Q Z ) x n + c T Z x n \frac{1}{2}x_n^T(Z^TQZ)x_n+c^TZx_n 21​xnT​(ZTQZ)xn​+cTZxn​
对其求导等于零:
( Z T Q Z ) x n + b 1 = 0 (Z^TQZ)x_n+b_1=0 (ZTQZ)xn​+b1​=0
如果想要其有唯一最优解,也就必须要满足 Z T Q Z Z^TQZ ZTQZ为正定。

KKT法

由于这个是凸二次规划问题,其KKT点就是全局解,所以可以考虑用KKT条件对其求解。这里可以直接使用KKT的五行公式,但是由于没有不等式,所以其实会简化不少。也可以从拉格朗日法推导出来,为了和第一章的思路一致,这里简单推导一下

拉格朗日法到KKT点

1 2 x T Q x + c T x + λ T ( A x − b ) \frac{1}{2}x^TQx+c^Tx+λ^T(Ax-b) 21​xTQx+cTx+λT(Ax−b)
将其对 x x x求导等于零,得出:
Q x + c + A T λ = 0 Qx+c+A^Tλ=0 Qx+c+ATλ=0
对 λ λ λ求导等于零,得出:
A x − b = 0 Ax-b=0 Ax−b=0
将其合写成矩阵的形式:
( Q A T A 0 ) n + m ( x λ ) = ( − c b ) \left( \begin{array}{c} Q&A^T\\ A&0 \end{array} \right)_{n+m}\left( \begin{array}{c} x\\ λ \end{array} \right)=\left( \begin{array}{c} -c\\ b \end{array} \right) (QA​AT0​)n+m​(xλ​)=(−cb​)
这样将这个方程组求解之后就可以求得最优解。

两种方法的比较

我们假设原来的变量为 n n n个,矩阵 A A A的秩为 r ( A ) = m r(A)=m r(A)=m。第一种方法其实是转化成了一个 n − m n-m n−m维的问题,也就是说求解 n − m n-m n−m个方程组就能解决这个问题。而第二个方法是将其转化成一个 n + m n+m n+m维的问题,即 n n n个变量, m m m个乘子。
如果建模建出来的问题就只需要求解一次等式二次规划问题,那么哪一个其实都可以求解,如果维数太大,建议用第一种方法。
如果需要多次求解,需要用到乘子的信息,那就推荐用KKT方法,比如不等式约束的二次规划问题。