文章目录
在上一篇博客 【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 可行解表示 | 目标函数推导 | 目标函数最大值分析 ) 博客中讲解了最优解判定的推导过程 , 基本原理就是
-
将可行解 { X B = B − 1 b − B − 1 N X N X N \begin{cases} X_B = B^{-1}b - B^{-1}NX_N \\ \\X_N \end{cases} ⎩⎪⎨⎪⎧XB=B−1b−B−1NXNXN
-
代入线性规划目标函数 m a x Z = C B T X B + C N T X N max Z = C_B^TX_B + C_N^TX_N maxZ=CBTXB+CNTXN 中 ,
-
最终得到一个 m a x Z = b 0 + ( C N T − C B T B − 1 N ) X N maxZ = b_0 + ( C_N^T - C_B^T B^{-1}N )X_N maxZ=b0+(CNT−CBTB−1N)XN 目标函数 ,
-
只有当 ( C N T − C B T B − 1 N ) ( C_N^T - C_B^T B^{-1}N ) (CNT−CBTB−1N) 系数小于等于 0 0 0 时 , 该目标函数才是最大值 , 该解是最优解 ;
单纯形法解线性规划的三大问题 : 查找初始基可行解 , 判定是否是最优解 , 如何迭代基可行解 , 当前讨论的问题是判定最优解 ;
一、 ( C N T − C B T B − 1 N ) ( C_N^T - C_B^T B^{-1}N ) (CNT−CBTB−1N) 系数 分析
目标函数推导 :
m a x Z = C B T ( B − 1 b − B − 1 N X N ) + C N T X N = C B T B − 1 b − C B T B − 1 N X N + C N T X N = b 0 + ( C N T − C B T B − 1 N ) X N = b 0 + σ m + 1 x m + 1 + σ m + 2 x m + 2 + ⋯ + σ n x n \begin{array}{lcl} max Z &=& C_B^T ( B^{-1}b - B^{-1}NX_N ) + C_N^TX_N \\\\ &=& C_B^T B^{-1}b - C_B^T B^{-1}NX_N + C_N^TX_N\\\\ &=& b_0 + ( C_N^T - C_B^T B^{-1}N )X_N \\\\ &=& b_0 + \sigma_{m+1} x_{m+1} + \sigma_{m+2} x_{m+2} + \cdots + \sigma_{n} x_{n} \\\\ \end{array} maxZ====CBT(B−1b−B−1NXN)+CNTXNCBTB−1b−CBTB−1NXN+CNTXNb0+(CNT−CBTB−1N)XNb0+σm+1xm+1+σm+2xm+2+⋯+σnxn
上述分析到在 X N = O X_N = O XN=O 时 , 如果使目标函数取值最大 ,
σ m + 1 x m + 1 + σ m + 2 x m + 2 + ⋯ + σ n x n \sigma_{m+1} x_{m+1} + \sigma_{m+2} x_{m+2} + \cdots + \sigma_{n} x_{n} σm+1xm+1+σm+2xm+2+⋯+σnxn
系数都小于等于 0 0 0 时 , 满足上述要求 ;
上面的系数是通过 ( C N T − C B T B − 1 N ) ( C_N^T - C_B^T B^{-1}N ) (CNT−CBTB−1N) 计算出来的 ;
-
C N T C_N^T CNT 是目标函数中 , 非基变量的系数 ;
-
C B T C_B^T CBT 是目标函数中 , 基变量的系数 ;
- B − 1 N B^{-1}N B−1N : B − 1 N B^{-1}N B−1N 是将基矩阵进行变换 , 将基矩阵变换为单位阵 I I I , 非基矩阵就是 B − 1 N B^{-1}N B−1N ;
二、 C B C_B CB X B X_B XB 分析
C B C_B CB 与 X B X_B XB 矩阵分析 :
C B T C_B^T CBT 矩阵与 X B X_B XB 的对应关系 , X B = ( x 1 x 2 ⋮ x m ) X_B =\begin{pmatrix} x_{1} \\ x_{2} \\ \vdots\\ x_m \end{pmatrix} XB=⎝⎜⎜⎜⎛x1x2⋮xm⎠⎟⎟⎟⎞ , C B = ( c 1 c 2 ⋮ c m ) C_B =\begin{pmatrix} c_{1} \\ c_{2} \\ \vdots\\ c_m \end{pmatrix} CB=⎝⎜⎜⎜⎛c1c2⋮cm⎠⎟⎟⎟⎞ , C B T = ( c 1 c 2 ⋯ c m ) C_B^T =\begin{pmatrix} c_{1} \quad c_{2} \quad \cdots \quad c_m \end{pmatrix} CBT=(c1c2⋯cm) ;
目标函数为 m a x Z = C B T X B + C N T X N max Z = C_B^T X_B+ C_N^TX_N maxZ=CBTXB+CNTXN , 在目标函数中 , 有以下对应关系 :
其中的 C B T X B = ( c 1 c 2 ⋯ c m ) × ( x 1 x 2 ⋮ x m ) C_B^T X_B = \begin{pmatrix} c_{1} \quad c_{2} \quad \cdots \quad c_m \end{pmatrix} \times \begin{pmatrix} x_{1} \\ x_{2} \\ \vdots\\ x_m \end{pmatrix} CBTXB=(c1c2⋯cm)×⎝⎜⎜⎜⎛x1x2⋮xm⎠⎟⎟⎟⎞ , c 1 c_1 c1 与 x 1 x_1 x1 对应 , c m c_m cm 与 x m x_m xm 对应 ;
三、 C N C_N CN X N X_N XN 分析
C N C_N CN 与 X N X_N XN 矩阵分析 :
C N T C_N^T CNT 矩阵与 X N X_N XN 的对应关系 , X N = ( x m + 1 x m + 2 ⋮ x n ) X_N =\begin{pmatrix} x_{m+1} \\ x_{m+2} \\ \vdots\\ x_n \end{pmatrix} XN=⎝⎜⎜⎜⎛xm+1xm+2⋮xn⎠⎟⎟⎟⎞ , C N = ( c m + 1 c m + 2 ⋮ c n ) C_N =\begin{pmatrix} c_{m+1} \\ c_{m+2} \\ \vdots\\ c_n \end{pmatrix} CN=⎝⎜⎜⎜⎛cm+1cm+2⋮cn⎠⎟⎟⎟⎞ , C N T = ( c m + 1 c m + 2 ⋯ c n ) C_N^T =\begin{pmatrix} c_{m+1} \quad c_{m+2} \quad \cdots \quad c_n \end{pmatrix} CNT=(cm+1cm+2⋯cn) ;
目标函数为 m a x Z = C B T X B + C N T X N max Z = C_B^T X_B+ C_N^TX_N maxZ=CBTXB+CNTXN , 在目标函数中 , 有以下对应关系 :
同理 , C N C_N CN 与 X N X_N XN 矩阵计算 , C N T X N = ( c m + 1 c m + 2 ⋯ c n ) × ( x m + 1 x m + 2 ⋮ x n ) C_N^T X_N = \begin{pmatrix} c_{m+1} \quad c_{m+2} \quad \cdots \quad c_n \end{pmatrix} \times \begin{pmatrix} x_{m+1} \\ x_{m+2} \\ \vdots\\ x_n \end{pmatrix} CNTXN=(cm+1cm+2⋯cn)×⎝⎜⎜⎜⎛xm+1xm+2⋮xn⎠⎟⎟⎟⎞ , c m + 1 c_{m+1} cm+1 与 x m + 1 x_{m+1} xm+1 对应 , c n c_n cn 与 x n x_n xn 对应 ;
四、 B − 1 N B^{-1}N B−1N 分析
B − 1 N B^{-1}N B−1N 分析 :
线性规划约束条件是
B
X
B
+
N
X
N
=
b
BX_B + NX_N = b
BXB+NXN=b , 其系数矩阵是
(
B
N
)
\begin{pmatrix} \, B \quad N \, \end{pmatrix}
(BN) 样式的 , 在
B
X
B
+
N
X
N
=
b
BX_B + NX_N = b
BXB+NXN=b 两端都乘以
B
−
1
B^{-1}
B−1 , 然后移项得到
X B + B − 1 N X N = B − 1 b X_B + B^{-1}NX_N= B^{-1}b XB+B−1NXN=B−1b
, 此时当基变量是单位阵 I I I 时 , 非基变量就是 B − 1 N B^{-1}N B−1N , 系数矩阵是 ( I B − 1 N ) \begin{pmatrix} \, I \quad B^{-1}N \, \end{pmatrix} (IB−1N)
五、单纯形表
通过计算 ( C N T − C B T B − 1 N ) ( C_N^T - C_B^T B^{-1}N ) (CNT−CBTB−1N) , 是否是负数 , 可以判定当前的解是否是最优解 ;
将上述 C N T C_N^T CNT , C B T C_B^T CBT , B − 1 B^{-1} B−1 , N N N 等写在一个表中 , 该表就是如下单纯形表 ;
在上述单纯形表中 , 假设前 m m m 个向量是基变量 , 将基变量对应的矩阵 , 变换为单位阵 , 单位阵 I I I 与 B − 1 N B^{-1}N B−1N 如下图所示 :
六、最优解判定
目标函数推导 :
m a x Z = C B T ( B − 1 b − B − 1 N X N ) + C N T X N = C B T B − 1 b − C B T B − 1 N X N + C N T X N = b 0 + ( C N T − C B T B − 1 N ) X N = b 0 + σ m + 1 x m + 1 + σ m + 2 x m + 2 + ⋯ + σ n x n \begin{array}{lcl} max Z &=& C_B^T ( B^{-1}b - B^{-1}NX_N ) + C_N^TX_N \\\\ &=& C_B^T B^{-1}b - C_B^T B^{-1}NX_N + C_N^TX_N\\\\ &=& b_0 + ( C_N^T - C_B^T B^{-1}N )X_N \\\\ &=& b_0 + \sigma_{m+1} x_{m+1} + \sigma_{m+2} x_{m+2} + \cdots + \sigma_{n} x_{n} \\\\ \end{array} maxZ====CBT(B−1b−B−1NXN)+CNTXNCBTB−1b−CBTB−1NXN+CNTXNb0+(CNT−CBTB−1N)XNb0+σm+1xm+1+σm+2xm+2+⋯+σnxn
最终目标是计算 σ m + 1 , σ m + 2 , ⋯ , σ n \sigma_{m+1} , \sigma_{m+2} , \cdots , \sigma_{n} σm+1,σm+2,⋯,σn 系数是否小于等于 0 0 0 ;
上面已经推导出目标函数的系数是 ( C N T − C B T B − 1 N ) ( C_N^T - C_B^T B^{-1}N ) (CNT−CBTB−1N) 矩阵 :
-
C N T = ( c m + 1 c m + 2 ⋯ c n ) C_N^T=\begin{pmatrix} c_{m+1} \quad c_{m+2} \quad \cdots \quad c_n \end{pmatrix} CNT=(cm+1cm+2⋯cn)
-
C B T = ( c 1 c 2 ⋯ c m ) C_B^T = \begin{pmatrix} c_{1} \quad c_{2} \quad \cdots \quad c_m \end{pmatrix} CBT=(c1c2⋯cm)
-
B − 1 N = [ a 1 , m + 1 ⋯ a 1 n ⋮ ⋮ ⋮ a m , m + 1 ⋯ a m n ] B^{-1}N =\begin{bmatrix} &a_{1,m+1} & \cdots & a_{1n} & \\\\ &\vdots & \vdots & \vdots & \\\\ &a_{m,m+1} & \cdots & a_{mn} & \end{bmatrix} B−1N=⎣⎢⎢⎢⎢⎢⎡a1,m+1⋮am,m+1⋯⋮⋯a1n⋮amn⎦⎥⎥⎥⎥⎥⎤
( C N T − C B T B − 1 N ) = ( c m + 1 c m + 2 ⋯ c n ) − ( c 1 c 2 ⋯ c m ) × [ a 1 , m + 1 ⋯ a 1 n ⋮ ⋮ ⋮ a m , m + 1 ⋯ a m n ] ( C_N^T - C_B^T B^{-1}N ) = \begin{pmatrix} c_{m+1} \quad c_{m+2} \quad \cdots \quad c_n \end{pmatrix} - \begin{pmatrix} c_{1} \quad c_{2} \quad \cdots \quad c_m \end{pmatrix} \times \begin{bmatrix} &a_{1,m+1} & \cdots & a_{1n} & \\\\ &\vdots & \vdots & \vdots & \\\\ &a_{m,m+1} & \cdots & a_{mn} & \end{bmatrix} (CNT−CBTB−1N)=(cm+1cm+2⋯cn)−(c1c2⋯cm)×⎣⎢⎢⎢⎢⎢⎡a1,m+1⋮am,m+1⋯⋮⋯a1n⋮amn⎦⎥⎥⎥⎥⎥⎤
= ( σ m + 1 σ m + 2 ⋯ σ n ) = \begin{pmatrix} \sigma_{m+1} \quad \sigma_{m+2} \quad \cdots \quad \sigma_n \end{pmatrix} =(σm+1σm+2⋯σn)
σ j \sigma_j σj 个系数的公式如下 :
σ j = c j − ∑ c i a i j \sigma_j = c_j - \sum c_i a_{ij} σj=cj−∑ciaij
其中 c j c_j cj 对应的是非基变量在目标函数系数 , c i c_i ci 是基变量在目标函数中的系数 , a i j a_{ij} aij 是 B − 1 N B^{-1}N B−1N 中的矩阵向量 , 代表一列 ;
如 :
σ m + 1 = c m + 1 − ∑ i = 1 n c i a i , m + 1 = c m + 1 − c 1 a 1 , m + 1 − c 2 a 2 , m + 1 − ⋯ − c n a n , m + 1 \begin{array}{lcl} \sigma_{m+1} &=& c_{m+1} - \sum_{i = 1}^{n} c_i a_{i, m+1} \\\\ &=& c_{m+1} - c_1a_{1,m+1} - c_2a_{2,m+1} - \cdots - c_na_{n,m+1} \end{array} σm+1==cm+1−∑i=1nciai,m+1cm+1−c1a1,m+1−c2a2,m+1−⋯−cnan,m+1
如果所有的 σ j \sigma_j σj 系数值, 都小于等于 0 0 0 , 说明该基可行解就是最优解 ;
最优解判定示例 :
① 不是最优解的情况 : 如果最终计算的系数是 m a x Z = 88 + 3 x 6 − 4 x 7 max Z = 88 + 3x_6 - 4x_7 maxZ=88+3x6−4x7 , 此时 x 6 x_6 x6 的系数 σ 6 \sigma_6 σ6 大于 0 0 0 , 该函数不是最优解 ;
② 是最优解的情况 : 如果最终计算的系数是 m a x Z = 88 − 3 x 6 − 4 x 7 max Z = 88 - 3x_6 - 4x_7 maxZ=88−3x6−4x7 , 所有的系数都是小于等于 0 0 0 的值 , 该基矩阵对应的解就是最优解 ;
只要有一个系数不是小于等于 0 0 0 的 , 那么该解就不是最优解 , 就需要继续向下迭代 ;