对于一个标准形式的 LP 问题:
minz=c1x1+……+cnxns.t.ai1x1+ai2x2+……+ainxn=biai1x1+ai2x2+……+ainxn≤bi式 (1)xj≥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)改写为矩阵向量形式:
{minz=cTs.t.Ax=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)=mr(A) = mr(A)=m,即 A 中必有 m 个线性无关的列向量,构成满秩方阵 B,再将其余各列组成的子阵记为 N,有 A=(B,N)A = (B,N)A=(B,N),同理 x=(xB,xN)x = (x_B, x_N)x=(xB,xN)。
则 Ax=bAx=bAx=b 可记作 BxB+NxN=bBx_B+Nx_N=bBxB+NxN=b 。
由于 B 满秩,B−1B^{-1}B−1 存在,上式两边左乘 B−1B^{-1}B−1 可得 xB=B−1b−B−1NxN式(3)x_B = B^{-1}b -B^{-1}Nx_N \qquad \qquad \text{式(3)}xB=B−1b−B−1NxN式(3)
将式(3)代入式(2)中的目标函数有 其中 b‾=B−1b\overline{b} = B^{-1}bb=B−1b , Aj‾=B−1N\overline{A_j} = B^{-1}NAj=B−1N
z=cTx=cBTxB+cNTxN=cBT(b‾−B−1NxN)+cNTxN=cBTb‾−(cBTB−1N−cNT)xN=cBTb‾−∑j=m+1n(cBTAj‾−cj)xj式(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)
然后记 z0=cTx‾=cBTB‾z_0 = c^T\overline{x}=c_B^T\overline{B}z0=cTx=cBTB,即 z0z_0z0 为目标函数中的常数项。
将式(4)中的 cBTAj‾−cjc_B^T\overline{A_j}-c_jcBTAj−cj 从 (m+1, n) 扩展到 (1, n),并做如下记号有:ζT=(ζBT,ζNT)=(0,cBTAj‾−cj)\zeta^T = (\zeta^T_B, \zeta^T_N) = (0, c_B^T\overline{A_j}-c_j)ζT=(ζBT,ζNT)=(0,cBTAj−cj)。
从而目标函数可记作: z=cBTb‾−ζTx式(5)z = c_B^T\overline{b}-\zeta^Tx \qquad \qquad \text{式(5)}z=cBTb−ζTx式(5)
将式(2)可继续改写为:
{minz=z0−ζTxs.t.xB+B−1NxN=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
其中 xB+B−1NxN=b‾x_B + B^{-1}Nx_N = \overline{b}xB+B−1NxN=b 又称为典式。
对于式(5),cBTb‾c_B^T\overline{b}cBTb 是 xN=0x_N =0xN=0 时候的一组特解,而 ζTx\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) ,Ak‾=B−1Ak≤0\overline{A_k} = B^{-1}A_k ≤0Ak=B−1Ak≤0,则无界。
解释:ζk>0\zeta_k > 0ζk>0 意味着损失大于0,对于约束条件 xB=B−1b−B−1NxNx_B = B^{-1}b - B^{-1}Nx_NxB=B−1b−B−1NxN ,意味着需要下降。
Ak‾=B−1Ak≤0\overline{A_k} = B^{-1}A_k ≤0Ak=B−1Ak≤0,对于约束条件 xB=B−1b−B−1NxNx_B = B^{-1}b - B^{-1}Nx_NxB=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…,有 Ad=0Ad=0Ad=0,对于充分大正数 θ\thetaθ ,考察 cT(x‾+θd)c^T(\overline{x}+\theta d)cT(x+θd) (参照下找最优解)。
若存在最优解,可通过以下方法寻找:
令d=(−Ak‾0)+ek,ek 是第 k 个分量为 1,其余分量为 0 的 n 维向量。构造x^=x‾+θd=(b‾0)+θ(−Ak‾0)+θek=(b‾−θAk‾0)+θek为使 x^≥0,则要求 b‾−θAk‾≥0,故令 θ=min{bi‾aik‾∣aik‾>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=max{ζ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=(xBxN)=(b‾0)x = \begin{pmatrix}x_B \\ x_N \end{pmatrix} = \begin{pmatrix}\overline{b}\\0\end{pmatrix}x=(xBxN)=(b0) 及最优值 z=cBTb‾z=c_B^T\overline{b}z=cBTb;
第 5 步——若 Ak‾≤0\overline{A_k} ≤ 0Ak≤0,停止,原问题无界;
第 6 步——求 min{bi‾aik‾∣aik‾>0,i=1,……,m}=b‾aik‾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 步——以 AkA_kAk 代替 ABrA_{B_r}ABr 得到新的基,转第 2 步。
8528

被折叠的 条评论
为什么被折叠?



