陈宝林《最优化理论与算法》超详细学习笔记 (三)————单纯形法


一般线性规划问题具有线性方程组的变量数大于方程个数,这时有不定的解。于是,我们有选择地选择一个基本可行解,也就是可行域的一个顶点,沿着可行域的边界到下一个相邻的顶点,要求新的顶点目标值函数更优,如此迭代,直至找到最优解,或判定该最优化问题无界。这就是单纯形法的基本求解思路

数学模型

给定标准形式的LP
min c x \min {\mathcal{ cx}}
s.t. A x = b , A x=b, i = 1 , 2 , , m i=1,2, \dots, m , x 0 x \geq 0
x = ( x B , x N ) , x B x=\left(x_{B}, x_{N}\right), x_{B} 为基变量, x N x_{N} 为非基变量
利用分块矩阵
A = [ B , N ] A x = b B x B + N x N = b x B + B 1 N x N = B 1 b x B = B 1 b B 1 x N \begin{array}{l} A=[B, N] \\ A x=b \Rightarrow B x_{B}+N x_{N}=b \Rightarrow \\ x_{B}+B^{-1} N x_{N}=B^{-1} b \Rightarrow x_{B}=B^{-1} b-B^{-1} x_{N} \end{array}
于是目标函数
z = c B x B + c N x N = c B ( B 1 b B 1 N x N ) + c N x N = c B B 1 b + ( c N c B B 1 N ) x N \begin{aligned} z &=c_{B}^{\prime} x_{B}+c_{N}^{\prime} x_{N} \\ &=c_{B}^{\prime}\left(B^{-1} b-B^{-1} N x_{N}\right)+c_{N}^{\prime} x_{N} \\ &=c_{B}^{\prime} B^{-1} b+\left(c_{N}^{\prime}-c_{B}^{\prime} B^{-1} N\right) x_{N} \end{aligned}
上式中 ( c N c B B 1 N ) \left(c_{N}^{\prime}-c_{B}^{\prime} B^{-1} N\right) 的分量 c ˉ j = c j c B B 1 A j \bar{c}_{j}=c_{j}-c_{B}^{\prime} B^{-1} A_{j} 为约化(缩减)费用,于是有基本可行解 x x 与基 B B 相关联;若约化费用 c ˉ > 0 \bar{c}>0 则可以推出 x x 为最优; x x 为最优且非退化可以推出 c ˉ > 0 \bar{c}>0

最优性检验与解的判别

由于线性规划问题的求解可能出现唯一最优解、无穷多最优解、无界解和无可行解等四种情况,因此,需要建立解的判别准则。
x i = b i j = m + 1 n a i j x j , ( i = 1 , 2 , n ) x_{i}=b_{i}^{\prime}-\sum_{j=m+1}^{n} a_{i j}^{\prime} x_{j}, \quad(i=1,2, \cdots n)
将上式代入目标函数式,整理可得
z = j = 1 n c j x j = i = 1 m c i x i + j = m + 1 n c j x j = i = 1 m c i ( b i j = m + 1 n a i j x j ) + j = m + 1 n c j x j = i = 1 m c i b i i = 1 m c i j = m + 1 n a i j x j + j = m + 1 n c j x j = i = 1 m c i b i j = m + 1 n i = 1 m c i a i j x j + j = m + 1 n c j x j = i = 1 m c i b i + j = m + 1 n ( c j i = 1 m c i a i j ) x j \begin{aligned} z &=\sum_{j=1}^{n} c_{j} x_{j}=\sum_{i=1}^{m} c_{i} x_{i}+\sum_{j=m+1}^{n} c_{j} x_{j}=\sum_{i=1}^{m} c_{i}\left(b_{i}-\sum_{j=m+1}^{n} a_{i j} x_{j}\right)+\sum_{j=m+1}^{n} c_{j} x_{j} \\ &=\sum_{i=1}^{m} c_{i} b_{i}-\sum_{i=1}^{m} c_{i} \sum_{j=m+1}^{n} a_{i j} x_{j}+\sum_{j=m+1}^{n} c_{j} x_{j} \\ &=\sum_{i=1}^{m} c_{i} b_{i}-\sum_{j=m+1}^{n} \sum_{i=1}^{m} c_{i} a_{i j} x_{j}+\sum_{j=m+1}^{n} c_{j} x_{j} \\ &=\sum_{i=1}^{m} c_{i} b_{i}+\sum_{j=m+1}^{n}\left(c_{j}-\sum_{i=1}^{m} c_{i} a_{i j}\right) x_{j} \end{aligned}

最优解的判别定理

X ( 0 ) = ( b 1 , b 2 , , b m , 0 , , 0 ) T X^{(0)}=\left(b_{1}^{\prime}, b_{2}^{\prime}, \cdots, b_{m}^{\prime}, 0, \cdots, 0\right)^{T} 为对应于基 B B 的一个基可行解,且对于一切 j = m + 1 , , n j=m+1, \ldots, n σ j 0 \sigma_{j} \leq 0 ,则 X ( 0 ) X^{(0)} 为最优解。称 σ j \sigma_{j} 为检验数

无穷多最优解判别定理

X ( 0 ) = ( b 1 , b 2 , , b m , 0 , , 0 ) T X^{(0)}=\left(b_{1}^{\prime}, b_{2}^{\prime}, \cdots, b_{m}^{\prime}, 0, \cdots, 0\right)^{T} 为对应于基 B B 的一个基可行解,且对于一切 j = m + 1 , , n j=m+1, \ldots, n σ j 0 \sigma_{j} \leq 0 ,又存在某个非基变量的检验数 σ m + k = 0 \sigma_{m+k}=0 ,则线性规划问题有无穷多最优解。
简要证明思路如下:只需将非基变量 x m + k = 0 x_{m+k}=0 换入基变量中,找到一个新基可行解 X ( 1 ) X^{(1)} 。因为 σ m + k = 0 \sigma_{m+k}=0 ,所以 z = z 0 z=z_{0} ,故 X ( 1 ) X^{(1)} 也是最优解,进而 X ( 0 ) X^{(0)} X ( 1 ) X^{(1)} 连线上的所有点都是最优解。

无界解判别定理

X ( 0 ) = ( b 1 , b 2 , , b m , 0 , , 0 ) T X^{(0)}=\left(b_{1}^{\prime}, b_{2}^{\prime}, \cdots, b_{m}^{\prime}, 0, \cdots, 0\right)^{T} 为一个基可行解,有一个 σ m + k > 0 \sigma_{m+k}>0 ,并且对 i = m + 1 , , n i=m+1, \ldots, n ,有 a i m + k 0 a_{i,m+k} \leq 0 ,那么该线性规划问题具有无界解(或称无最优解)。
简要证明思路如下:构造一个新的解 X ( 1 ) X^{(1)} ,其分量为
x i ( 1 ) = b i λ a i , m + k ( λ > 0 ) x m + k ( 1 ) = λ x j ( 1 ) = 0 ; j = m + 1 , , n ,  并且  j m + k \begin{array}{l} x_{i}^{(1)}=b_{i}^{\prime}-\lambda a_{i, m+k}^{\prime}(\lambda>0) \\ x_{m+k}^{(1)}=\lambda \\ x_{j}^{(1)}=0 ; \quad j=m+1, \cdots, n, \text { 并且 } j \neq m+k \end{array}
因为 a i m + k 0 a_{i,m+k} \leq 0 ,所以对任意的 λ > 0 \lambda>0 都是可行解,把 x ( 1 ) x^{(1)} 代入目标函数内,得到
z = z 0 + λ σ m + k z=z_{0}+\lambda \sigma_{m+k}
σ m + k > 0 \sigma_{m+k}>0 ,故当 λ + \lambda \rightarrow +\infty , 则 z + , z \rightarrow+\infty, 故该问题 目标函数无界。

其他情形

以上讨论都是针对标准型的,即求目标函数极大化时的情况。当要求目标函数极小化时,一种情况是将其化为标准型。
如果不化为标准型,只需在上述1,2点中把 σ j 0 \sigma_{j} \leq 0 改 为 σ j 0 , \sigma_{j} \geq 0, 第3点中将 σ m + k > 0 \sigma_{m+\mathrm{k}}>0 改写为 σ n + k < 0 \sigma_{n+k}<0 即可。

第三章 单纯形法

单纯形表

单纯形表

为了便于理解计算关系,现设计一种计算表,称为单纯形表,其功能与增广矩阵相似。
将(1-22)式与目标函数组成n+1个变量,m+1个方程的方程组。
x 1 + a 1 m + 1 x m + 1 + + a 1 n x n = b 1 x 2 + a 2 m + 1 x m + 1 + + a 2 n x n = b 2 x m + a m m + 1 x m + 1 + + a m n x n = b m z + c 1 x 1 + + c m x m + c m + 1 x m + 1 + + c n x n = 0 \begin{array}{c} x_{1} \quad+a_{1 m+1} x_{m+1}+\cdots+a_{1 n} x_{n}=b_{1} \\ x_{2} \quad+a_{2 m+1} x_{m+1}+\cdots+a_{2 n} x_{n}=b_{2} \\ x_{m}+a_{m m+1} x_{m+1}+\cdots+a_{m n} x_{n}=b_{m} \\ & -z+c_{1} x_{1}+\cdots+c_{m} x_{m}+c_{m+1} x_{m+1}+\cdots+c_{n} x_{n}=0 \end{array}
为了便于迭代运算,可将上述方程组写成增广矩阵形式
( 0 1 0 0 a 1 , m + 1 a 1 n b 1 0 0 1 0 a 2 , m + 1 a 2 n b 2 0 0 0 0 a m , m + 1 a m n b m 1 c 1 c 2 c m c m + 1 c n 0 ) \left(\begin{array}{cccccccc|c} 0 & 1 & 0 & \cdots & 0 & a_{1, m+1} & \cdots & a_{1 n} & b_{1} \\ 0 & 0 & 1 & \cdots & 0 & a_{2, m+1} & \cdots & a_{2 n} & b_{2} \\ \vdots & \vdots & & & \vdots & \vdots & & \vdots & \vdots \\ 0 & 0 & 0 & \cdots & 0 & a_{m, m+1} & \cdots & a_{m n} & b_{m} \\ 1 & c_{1} & c_{2} & \cdots & c_{m} & c_{m+1} & \cdots & c_{n} & 0 \end{array}\right)
若将 z z 看作不参与基变换的基变量,它与 x 1 , x 2 , , x m x_{1},x_{2},…,x_{m} 的系数构成一个基,这时可采用行初等变换将 c 1 , c 2 , , c m c_{1},c_{2},…,c_{m} 变换为零,使其对应的系数矩阵为单位矩阵。得到
( 0 1 0 0 a 1 , m + 1 a 1 n b 1 0 0 1 0 a 2 , m + 1 a 2 n b 2 0 0 0 0 a m , m + 1 a m n b m 1 0 0 0 c m + 1 i = 1 m c i a i , m + 1 c n i = 1 m c i a i n i = 1 m c i b i ) \left(\begin{array}{cccccccc} 0 & 1 & 0 & \cdots & 0 & a_{1, m+1} & \cdots & a_{1 n} & b_{1} \\ 0 & 0 & 1 & \cdots & 0 & a_{2, m+1} & \cdots & a_{2 n} & b_{2} \\ \vdots & \vdots & & & \vdots & \vdots & & \vdots & \vdots \\ 0 & 0 & 0 & \cdots & 0 & a_{m, m+1} & \cdots & a_{m n} & b_{m} \\ 1 & 0 & 0 & \cdots & 0 & c_{m+1}-\sum_{i=1}^{m} c_{i} a_{i, m+1} & \cdots & c_{n}-\sum_{i=1}^{m} c_{i} a_{i n} & -\sum_{i=1}^{m} c_{i} b_{i} \end{array}\right)
对于上表的说明:
X B X_{B} 列中填入基变量,这里是 x 1 , x 2 , , x m x_{1},x_{2},…,x_{m}
C B C_{B} 列中填入基变量的价值系数,这里是 c 1 , c 2 , , c m c_{1},c_{2},…,c_{m} ;它们是与基变量相对应的;
b b 列中填入约束方程组右端的常数;
c j c_{j} 行中填入基变量的价值系数 c 1 , c 2 , , c n c_{1},c_{2},…,c_{n}
θ i \theta_{i} 列的数字是在确定换入变量后,按 θ \theta 规则计算后填入;
最后一行称为检验数行,对应各非基变量 x j x_{j} 的检验数是 c j i = 1 m c i a i j , j = 1 , 2 , , n c_{j}-\sum_{i=1}^{m} c_{i} a_{i j}, \quad j=1,2, \cdots, n

计算步骤

在初始单纯形表的基础上,每迭代一步构造一个新单纯形表,计算步骤如下:
(1)按数学模型确定初始可行基和初始基可行解,建立初始单纯形表。
(2)计算各非基变量xj的检验数, σ j = c j i = 1 m c i a i j \sigma_{j}=c_{j}-\sum_{i=1}^{m} c_{i} a_{i j} ;检查检验数,若所有检验数 σ j 0 , j = 1 , 2 , n \sigma_{j} \leq 0, j=1,2, \cdots n 则已得到最优解,可停止计算。否则转入下一步。
(3)在 σ j > 0 , j = m + 1 , , n \sigma_{j}>0, j=m+1, \ldots, n 中,若有某个 σ k \sigma_{k} 对应 x k x_{k} 的系数列向量 P k 0 P_{k} \leq 0 ,则此问题是无界,停止计算。否则,转入下一步。
(4)根据 max ( σ j > 0 ) = σ k \max \left(\sigma_{j}>0\right)=\sigma_{k} ,确定 x k x_{k} 为换入变量,按 θ \theta 计算
θ = min ( b i a i k a i k > 0 ) = b l a l k \theta=\min \left(\frac{b_{i}}{a_{i k}} \mid a_{i k}>0\right)=\frac{b_{l}}{a_{l k}}
(5)以 a l k a_{l k} 为主元素进行迭代(即用高斯消去法或称为旋转运算),把 x k x_{k} 所对应的列向量
P k = ( a 1 k a 2 k a l k a m k )  变换  ( 0 0 1 0 )  第  l  行  P_{k}=\left(\begin{array}{c} a_{1 k} \\ a_{2 k} \\ \vdots \\ a_{l k} \\ \vdots \\ a_{m k} \end{array}\right) \text { 变换 } \Rightarrow\left(\begin{array}{l} 0 \\ 0 \\ \vdots \\ 1 \\ \vdots \\ 0 \end{array}\right) \leftarrow \text { 第 } l \text { 行 }
将X_{B}列中的x_{l}换为x_{k},得到新的单纯形表。重复(2)~(5),直到终止。

人工变量法

设线性规划问题的约束条件 j = 1 n P j x j = b \sum_{j=1}^{n} P_{j} x_{j}=b
其中没有可作为初始基的单位矩阵,则分别给每一个约束方程加入人工变量 x n + 1 , , x n + m x_{n+1}, \ldots, x_{n+m} ,得到
{ a 11 x 1 + a 12 x 2 + + a 1 n x n + x n + 1 = b a 21 x 1 + a 22 x 2 + + a 2 n x n + x n + 2 = b a m 1 x 1 + a m 2 x 2 + + a m n x n + x n + m = b x 1 , , x n 0 ; x m + 1 , , x n + m 0 \left\{\begin{array}{cc} a_{11} x_{1}+a_{12} x_{2}+\cdots+a_{1 n} x_{n}+x_{n+1} & =b \\ a_{21} x_{1}+a_{22} x_{2}+\cdots+a_{2 n} x_{n}+x_{n+2} & =b \\ a_{m 1} x_{1}+a_{m 2} x_{2}+\cdots+a_{m n} x_{n} & +x_{n+m}=b \\ x_{1}, \cdots, x_{n} \geq 0 ; \quad x_{m+1}, \cdots, x_{n+m} \geq 0 \end{array}\right.
x n + 1 , , x n + m x_{n+1}, \ldots, x_{n+m} 为基变量,并可得到一个 m × m m×m 单位矩阵。令非基变量 x 1 , , x n x_{1},…,x_{n} 为零,便可得到一个初始基可行解 X ( 0 ) = ( 0 , 0 , , 0 , b 1 , b 2 , , b m ) T X^{(0)}=\left(0,0, \ldots, 0, b_{1}, b_{2}, \ldots, b_{m}\right)^{\mathrm{T}}
因为人工变量是后加入到原约束条件中的虚拟变量,要求经过基的变换将它们从基变量中逐个替换出来。
基变量中不再含有非零的人工变量,这表示原问题有解。
若在最终表中当所有 c j z j 0 c_{j}-z_{j} \leq 0 ,而在其中还有某个非零人工变量,这表示原问题无可行解。
以下讨论如何解含有人工变量的线性规划问题。

大M法

大M法的思想就是,在原线性规划问题加入松弛变量和人工变量后,将目标函数中松弛变量的系数设为0、人工变量的系数设为M(无穷大的数),再利用单纯形法进行计算得到最优解。

两阶段法

以下介绍求解含有人工变量线性规划问题的两阶段法。
第一阶段:不考虑原问题是否存在基可行解;给原线性规划问题加入人工变量,并构造仅含人工变量的目标函数和要求实现最小化。
目标函数
min ω = x n + 1 + + x n + m + 0 x 1 + 0 x 2 + + 0 x n \min \omega=x_{n+1}+\cdots+x_{n+m}+0 x_{1}+0 x_{2}+\cdots+0 x_{n}
约束条件
{ a 11 x 1 + a 12 x 2 + = b 1 a 21 x 1 + a 22 x 2 + + a 1 n x n + x n + 1 = b 2 a m 1 x 1 + a m 2 x 2 + + a m x n + x n + m = b m \left\{\begin{array}{ccccc} a_{11} x_{1}+a_{12} x_{2}+\cdots \cdots & & =b_{1} \\ a_{21} x_{1}+a_{22} x_{2}+\cdots \cdots+a_{1 n} x_{n}+x_{n+1} & & =b_{2} \\ \cdots & \cdots & \cdots & \cdots & \cdots \\ a_{m 1} x_{1}+a_{m 2} x_{2}+\cdots \cdots+a_{m} x_{n} & & +x_{n+m}=b_{m} & \end{array}\right.
第一阶段求解:用单纯形法求解上述模型。若得到的最有值 w = 0 w=0 ,说明原问题存在基可行解,可以进行第二段计算。否则原问题无可行解,应停止计算。
第二阶段求解:从第一阶段计算得到的最终表中除去人工变量,将目标函数行的系数,换为原问题的目标函数系数,作为第二阶段计算的初始表。各阶段的计算方法及步骤与第3节介绍的单纯形法相同。

退化

在单纯形法计算中用 θ \theta 规则确定换出变量时,有时存在两个以上相同的最小比值,这样在下一次迭代中就有一个或几个基变量等于零,这就出现了退化解。
这时换出变量 x l = 0 x_{l}=0 ,迭代后目标函数值不变。这时不同基表示为同一顶点。有人构造了一个特例,当出现退化时,进行多次迭代,而基从 B 1 B_{1} , B 2 B_{2} ,…又返回到 B 1 B_{1} ,即出现计算过程的循环,便永远达不到最优解。
尽管实际计算过程中循环现象极少出现,但还是有可能发生的。如何解决这问题? 先后有人提出了“摄动法”,“字典序法”。1974年由勃兰特(Bland)提出一种简便的规则,简称勃兰特规则:
(1) 选取 c j z j > 0 c_{j}-z_{j}>0 中下标最小的非基变量 x k x_{k} 为换入变量,即 k = min ( j c j z j > 0 ) k=\min \left(j \mid c_{j}-z_{j}>0\right)
(2) 当按 θ \theta 规则计算存在两个和两个以上最小比值时,选取下标最小的基变量为换出变量。
按勃兰特规则计算时,一定能避免出现循环。

猜你喜欢

转载自blog.csdn.net/River_J777/article/details/107156348
今日推荐