最优化技术——单纯形法

最优化技术——单纯形法

说明

这个文章的大部分内容(几乎全部)都来自于我最优化课程的课程笔记。主要来源是重庆大学文静老师的PPT,个人主要用于整理、归纳,如果有侵权等问题,我会在第一时间将博客撤销。

单纯形法的流程介绍

在这里插入图片描述

直观的去看这个流程,有一点点像前面的一些函数的优化方法。但是在枚举的过程中,有一些问题值得关注:

  • 枚举的起点?
  • 如何判断当前已经是最优解了?
  • 如何在当前解的前提下找到一个更好的解?

单纯形法的迭代原理

通过一个例子来讲解单纯形法的基本原理

我们这样一个线性规划问题:

在这里插入图片描述

因为这里主要讨论单纯形法,所以我们不再纠结怎么化成标准型。

  1. 选择初始基,确定基本可行解

    这里使用的是观察法(我:???),观察系数矩阵中是否含有现成的单位阵,如果有的话就直接用现成的单位阵作为基。

    在这里我们选定的基变量为: ( x 3 , x 4 , x 5 ) (x_3,x_4,x_5) (x3,x4,x5)

    选定的基矩阵为单位矩阵 I 3 I_3 I3

    找到的基本可行解:

    [ x B x N ] = [ B − 1 b 0 ] \left[ \begin{matrix}x_B\\x_N \end{matrix} \right] = \left[ \begin{matrix}B^{-1}b\\0 \end{matrix} \right] [xBxN]=[B1b0]

    即: x 1 , x 2 , x 3 , x 4 , x 5 = 0 , 0 , 8 , 16 , 12 x_1,x_2,x_3,x_4,x_5 = 0,0,8,16,12 x1,x2,x3,x4,x5=0,0,8,16,12

    Q:为什么要找单位阵?

    A:我们都学过《线性代数》,线代告诉我们,一个矩阵能够被化作单位矩阵和这个矩阵可逆是等价的,有根据上一节讲的,在求解过程中需要对基去逆,所以综上所述,需要找一个单位阵/可以化成单位阵的。

  2. 判断当前解是否为最优解

    将基变量使用非基变量表示,使用非基变量表示目标函数。

    x 3 = 8 − x 1 − 2 x 2 x_3 = 8 - x_1 - 2x_2 x3=8x12x2

    x 4 = 16 − 4 x 1 x_4 = 16 - 4x_1 x4=164x1

    x 5 = 12 − 4 x 2 x_5 = 12 - 4x_2 x5=124x2

    Z = 2 x 1 + 3 x 2 Z = 2x_1 +3x_2 Z=2x1+3x2

    我们的非基变量向上增加,目标函数 Z Z Z的值也是增加的,所以说现在的基本可行解的取值不是最优的。那么什么时候它的取值才是最优的呢?

    当非基变量的值增加,而目标函数的值不增加的时候,就是最优的。

    也就是说当目标函数中的系数也就是检验数都小于等于0时,就是最优解,这里包括两种情况:

    • 检验数为0 : 是最优解,但并不是唯一的最优解,表示存在无数个最优解
    • 检验数为1:是唯一的最优解
  3. 如何转到下一个基本可行解

    回到我们的目标函数:

    Z = 2 x 1 + 3 x 2 Z = 2x_1 + 3 x_2 Z=2x1+3x2

    从这个目标函数中我们可以看出, x 2 x_2 x2对目标函数的贡献比 x 1 x_1 x1大。要让 x 2 x_2 x2的取值从0变成正值,所以 x 2 x_2 x2从非基变量转为基变量,称作进基变量

    这里就有一个问题,有一个变量从非基变量变成基变量,就意味着会有一个基变量变成非基变量,这个变成非基变量的变量叫做离基变量

    离基变量的选择:

    这里我们需要回到用非基变量表示基变量的那一步:

    x 3 = 8 − x 1 − 2 x 2 x_3 = 8 - x_1 - 2x_2 x3=8x12x2

    x 4 = 16 − 4 x 1 x_4 = 16 - 4x_1 x4=164x1

    x 5 = 12 − 4 x 2 x_5 = 12 - 4x_2 x5=124x2

    那么在挑选离基变量的时候,我们将收敛的最快的(当进基变量增大时,最先到0的)拿出去。

    按照这个方法,我们新的基变量是 ( x 2 , x 3 , x 4 ) (x_2,x_3,x_4) (x2,x3,x4),非基变量是: ( x 1 , x 5 ) (x_1,x_5) (x1,x5)

    然后再回到第一步开始检验,直到得到最优解为止。

单纯形表

单纯形表的构建

在这里插入图片描述

这里我们不再关注怎么加松弛变量之类的问题了

在这里插入图片描述
单纯形表中:

  • X B X_B XB:表示当前的基变量,初始挑选单位阵为初始基,构成向量B

  • C B C_B CB:代表当前基变量在目标函数中的系数向量

  • b j b_j bj:代表约束条件的右端的b值

  • c j c_j cj:代表目标函数的系数,在这里 c = ( 3 , 4 , 0 , 0 ) c= (3,4,0,0) c=3400

  • x 1 , x 2 . . . x_1,x_2... x1,x2...下面的数字:约束条件的系数矩阵

  • σ j \sigma_j σj:检验数, σ j = c j − Σ c i a i j \sigma_j = c_j-\Sigma c_ia_{ij} σj=cjΣciaij ,这里的 a i j a_{ij} aij是系数矩阵

    σ 1 \sigma_1 σ1为例, σ 1 = 3 − ( 2 ∗ 0 + 1 ∗ 0 ) = 3 \sigma_1 = 3-( 2*0+1*0)=3 σ1=3(20+10)=3

找到入基变量

方法:找检验数最大的,再上一张表里面, x 2 x_2 x2的检验数最大,所以将作为入基变量

找到出基变量

方法:找 θ \theta θ,我们顺着上面来,我们现在确定了 x 2 x_2 x2就是所谓的入基变量,下面,开始计算:

θ = b j x 2 \theta = \frac{b_j}{x_2} θ=x2bj

在上面的表中, θ 3 = 40 , θ 4 = 10 \theta_3= 40,\theta_4 = 10 θ3=40,θ4=10

值得注意的是:当 x 2 x_2 x2的值为负值的时候,就不需要求 θ \theta θ了。

到此为止,谁的 θ \theta θ值越小就选谁当出基变量

总体操作

找到入基变量,出基变量之后,列一张新的单纯形表,并且以此往复即可。当所有非基变量都为负数或零时停止,这时最优解就是:基变量取得到的值,非基变量取0.

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值