线性规划之单纯形法

转载请注明出处 http://www.jianshu.com/p/dd0761a2fdfd
作者:@贰拾贰画生


单纯形法应用于求解线性规划(LP)问题中最优解。其主要思想是,沿着可行解区域的边界走,从一个点跳到另一个点,直到找到最优解。

一. 详述单纯形法

单纯形法应用在线性规划的标准模型上,任何一个线性规划的一般形式都可以化为标准模型。
线性规划模型的一般形式为:



把它转换为标准型是要求所有的约束都是等式约束,且所有的决策变量非负。
如下面的形式:


举个例子:




那么很容易就可以写出这个线性规划问题的数学模型:



这是一般形式,我们转换为标准型:

是的,我们增加了三个变量x3, x4, x5。这样就把不等式约束变成了等式约束,且决策变量都非负。

再重复一遍,线性规划的标准型必为以下形式:


它有三个基本要素:1. 一个明确的目标函数;2. 等式约束; 3. 决策变量非负。

对于标准型我们有两个基本假设:
1. 系数矩阵A的行向量线性无关。
2. 系数矩阵A的列数大于其行数,即n>m。因为如果n<m,那么不满足1, 如果n=m,那么该线性规划问题有唯一解,既然有唯一解,那就没有优化的必要了。所以,必有n>m。

回到刚才那个例子,我们可以将找个标准型写为如下形式:



这个例子m = 3, n = 5。那么我们可以用三个变量表示所有的五个变量,这三个变量我们称之为基变量。上图中,x3, x4, x5的系数是一个单位阵。我们把这种形式的等式约束称为典式。
观察这个典式,我们可以很容易的看出其一个基本可行解:(0, 0, 15, 24, 5)T,即非基变量等于0,基变量等于等式右边的常数。这个解,我们可以把它想象成基本可行解区域的一个顶点,我们知道最优解也在顶点上,那么我们只要沿着边界找这个最优顶点就可以了。

对于顶点(0, 0, 15, 24, 5)T,它的x3, x4, x5是基变量,那么与该顶点相邻的其他顶点的基变量有什么关系呢?事实上,与之相邻的顶点的所有基变量中只有一个基变量发生了变化。这是可以验证的。所以,接下来的工作就是从x1, x2中选一个非基变量进基成为基变量,从x3, x4, x5中选一个基变量出基成为非基变量。

那么问题来了,我们怎么选择进基变量和出基变量?

假设我们想要x2进基,那么根据基本可行解的表示式,我们必须通过初等行变换的形式让x2只出现在一个等式约束中,就是把x2的系数变成(1,0,0)T或(0,1,0)T或(0,0,1)T的形式。
假设我们把x2变成(0,0,1)T的形式,初等行变换后得到:


我们发现等式右边的常数有一个变成负数-2,这是不可以的,因为我们知道决策变量有非负约束。所以,在选择进行初等行变换时,应注意选择(右边常数/进基变量系数)最小的那一行。这个例子中,x2进基,15/5 = 3, 24/2 = 12, 5/1=5,3最小,那么将x2系数转换为(1,0,0)T的形式,与此同时,出基变量也就确定了那就是x3。所以,我们得到:

其基本可行解为(0,3,0,18,2)T。
若此时,我们又想让x3进基,应当注意只能将其系数化为(1,0,0)T的形式,因为x3第二行与第三行的系数都为负数,若保留此两行会将右边的常数变成负数。所以,只能保留进基变量系数的非负行。

现在对于例子



我们得到了两个基本可行解X1 = (0,0,15,24,5)T, X2 = (0,3,0,18,2)T,记目标函数f(X) = 2x1 + x2 + 0x3 + 0x4 + 0x5
则f(X1) = 0, f(X2) = 3
那么我们怎么找到最优解呢?
我们知道 X2 = (0,3,0,18,2)T 的约束的表示式为:



从这个表示式中我们可以得到基变量和非基变量的函数关系,将这个函数关系带入到f(X) = 2x1 + x2 + 0x3 + 0x4 + 0x5中,就得到
f(X) = 3 + 2x1 - 0.2x3 = f(X2) + 2x1 - 0.2x3,(只保留非基变量x1,x3)

发现什么没有?

对于可行解X2 = (0,3,0,18,2)T,x1,x3是非基变量啊,非基变量是0啊。但是,我们下一步不是选择进基变量吗,进基变量不是从非基变量里选吗,我们选x1啊,为啥?x1的系数是正数2啊!我们这个例子是求z的最大值,如果x1进基,那么必然会让f(X)增大,因为我们的决策变量都是正数,正数乘正数还是正数,增量肯定是大于0的。我们看到x3的系数是-0.2,如果让x3进基的话,增量肯定是小于0的。

如果x1, x3的系数都大于0怎么办?那随便选啊。
如果x1,x3的系数都小于0怎么办?哈哈,有人可能就意识到了,非基变量的系数都小于0,选谁进基都会造成f(X)变小,我们不是求最大吗?那我们谁也不选啊,这个问题已经结束了,我们已经找到最优解了!

所以,选择进基变量的问题,以及判断找到最优解的问题就都解决了。

我们一般使用单纯形表来直观表示这个过程。
还是可行解X2 = (0,3,0,18,2)T,它对应的单纯形表如下:



最左边一列是基变量,最右边一列是约束右边的常数项,中间一坨是决策变量的系数。最下边一行是目标函数z = 2x1 + x2 + 0x3 + 0x4 + 0x5。最下面一行决策变量的系数我们称之为检验数。
我们通过行变换将最后一行的基变量前面系数变成0,就得到下面的单纯形表:



我们称之为X2的单纯形表。利用这个表,我们可以很容易的获得让x1进基后的基本可行解的单纯形表,先确定让x5出基。

然后通过行变换将x1所在列除了第三行以外的系数变成0,就可得到新的基本可行解对应的单纯形表:

从这个表中我们可以得到以下信息:

  1. X3 = (2,3,0,6,0)T是基本可行解;
  2. X3的目标函数值是z=7;
  3. x3的检验数大于0,让x3进基能够增加目标函数值。

然后通过刚才的方法让x3进基,得到新的基本可行解的单纯形表:



从这个表我们可以得知:

  1. X4 = (3.5,1.5,7.5,0,0)T是基本可行解;
  2. X4的目标函数值是z=8.5;
  3. 非基变量的的检验数都小于0,任何非基变量进基都不能使目标函数值增加。

至此,我们已经得到该问题的最优解X4。

二. 几种特殊情况

1. 退化问题

我们知道,对于一个基本可行解,一般情况下它的基变量是大于0,非基变量等于0。退化情况是,我们有一个基变量也等于0。那么,这个基本可行解就会对应于多个可行基阵。
举个例子:



X = (3,3,0,0,0)T是该问题的可行解
我们可以令x3,x4为非基变量, 也可以令x3,x5或x4,x5为非基变量。

退化情况存在的问题在于,经过一次进出基迭代后得到的是同一个基本可行解,因此有可能出现迭代算法在一个基本可行解的几个基矩阵之间循环不止的情况。

所以,保证单纯形法收敛的充分条件是:在迭代过程中产生的每个基本可行解的基变量数值都严格大于0。

2. 如果xj的系数都小于0

在迭代过程中,如果某一个决策变量的系数都小于0了,这代表什么?
举例:



如上图,我们可以把x2放在等式右边,看出什么没有?x2可以趋于无穷大。

3. 如果非基变量xj的检验数为0

如上图, 非基变量x4的检验数为0了,根据最优性条件,让其进基并不能继续优化目标函数值。但是,x4进基后还是会得到一个基本可行解,且目标函数值与当前结果相同。这意味这什么?
目标不能再优化,但是又有不同的基本可行解,啥意思?说明该问题有无穷多个最优解。

所以,对于求max的线性规划问题,如果所有检验数均满足<=0,则说明已经得到了最优解,若此时某非基变量的检验数=0,则说明该优化问题有无穷多最优解。

三. 如何确定初始基本可行解

单纯形法是从一个初始的基本可行解开始的,出基入基,知道找到最优可行解。
问题是,我们怎么得到那个初始的基本可行解啊?
最基本的方法是添加人工变量
假设原问题的约束是这样的:
x1 + 2x2 + 3x3 = 1
2x + x3 = 2
那么我们再加两个变量x4, x5,把约束变成这样:
x1 + 2x2 + 3x3 + x4 = 1
2x + x3 + x5 = 2
我们就把约束变成了典式,可以直接得到一个基本可行解(0,0,0,1,2)T,找个基本可行解的基变量是x4, x5,那么接下来的工作就是通过出基入基把x4,x5都变成非基变量,这样它们的值就可以为0, 从而得到原问题的可行解。
现在有个问题,如果在最优表中,基变量中仍含有人工变量,这说明啥?

这说明,原问题根本就无解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容