对于一个标准形式的 LP 问题:
m i n z = c 1 x 1 + … … + c n x n s . t . a i 1 x 1 + a i 2 x 2 + … … + a i n x n = b i a i 1 x 1 + a i 2 x 2 + … … + a i n x n ≤ b i 式 (1) x j ≥ 0 , j = 1 , … … , n \begin{aligned} \\ min \qquad &z=c_1x_1+ …… + c_nx_n \\s.t. \qquad &a_{i1}x_1 + a_{i2}x_2 + …… + a_{in}x_n = b_i \\&a_{i1}x_1 + a_{i2}x_2 + …… + a_{in}x_n ≤ b_i \qquad \qquad \text{式 (1)} \\& x_j ≥ 0, \qquad j = 1, …… , n \end{aligned} mins.t.z=c1x1+……+cnxnai1x1+ai2x2+……+ainxn=biai1x1+ai2x2+……+ainxn≤bi式 (1)xj≥0,j=1,……,n
我们知道他的最优解在多面凸集的顶点上,那么只要找到一个基本可行解,然后让超平面沿着目标函数的负梯度方向移动,就可以得到最优解——单纯形方法。
接下来,从线性代数的角度出发,将式(1)改写为矩阵向量形式:
{ m i n z = c T s . t . A x = b 式(2) x ≥ 0 \left\{ \begin{aligned} min \qquad & z=c^T \\ s.t. \qquad & Ax = b \qquad \qquad \text{式(2)} \\ & x ≥ 0 \end{aligned} \right. ⎩ ⎨ ⎧mins.t.z=cTAx=b式(2)x≥0
假设 r ( A ) = m r(A) = m r(A)=m,即 A 中必有 m 个线性无关的列向量,构成满秩方阵 B,再将其余各列组成的子阵记为 N,有 A = ( B , N ) A = (B,N) A=(B,N),同理 x = ( x B , x N ) x = (x_B, x_N) x=(xB,xN)。
则 A x = b Ax=b Ax=b 可记作 B x B + N x N = b Bx_B+Nx_N=b BxB+NxN=b 。
由于 B 满秩, B − 1 B^{-1} B−1 存在,上式两边左乘 B − 1 B^{-1} B−1 可得 x B = B − 1 b − B − 1 N x N 式(3) x_B = B^{-1}b -B^{-1}Nx_N \qquad \qquad \text{式(3)} xB=B−1b−B−1NxN式(3)
将式(3)代入式(2)中的目标函数有 其中 b ‾ = B − 1 b \overline{b} = B^{-1}b b=B−1b , A j ‾ = B − 1 N \overline{A_j} = B^{-1}N Aj=B−1N
z = c T x = c B T x B + c N T x N = c B T ( b ‾ − B − 1 N x N ) + c N T x N = c B T b ‾ − ( c B T B − 1 N − c N T ) x N = c B T b ‾ − ∑ j = m + 1 n ( c B T A j ‾ − c j ) x j 式(4) \begin{aligned} z &= c^Tx=c_B^Tx_B+c_N^Tx_N \\&=c_B^T(\overline{b} - B^{-1}Nx_N) + c_N^Tx_N \\&=c_B^T\overline{b} - (c_B^TB^{-1}N-c_N^T)x_N \\&=c_B^T\overline{b} - \sum_{j=m+1}^n(c_B^T\overline{A_j}-c_j)x_j \qquad \qquad \text{式(4)} \end{aligned} z=cTx=cBTxB+cNTxN=cBT(b−B−1NxN)+cNTxN=cBTb−(cBTB−1N−cNT)xN=cBTb−j=m+1∑n(cBTAj−cj)xj式(4)
然后记 z 0 = c T x ‾ = c B T B ‾ z_0 = c^T\overline{x}=c_B^T\overline{B} z0=cTx=cBTB,即 z 0 z_0 z0 为目标函数中的常数项。
将式(4)中的 c B T A j ‾ − c j c_B^T\overline{A_j}-c_j cBTAj−cj 从 (m+1, n) 扩展到 (1, n),并做如下记号有: ζ T = ( ζ B T , ζ N T ) = ( 0 , c B T A j ‾ − c j ) \zeta^T = (\zeta^T_B, \zeta^T_N) = (0, c_B^T\overline{A_j}-c_j) ζT=(ζBT,ζNT)=(0,cBTAj−cj)。
从而目标函数可记作: z = c B T b ‾ − ζ T x 式(5) z = c_B^T\overline{b}-\zeta^Tx \qquad \qquad \text{式(5)} z=cBTb−ζTx式(5)
将式(2)可继续改写为:
{ m i n z = z 0 − ζ T x s . t . x B + B − 1 N x N = b ‾ 式(6) x ≥ 0 \left\{ \begin{aligned} min \qquad & z=z_0 - \zeta^Tx \\ s.t. \qquad & x_B + B^{-1}Nx_N = \overline{b} \qquad \qquad \text{式(6)} \\ & x ≥ 0 \end{aligned} \right. ⎩ ⎨ ⎧mins.t.z=z0−ζTxxB+B−1NxN=b式(6)x≥0
其中 x B + B − 1 N x N = b ‾ x_B + B^{-1}Nx_N = \overline{b} xB+B−1NxN=b 又称为典式。
对于式(5), c B T b ‾ c_B^T\overline{b} cBTb 是 x N = 0 x_N =0 xN=0 时候的一组特解,而 ζ T x \zeta^Tx ζTx 类似于一种损失,我们期望损失小于等于零,那么这就是最小值;如果损失大于0,说明了存在更优解。
定理:如果 ζ \zeta ζ 的第 k 个分量 ζ k > 0 ( m + 1 ≤ k ≤ n ) \zeta_k > 0 \quad (m+1≤k≤n) ζk>0(m+1≤k≤n) , A k ‾ = B − 1 A k ≤ 0 \overline{A_k} = B^{-1}A_k ≤0 Ak=B−1Ak≤0,则无界。
解释: ζ k > 0 \zeta_k > 0 ζk>0 意味着损失大于0,对于约束条件 x B = B − 1 b − B − 1 N x N x_B = B^{-1}b - B^{-1}Nx_N xB=B−1b−B−1NxN ,意味着需要下降。
A k ‾ = B − 1 A k ≤ 0 \overline{A_k} = B^{-1}A_k ≤0 Ak=B−1Ak≤0,对于约束条件 x B = B − 1 b − B − 1 N x N x_B = B^{-1}b - B^{-1}Nx_N xB=B−1b−B−1NxN ,意味着需要上升,二者相互矛盾,故无界。
证明:构造 KaTeX parse error: Undefined control sequence: \pmatrix at position 5: d = \̲p̲m̲a̲t̲r̲i̲x̲{-\overline{A_k…,有 A d = 0 Ad=0 Ad=0,对于充分大正数 θ \theta θ ,考察 c T ( x ‾ + θ d ) c^T(\overline{x}+\theta d) cT(x+θd) (参照下找最优解)。
若存在最优解,可通过以下方法寻找:
令 d = ( − A k ‾ 0 ) + e k , e k 是第 k 个分量为 1,其余分量为 0 的 n 维向量。 构造 x ^ = x ‾ + θ d = ( b ‾ 0 ) + θ ( − A k ‾ 0 ) + θ e k = ( b ‾ − θ A k ‾ 0 ) + θ e k 为使 x ^ ≥ 0 ,则要求 b ‾ − θ A k ‾ ≥ 0 ,故令 θ = m i n { b i ‾ a i k ‾ ∣ a i k ‾ > 0 , i = 1 , … … , m } 从而保证了 x ^ ≥ 0 ,因而 x ^ 是可行解。 \begin{aligned} \\ &\text{令}\quad d = \begin{pmatrix}-\overline{A_k}\\ 0\end{pmatrix} +e_k \qquad, e_k \text{ 是第 k 个分量为 1,其余分量为 0 的 n 维向量。} \\ &\text{构造} \hat{x} = \overline{x} + \theta d = \begin{pmatrix}\overline{b} \\ 0\end{pmatrix} + \theta \begin{pmatrix}-\overline{A_k}\\ 0\end{pmatrix} + \theta e_k = \begin{pmatrix}\overline{b}-\theta \overline{A_k} \\ 0\end{pmatrix} + \theta e_k \\ &\text{为使 }\hat{x} ≥ 0, \text{则要求 } \overline{b} - \theta \overline{A_k} ≥ 0,\text{故令 } \theta = min\{\frac{\overline{b_i}}{\overline{a_{ik}}}|\overline{a_{ik}} > 0, i=1,……,m \} \\ &\text{从而保证了 } \hat{x} ≥ 0,\text{因而 }\hat{x} \text{ 是可行解。} \end{aligned} 令d=(−Ak0)+ek,ek 是第 k 个分量为 1,其余分量为 0 的 n 维向量。构造x^=x+θd=(b0)+θ(−Ak0)+θek=(b−θAk0)+θek为使 x^≥0,则要求 b−θAk≥0,故令 θ=min{aikbi∣aik>0,i=1,……,m}从而保证了 x^≥0,因而 x^ 是可行解。
单纯形方法总结
第 1 步——找一个初始的可行基 B;
第 2 步——求出对应的典式及检验数向量 ζ \zeta ζ;
第 3 步——求 ζ k = m a x { ζ j ∣ j = 1 , … … , n } \zeta_k = max\{\zeta_j|j=1,……,n\} ζk=max{ζj∣j=1,……,n};
第 4 步——若 ζ k ≤ 0 \zeta_k ≤ 0 ζk≤0 ,停止;
已找到最优解 x = ( x B x N ) = ( b ‾ 0 ) x = \begin{pmatrix}x_B \\ x_N \end{pmatrix} = \begin{pmatrix}\overline{b}\\0\end{pmatrix} x=(xBxN)=(b0) 及最优值 z = c B T b ‾ z=c_B^T\overline{b} z=cBTb;
第 5 步——若 A k ‾ ≤ 0 \overline{A_k} ≤ 0 Ak≤0,停止,原问题无界;
第 6 步——求 m i n { b i ‾ a i k ‾ ∣ a i k ‾ > 0 , i = 1 , … … , m } = b ‾ a i k ‾ min\{\frac{\overline{b_i}}{\overline{a_{ik}}}|\overline{a_{ik}} > 0, i=1,……,m \} = \frac{\overline{b}}{\overline{a_{ik}}} min{aikbi∣aik>0,i=1,……,m}=aikb;
第 7 步——以 A k A_k Ak 代替 A B r A_{B_r} ABr 得到新的基,转第 2 步。