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

2023-03-28 16:22:31 浏览数 (1)

文章目录

  • 一、单纯形法计算示例
  • 二、转化标准形式
  • 三、查找初始基可行解
  • 四、列出单纯形表
  • 五、最优解判定

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

  • 目标函数推导后的结果
maxZ = b_0 ( C_N^T - C_B^T B^{-1}N )X_N

;

  • 如果满足条件 : "
X_N = O

时 , 目标函数取值最大 " , 那么该

B

矩阵对应的基可行解就是最优解 ( 根据定理得出 ) ;

( C_N^T - C_B^T B^{-1}N )

计算结果中 , 每个分量的值都小于等于

0

时 , 该解就是最优解 ;

C_N

,

C_B

,

B^{-1}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}
  • 根据上述公式 , 每个系数的计算公式为 :
sigma_j = c_j - sum c_i a_{ij}

, 其中

c_j

对应的是非基变量在目标函数系数 ,

c_i

是基变量在目标函数中的系数 ,

a_{ij}

B^{-1}N

中的矩阵向量 , 代表一列 ;

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

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

一、单纯形法计算示例


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

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}

二、转化标准形式


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

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

① 变量约束 : 首先查看变量约束 , 两个变量都是

geq 0

的 , 符合线性规划标准形式要求 ;

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

2 x_1 x_2 leq 40

, 左侧加入松弛变量

x_3

, 变为

2 x_1 x_2 x_3 = 40
x_1 3x_2 leq 30

, 左侧加入松弛变量

x_4

, 变为

x_1 3x_2 x_4 = 30

③ 更新目标函数 :

x_3

x_4

加入到目标函数中 , 得到新的目标函数

max Z = 3x_1 4x_2 0x_3 0x_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}

三、查找初始基可行解


找基矩阵 :

上述线性规划标准形式的系数矩阵为

begin{bmatrix} &2 & 1 & 1 & 0 & \\ & 1 & 3 & 0 & 1 & end{bmatrix}

, 其中子矩阵中有

begin{bmatrix} & 1 & 0 & \\ & 0 & 1 & end{bmatrix}

单位阵

I

;

使用该单位阵

I

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

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

c_j
c_j
3
4
0
0
C_B

基变量系数 (目标函数)基变量常数

b
x_1
x_2
x_3
x_4
theta_i
0

( 目标函数

x_3

系数

c_3

)

x_3
40
2
1
1
0
0

( 目标函数

x_4

系数

c_4

)

x_4
30
1
3
0
1
sigma_j
3
4
0
0

基变量是

x_3

x_4

, 基变量在约束条件中的系数矩阵

begin{bmatrix} &1 & 0 & \\ &0 & 1 & end{bmatrix}

就是基矩阵 , 这是个单位阵 ;

基变量是

x_3

x_4

在目标函数中的系数是

begin{pmatrix} quad 0 quad 0 quad end{pmatrix}

;

此时的基解是

begin{pmatrix} quad 0 quad \ quad 0 quad \ quad 40 quad \ quad 30 quad \ end{pmatrix}

, 该解是初始解 , 下面判定该解是否是最优解 ;

五、最优解判定


使用 检验数矩阵

( C_N^T - C_B^T B^{-1}N )

判断上述解 , 是否是最优解 , 该矩阵计算结果中所有的数 , 都是检验数

sigma

, 如果 所有的数都小于等于

0

, 说明该解就是最优解 ;

这里只求非基变量的检验数 , 即

x_1

,

x_2

的检验数 ;

列出目标函数非基变量系数

( C_N^T - C_B^T B^{-1}N )

矩阵 :

  • 非基变量在目标函数中的系数矩阵 :
C_N^T=begin{pmatrix} quad 3 quad 4 quad end{pmatrix}
  • 基变量在目标函数中的叙述矩阵 :
C_B^T = begin{pmatrix} quad 0 quad 0 quad end{pmatrix}
B^{-1}N

是系数矩阵中经过矩阵变换后 , 基变量系数是单位阵

I

, 非基变量系数是

B^{-1}N

:

B^{-1}N =begin{bmatrix} &2 & 1 & \\ &1 & 3 & end{bmatrix}
( 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}
= begin{pmatrix} quad sigma_{1} quad sigma_{2} quad end{pmatrix}

其中

sigma_{1}

是目标函数中

x_1

的系数 ,

sigma_{2}

是目标函数中的

x_2

的系数 ;

如果上述两个系数都小于等于

0

, 那么当 非基变量

X_N =begin{pmatrix} x_{1} \ x_{2} end{pmatrix}

取值为

0

时 , 目标函数取值最大 ;

系数的计算公式为 :

sigma_j = c_j - sum c_i a_{ij}

, 其中

c_j

对应的是非基变量在目标函数系数 ,

c_i

是基变量在目标函数中的系数 ,

a_{ij}

B^{-1}N

中的矩阵向量 , 代表一列 ;

sigma_{1} = c_1 - ( c_3 a_{11} c_4 a_{12} )
sigma_{1} =3 - (0 times 2) - (0 times 1) = 3

, 是从下面的单纯形表中的如下位置提取的数值 ;

sigma_{2} = c_2 - ( c_3 a_{21} c_4 a_{22} )
sigma_{2} =4 - (0 times 1) - (0 times 3) = 4

, 是从下面的单纯形表中的如下位置提取的数值 ;

如果这两个系数 , 如果都小于等于

0

, 该 基可行解

begin{pmatrix} quad 0 quad \ quad 0 quad \ quad 40 quad \ quad 30 quad \ end{pmatrix}

才是最优解 , 这两个系数都大于

0

, 因此不是最优解 ;

0 人点赞