一、单纯形法计算示例 ( 上篇博客回顾总结 )

在上一篇博客 【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 线性规划求解示例 ) 博客给出了一个线性规划的示例 , 并进行了 查找初始基可行解 , 和 判定该基可行解是否是最优解 ;


在目标函数中 , 将基可行解代入目标函数中

  • 不是最优解情况 : 非基变量的系数都是大于 0 0 0 的数值 , 该基可行解不是最优解 ;
  • 是最优解情况 : 只有当 非基变量的系数都是小于等于 0 0 0 的数时 , 该基可行解才是最优解 ;

线性规划标准形式为 :

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)



单纯形表 :

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

选择 [ 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 40 30 ) \begin{pmatrix} \quad 0 \quad \\ \quad 0 \quad \\ \quad 40 \quad \\ \quad 30 \quad \\ \end{pmatrix} 004030 , 经过计算 , 其目标函数中 x 1 x_1 x1 的系数是 3 3 3 , x 2 x_2 x2 的系数是 4 4 4 , 都是大于 0 0 0 的数 , 该基可行解不是基解 , 继续向下迭代 ;





二、迭代原则

上述解出的基可行解 ( 0 0 40 30 ) \begin{pmatrix} \quad 0 \quad \\ \quad 0 \quad \\ \quad 40 \quad \\ \quad 30 \quad \\ \end{pmatrix} 004030 不是最优解 , 那么 需要迭代下一个基可行解 , 下面开始讲解 , 如何进行迭代 ;



上述的解中 , 非基变量 x 1 x_1 x1 x 2 x_2 x2 0 0 0 不是最好的选择 , 那么 这两个变量最好取非 0 0 0 的值 , 求解线性规划的思路是 :

  • 在无穷多个可行解中迭代 , 得到最优解 ;

  • 上述思路可以转化成在有限个基可行解中迭代 , 得到最优解 ;

  • 无限 -> 有限 : 可行解 是无限个的 , 基可行解 是有限个 ;





三、最优解推导

x 1 , x 2 x_1 , x_2 x1,x2 取值为 0 0 0 不是最优解 , 约束条件要求这两个变量必须大于等于 0 0 0

x j ≥ 0 ( j = 1 , 2 , 3 , 4 ) x_j \geq 0 (j = 1 , 2 , 3 , 4 ) xj0(j=1,2,3,4)

, 那么只能取值大于 0 0 0 , 下面讨论这两个变量取值大于 0 0 0 的情况 ;



x 1 x_1 x1 的系数是 3 3 3 , x 2 x_2 x2 的系数是 4 4 4 , 如果 x 3 , x 4 x_3 , x_4 x3,x4 0 0 0 , 目标函数 m a x Z = 0 + 3 x 1 + 4 x 2 maxZ = 0 + 3x_1 + 4x_2 maxZ=0+3x1+4x2 , 将 x 1 , x 2 x_1 , x_2 x1,x2 任意一个增大 , 其目标函数的值都会增大 ;

  • 增大 x 2 x_2 x2 : 此时可以选择将 x 2 x_2 x2 增大 , x 2 x_2 x2 增加 1 1 1 , 目标函数就会增加 4 4 4 ;
  • 增大 x 1 x_1 x1 : 也可以选择将 x 1 x_1 x1 增大 , x 1 x_1 x1 增加 1 1 1 , 目标函数就会增加 3 3 3 , 只要是目标函数随变量增加而增加即可 ;


增大 x 2 x_2 x2 , x 2 x_2 x2 不能无限增大 , 其需要受到 { 2 x 1 + x 2 + x 3 + 0 x 4 = 40 x 1 + 3 x 2 + 0 x 3 + x 4 = 30 \begin{cases} 2 x_1 + x_2 + x_3 + 0x_4 = 40 \\\\ x_1 + 3x_2 + 0x_3 + x_4 = 30 \end{cases} 2x1+x2+x3+0x4=40x1+3x2+0x3+x4=30 约束方程约束 ,

  • 受第一个方程约束 , 增大 x 2 x_2 x2 , 最多是 x 1 , x 3 , x 4 x_1, x_3, x_4 x1,x3,x4 都取值 0 0 0 , x 2 x_2 x2 理论上最大值时 40 40 40 ;
  • 受第一个方程约束 , 增大 x 2 x_2 x2 , 最多是 x 1 , x 3 , x 4 x_1, x_3, x_4 x1,x3,x4 都取值 0 0 0 , x 2 x_2 x2 理论上最大值时 10 10 10 ;

x 2 x_2 x2 最大就能取值到 10 10 10 , 否则无法满足第二个约束方程 , 如果 x 2 x_2 x2 40 40 40 , 那么在第二个方程中 , 就会出现有变量为负数 , 就不符合约束条件了 , 因此 x 2 x_2 x2 最大只能取到 10 10 10 ;


那么开始增加 x 2 x_2 x2 的值 , 目标函数 m a x Z = 0 + 3 x 1 + 4 x 2 maxZ = 0 + 3x_1 + 4x_2 maxZ=0+3x1+4x2 , 增大 x 2 x_2 x2 , 如果 x 2 x_2 x2 0 0 0 增加到 10 10 10 , 目标函数可以增加 40 40 40 ,


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 40 40 40 ( θ 3 \theta_3 θ3 )
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 10 10 10 ( θ 4 \theta_4 θ4 )
σ j \sigma_j σj 3 3 3 4 4 4 0 0 0 0 0 0




四、出基与入基

基可行解 : 选择可行基 , 自然会产生基变量 ( 可行基对应变量 ) , 与非基变量 , 非基变量取值为 0 0 0 , 解出基变量 , 此时基变量的解与 0 0 0 组合成基可行解 ;


上一次的初始基可行解选择时 , x 3 x_3 x3 x 4 x_4 x4 是基变量 , x 1 x_1 x1 x 2 x_2 x2 是非基变量 , 非基变量取值必须为 0 0 0 ;

如果 x 2 x_2 x2 变成了非 0 0 0 取值 , 此时就需要将 x 2 x_2 x2 设置成基变量 ;


基变量的个数是固定的 , 本示例中是 2 2 2 个 , 如果将 x 2 x_2 x2 设置成基变量 , 那么就需要将之前的 x 3 x_3 x3 x 4 x_4 x4 中其中一个基变量替换成 x 2 x_2 x2 , 被替换的基变量变成非基变量 ;


因此该迭代的过程又称为出基 , 入基过程 ;

  • 出基 : x 3 , x 4 x_3 , x_4 x3,x4 有一个变量设置成非基变量 , 称为出基 ;
  • 入基 : x 2 x_2 x2 设置成基变量 , 称为入基 ;




五、出基与入基变量选择

入基变量选择 : 具体哪个变量入基 , 是由检验数决定的 , 检验数 σ j \sigma_j σj 较大的入基 ; x 2 x_2 x2 的检验数 σ 2 \sigma_2 σ2 4 4 4 , 大于 σ 1 = 3 \sigma_1 = 3 σ1=3 , 因此这里选择 x 2 x_2 x2 作为入基变量 ;


出基变量选择 : 系数矩阵中 , 常数列 b = ( 40 30 ) b =\begin{pmatrix} \quad 40 \quad \\ \quad 30 \quad \end{pmatrix} b=(4030) , 分别除以除以入基变量大于 0 0 0 的系数列 ( 1 3 ) \begin{pmatrix} \quad 1 \quad \\ \quad 3 \quad \end{pmatrix} (13) , 得出结果是 ( 40 10 ) \begin{pmatrix} \quad 40 \quad \\ \quad 10 \quad \end{pmatrix} (4010) , 然后选择一个最小值 10 10 10 , 查看该最小值对应的变量是 x 4 x_4 x4 , 选择该变量作为出基变量 ;

【运筹学】线性规划数学模型 ( 单纯形法 | 迭代原则 | 入基 | 出基 | 线性规划求解示例 )_迭代原则


这里将出基变量与入基变量选择好了 , x 2 x_2 x2 的检验数较大 , 选择 x 2 x_2 x2 作为入基变量 , x 4 x_4 x4 θ 4 \theta_4 θ4 较小 , 选择 x 4 x_4 x4 作为出基变量 ;


入基出基操作完成后 , 基变量变成了 x 3 , x 2 x_3, x_2 x3,x2 ;