在上一篇博客 【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 单纯形表 | 系数计算方法 | 根据系数是否小于等于 0 判定最优解 ) 博客中讲解了最优解判定原则 , 基本原理就是

  • 目标函数推导后的结果 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+(CNTCBTB1N)XN ;

  • 如果满足条件 : " X N = O X_N = O XN=O 时 , 目标函数取值最大 " , 那么该 B B B 矩阵对应的基可行解就是最优解 ( 根据定理得出 ) ;

  • ( C N T − C B T B − 1 N ) ( C_N^T - C_B^T B^{-1}N ) (CNTCBTB1N) 计算结果中 , 每个分量的值都小于等于 0 0 0 时 , 该解就是最优解 ;

  • C N C_N CN , C B C_B CB , B − 1 N B^{-1}N B1N 写入单纯形表中 , 方便计算 ;

  • ( 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} (CNTCBTB1N)=(cm+1cm+2cn)(c1c2cm)×a1,m+1am,m+1a1namn

  • 根据上述公式 , 每个系数的计算公式为 : σ j = c j − ∑ c i a i j \sigma_j = c_j - \sum c_i a_{ij} σj=cjciaij , 其中 c j c_j cj 对应的是非基变量在目标函数系数 , c i c_i ci 是基变量在目标函数中的系数 , a i j a_{ij} aij B − 1 N B^{-1}N B1N 中的矩阵向量 , 代表一列 ;


单纯形法解线性规划的三大问题 : 查找初始基可行解 , 判定是否是最优解 , 如何迭代基可行解 ;


在前几篇博客中讲解了 如何查找初始基可行解 , 与 判定是否是最优解 , 本篇博客中讲解 如何进行迭代 ;





一、单纯形法计算示例

使用单纯形法求解线性规划最优解 :


m a x Z = 3 x 1 + 4 x 2 { 2 x 1 + x 2 ≤ 40 x 1 + 3 x 2 ≤ 30 x j ≥ 0 ( j = 1 , 2 ) \begin{array}{lcl} max Z = 3x_1 + 4x_2 \\ \\ \begin{cases} 2 x_1 + x_2 \leq 40 \\\\ x_1 + 3x_2 \leq 30 \\ \\x_j \geq 0 & (j = 1 , 2 ) \end{cases}\end{array} maxZ=3x1+4x22x1+x240x1+3x230xj0(j=1,2)





二、转化标准形式

首先将该线性规划转为标准形式 :

参考 【运筹学】线性规划数学模型标准形式 ( 标准形式 | 目标函数转化 | 决策变量转化 | 约束方程转化 | 固定转化顺序 | 标准形式转化实例 ) 线性规划 普通形式 -> 标准形式 转化顺序说明 博客 , 先处理变量约束 , 再将不等式转为等式 , 最后更新目标函数 ;


① 变量约束 : 首先查看变量约束 , 两个变量都是 ≥ 0 \geq 0 0 的 , 符合线性规划标准形式要求 ;

② 不等式转换 : 两个等式都是 小于等于不等式 , 需要 在不等式左侧加入松弛变量 , 将其转为等式 ;

  • 2 x 1 + x 2 ≤ 40 2 x_1 + x_2 \leq 40 2x1+x240 , 左侧加入松弛变量 x 3 x_3 x3 , 变为 2 x 1 + x 2 + x 3 = 40 2 x_1 + x_2 + x_3 = 40 2x1+x2+x3=40
  • x 1 + 3 x 2 ≤ 30 x_1 + 3x_2 \leq 30 x1+3x230 , 左侧加入松弛变量 x 4 x_4 x4 , 变为 x 1 + 3 x 2 + x 4 = 30 x_1 + 3x_2 + x_4 = 30 x1+3x2+x4=30

③ 更新目标函数 : x 3 x_3 x3 x 4 x_4 x4 加入到目标函数中 , 得到新的目标函数 m a x Z = 3 x 1 + 4 x 2 + 0 x 3 + 0 x 4 max Z = 3x_1 + 4x_2 + 0x_3 + 0x_4 maxZ=3x1+4x2+0x3+0x4 ;



此时线性规划标准形式为 :

m a x Z = 3 x 1 + 4 x 2 + 0 x 3 + 0 x 4 { 2 x 1 + x 2 + x 3 + 0 x 4 = 40 x 1 + 3 x 2 + 0 x 3 + x 4 = 30 x j ≥ 0 ( j = 1 , 2 , 3 , 4 ) \begin{array}{lcl} max Z = 3x_1 + 4x_2 + 0x_3 + 0x_4 \\ \\ \begin{cases} 2 x_1 + x_2 + x_3 + 0x_4 = 40 \\\\ x_1 + 3x_2 + 0x_3 + x_4 = 30 \\\\ x_j \geq 0 & (j = 1 , 2 , 3 , 4 ) \end{cases}\end{array} maxZ=3x1+4x2+0x3+0x42x1+x2+x3+0x4=40x1+3x2+0x3+x4=30xj0(j=1,2,3,4)





三、查找初始基可行解

找基矩阵 :


上述线性规划标准形式的系数矩阵为 [ 2 1 1 0 1 3 0 1 ] \begin{bmatrix} &2 & 1 & 1 & 0 & \\\\ & 1 & 3 & 0 & 1 & \end{bmatrix} 21131001 , 其中子矩阵中有 [ 1 0 0 1 ] \begin{bmatrix} & 1 & 0 & \\\\ & 0 & 1 & \end{bmatrix} 1001 单位阵 I I I ;


使用该单位阵 I I I 作为基矩阵 , 单位阵肯定是可逆的 , 其对应的基解 , 解出后的值就是右侧的常数值 , 肯定大于等于 0 0 0 , 是基可行解 ;





四、列出单纯形表

列出单纯形表 :



c j c_j cj c j c_j cj 3 3 3 4 4 4 0 0 0 0 0 0
C B C_B CB 基变量系数 (目标函数) 基变量 常数 b b b x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3 x 4 x_4 x4 θ i \theta_i θi
0 0 0 ( 目标函数 x 3 x_3 x3 系数 c 3 c_3 c3 ) x 3 x_3 x3 40 40 40 2 2 2 1 1 1 1 1 1 0 0 0
0 0 0 ( 目标函数 x 4 x_4 x4 系数 c 4 c_4 c4) x 4 x_4 x4 30 30 30 1 1 1 3 3 3 0 0 0 1 1 1
σ j \sigma_j σj 3 3 3 4 4 4 0 0 0 0 0 0

基变量是 x 3 x_3 x3 x 4 x_4 x4 , 基变量在约束条件中的系数矩阵 [ 1 0 0 1 ] \begin{bmatrix} &1 & 0 & \\\\ &0 & 1 & \end{bmatrix} 1001 就是基矩阵 , 这是个单位阵 ;

基变量是 x 3 x_3 x3 x 4 x_4 x4 在目标函数中的系数是 ( 0 0 ) \begin{pmatrix} \quad 0 \quad 0 \quad \end{pmatrix} (00) ;

此时的基解是 ( 0 0 40 30 ) \begin{pmatrix} \quad 0 \quad \\ \quad 0 \quad \\ \quad 40 \quad \\ \quad 30 \quad \\ \end{pmatrix} 004030 , 该解是初始解 , 下面判定该解是否是最优解 ;





五、最优解判定

使用 检验数矩阵 ( C N T − C B T B − 1 N ) ( C_N^T - C_B^T B^{-1}N ) (CNTCBTB1N) 判断上述解 , 是否是最优解 , 该矩阵计算结果中所有的数 , 都是检验数 σ \sigma σ , 如果 所有的数都小于等于 0 0 0 , 说明该解就是最优解 ;


这里只求非基变量的检验数 , 即 x 1 x_1 x1 , x 2 x_2 x2 的检验数 ;


列出目标函数非基变量系数 ( C N T − C B T B − 1 N ) ( C_N^T - C_B^T B^{-1}N ) (CNTCBTB1N) 矩阵 :

  • 非基变量在目标函数中的系数矩阵 : C N T = ( 3 4 ) C_N^T=\begin{pmatrix} \quad 3 \quad 4 \quad \end{pmatrix} CNT=(34)

  • 基变量在目标函数中的叙述矩阵 : C B T = ( 0 0 ) C_B^T = \begin{pmatrix} \quad 0 \quad 0 \quad \end{pmatrix} CBT=(00)

  • B − 1 N B^{-1}N B1N 是系数矩阵中经过矩阵变换后 , 基变量系数是单位阵 I I I , 非基变量系数是 B − 1 N B^{-1}N B1N : B − 1 N = [ 2 1 1 3 ] B^{-1}N =\begin{bmatrix} &2 & 1 & \\\\ &1 & 3 & \end{bmatrix} B1N=2113


( C N T − C B T B − 1 N ) = C N T = ( 3 4 ) − ( 0 0 ) × [ 2 1 1 3 ] ( C_N^T - C_B^T B^{-1}N ) = C_N^T=\begin{pmatrix} \quad 3 \quad 4 \quad \end{pmatrix} - \begin{pmatrix} \quad 0 \quad 0 \quad \end{pmatrix} \times \begin{bmatrix} &2 & 1 & \\\\ &1 & 3 & \end{bmatrix} (CNTCBTB1N)=CNT=(34)(00)×2113

= ( σ 1 σ 2 ) = \begin{pmatrix} \quad \sigma_{1} \quad \sigma_{2} \quad \end{pmatrix} =(σ1σ2)


其中 σ 1 \sigma_{1} σ1 是目标函数中 x 1 x_1 x1 的系数 , σ 2 \sigma_{2} σ2 是目标函数中的 x 2 x_2 x2 的系数 ;

如果上述两个系数都小于等于 0 0 0 , 那么当 非基变量 X N = ( x 1 x 2 ) X_N =\begin{pmatrix} x_{1} \\ x_{2} \end{pmatrix} XN=(x1x2) 取值为 0 0 0 , 目标函数取值最大 ;


系数的计算公式为 : σ j = c j − ∑ c i a i j \sigma_j = c_j - \sum c_i a_{ij} σj=cjciaij , 其中 c j c_j cj 对应的是非基变量在目标函数系数 , c i c_i ci 是基变量在目标函数中的系数 , a i j a_{ij} aij B − 1 N B^{-1}N B1N 中的矩阵向量 , 代表一列 ;



σ 1 = c 1 − ( c 3 a 11 + c 4 a 12 ) \sigma_{1} = c_1 - ( c_3 a_{11} + c_4 a_{12} ) σ1=c1(c3a11+c4a12)

σ 1 = 3 − ( 0 × 2 ) − ( 0 × 1 ) = 3 \sigma_{1} =3 - (0 \times 2) - (0 \times 1) = 3 σ1=3(0×2)(0×1)=3 , 是从下面的单纯形表中的如下位置提取的数值 ;

【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 线性规划求解示例 )_单纯形法

σ 2 = c 2 − ( c 3 a 21 + c 4 a 22 ) \sigma_{2} = c_2 - ( c_3 a_{21} + c_4 a_{22} ) σ2=c2(c3a21+c4a22)

σ 2 = 4 − ( 0 × 1 ) − ( 0 × 3 ) = 4 \sigma_{2} =4 - (0 \times 1) - (0 \times 3) = 4 σ2=4(0×1)(0×3)=4 , 是从下面的单纯形表中的如下位置提取的数值 ;

【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 线性规划求解示例 )_运筹学_02


如果这两个系数 , 如果都小于等于 0 0 0 , 该 基可行解 ( 0 0 40 30 ) \begin{pmatrix} \quad 0 \quad \\ \quad 0 \quad \\ \quad 40 \quad \\ \quad 30 \quad \\ \end{pmatrix} 004030 才是最优解 , 这两个系数都大于 0 0 0 , 因此不是最优解 ;