线性规划之单纯形法【超详解+图解】

1.作用

单纯形法是解决线性规划问题的一个有效的算法。线性规划就是在一组线性约束条件下,求解目标函数最优解的问题。

 

2.线性规划的一般形式

在约束条件下,寻找目标函数z的最大值。

3.线性规划的可行域


满足线性规划问题约束条件的所有点组成的集合就是线性规划的可行域。若可行域有界(以下主要考虑有界可行域),线性规划问题的目标函数最优解必然在可行域的顶点上达到最优。


单纯形法就是通过设置不同的基向量,经过矩阵的线性变换,求得基可行解(可行域顶点),并判断该解是否最优,否则继续设置另一组基向量,重复执行以上步骤,直到找到最优解。所以,单纯形法的求解过程是一个循环迭代的过程。


图1  可行域

4.线性规划的标准形式


在说明单纯形法的原理之前,需要明白线性规划的标准形式。因为单纯形算法是通过线性规划的标准形来求解的。一般,规定线性规划的标准形式为:

写成矩阵形式:

标准形的形式为:

    1)目标函数要求max

    2)约束条件均为等式

    3)决策变量为非负约束


普通线性规划化为标准形:

    1)若目标函数为最小化,可以通过取负,求最大化

        2)约束不等式为小于等于不等式,可以在左端加入非负松弛变量,转变为等式,比如:

    同理,约束不等式为大于等于不等式时,可以在左端减去一个非负松弛变量,变为等式。

    3)若存在取值无约束的变量,可转变为两个非负变量的差,比如:

本文最开始的线性规划问题转化为标准形为:

5.单纯形法

5.1几何意义

在标准形中,有m个约束条件(不包括非负约束),n个决策变量,且(n>=m)。首先,选取m个基变量 ,基变量对应约束系数矩阵的列向量线性无关。通过矩阵的线性变换,基变量可由非基变量表示:

如果令非基变量等于0,可求得基变量的值 :

如果为可行解的话,Ci大于0。那么它的几何意义是什么呢?

还是通过上述具体的线性规划问题来说明。

如果选择x2、x3为基变量,那么令x1、x4等于0,可以去求解基变量x2、x3的值。对系数矩阵做行变换,如下所示,x2=9/2,x3=15/2

X1=0表示可行解在x轴上;X4=0表示可行解在x1+2x2=9的直线上。那么,求得的可行解即表示这两条直线的交点,也是可行域的顶点,如图所示:


图2

       所以,通过选择不同的基变量,可以获得不同的可行域的顶点。

5.2如何判断最优


如前所述,基变量可由非基变量表示:

目标函数z也可以完全由非基变量表示:

当达到最优解时,所有的应小于等于0。当存在j >0时,当前解不是最优解,为什么?

当前的目标函数值为z0,其中所有的非基变量值均取0。由之前分析可知,=0代表可行域的某个边界,是的最小值。如果可行解逐步离开这个边界,会变大,因为

  • 38
    点赞
  • 241
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
线性规划是一种最优化问题,目标是在一组线性约束条件下,找到一个最优的线性方程组解。单纯形法是一种求解线性规划问题的算法。 下面我会通过一个例题来详细解释单纯形法的具体步骤: 假设我们有一个线性规划问题,如下所示: Maximize: 3x1 + 4x2 Subject to: 2x1 + x2 <= 8 x1 + 2x2 <= 6 x1, x2 >= 0 首先,我们需要将这个问题转化为标准形式。为了达到这个目的,我们引入两个松弛变量s1和s2,并将不等式约束转化为等式约束。此时,我们的问题变为: Maximize: 3x1 + 4x2 Subject to: 2x1 + x2 + s1 = 8 x1 + 2x2 + s2 = 6 x1, x2, s1, s2 >= 0 接下来,我们需要将这个问题表示为一个线性方程组的形式。我们可以使用一个表格来表示问题的各个部分,如下所示: | | x1 | x2 | s1 | s2 | RHS | |---|----|----|----|----|-----| | | 3 | 4 | 0 | 0 | 0 | | s1| 2 | 1 | 1 | 0 | 8 | | s2| 1 | 2 | 0 | 1 | 6 | 这个表格称为单纯形表。每一行对应一个约束条件,每一列对应一个变量或松弛变量。RHS列表示右侧的常数项。 现在,我们需要找到一个初始基本可行解。这意味着我们需要选择一些变量来使得方程组的解满足所有的约束条件,并且这些变量的值都应该是非负的。我们可以选择s1和s2作为初始基本变量,它们的值都为0。 接下来,我们需要使用单纯形法来寻找最优解。单纯形法的基本思想是,在当前基本可行解的基础上,找到一个非基本变量,使得将它增加到一个非负值时,我们可以得到更优的解。这个过程一直进行,直到找不到更优的解为止。 现在,我们需要找到一个进入变量。这个变量应该是一个非基本变量,它能够使得目标函数增加。在这个例子中,我们可以看到,x1和x2都能够使得目标函数增加,但是我们需要选择其中一个。我们选择x1作为进入变量。 接下来,我们需要找到一个离开变量。这个变量应该是一个基本变量,它能够使得进入变量增加到一个非负值时,所有的约束条件都能够被满足。在这个例子中,我们可以看到,s1和s2都能够满足这个条件,但是我们需要选择其中一个。我们选择s1作为离开变量。 现在,我们需要使用行变换来更新单纯形表。我们首先将s1行除以2,使得x1系数为1。然后,我们将s1行减去2倍的x1行,使得x1系数变为0。最后,我们将目标函数行减去3倍的x1行,使得目标函数系数减少3。经过这些操作,我们得到了下面的单纯形表: | | x1 | x2 | s1 | s2 | RHS | |---|----|----|----|----|-----| | 0 | 1 | 0 | 1/2| 0 | 4 | | s1| 0 | 1 | 1/2| 0 | 4 | | s2| 0 | 2 | -1 | 1 | 2 | 现在,我们需要重新选择进入变量。由于x2的系数比x1更大,我们选择x2作为进入变量。 接下来,我们需要选择离开变量。在这个例子中,我们可以看到,s2是唯一满足所有约束条件的基本变量。因此,我们选择s2作为离开变量。 现在,我们需要使用行变换来更新单纯形表。我们首先将s2行除以2,使得x2系数为1。然后,我们将s2行减去2倍的x2行,使得x2系数变为0。最后,我们将目标函数行减去4倍的x2行,使得目标函数系数减少16。经过这些操作,我们得到了下面的单纯形表: | | x1 | x2 | s1 | s2 | RHS | |---|----|----|----|----|-----| | 0 | 1 | 0 | 1/4| 1/2| 5 | | s1| 0 | 1 | 1/4|-1/2| 1 | | s2| 0 | 0 | -3/2|1 | 2 | 现在,我们可以看到所有的系数都是非负的。因此,我们得到了一个最优解,它的值为5。此时,x1的值为1,x2的值为1,s1的值为0,s2的值为0。 这就是单纯形法的基本步骤。需要注意的是,在实际应用中,可能会出现无解或者无界的情况。在这种情况下,我们需要使用其他的算法来解决问题
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值