运筹学·单纯形法——原理剖析

Posted ESOO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运筹学·单纯形法——原理剖析相关的知识,希望对你有一定的参考价值。

        

        最近一段时间在学习运筹学,其中有很多模型能够引发我们对于企业管理的思考,比如马尔科夫分析法告诉我们,公司当下的发展,一定和近期的发展有着密切的联系,而且如果我们不改变资源的分配比例,不论公司当下的状态如何,在一个合适的时间段后,它总是趋于一个稳定的值,我们称之为平衡,而在运筹学的线性分析中,有个问题很有意思,那就是单纯形法求最优解!

        首先,书中说基于N多原理,这个方法特别简单就能求出最优解!然后我沾沾自喜地开始研究,当他出现第一张单纯形表时,我就懵了,一直到最近,我再搜寻一天后,终于揭开了这个复杂的表,他称之为,但也的确是单纯的一面!下面跟紧我们的脚步,一起研究这个单纯的问题!


前提:

        1,这是解决实际问题的,而往往实际问题大部分时间是不求精确的解的,我们找到当下较优的解就好!

        2,在实际中,我们处理的事情远比下面我们讲的例子复杂,他牵扯到的条件也更多,但是,我们先从单纯的环境入手,复杂的问题,我们在逐步累加就好!

        3,不是什么东西都可以拿数学表示,但是,不能用数学表示,证明我们认识还不够,所以,先接受例子中提出的数学模型,如果你有更好的,证明你可以自己写篇文章了,别忘了告诉我你的博文地址哦!

        4,介于我的数学水平,本例子不会出现复杂的数学公式,您可以尽情享受这次旅程!


题干:

        某工厂生产生活用品,经过岁月的累积,他们发现一个人最有效率的工作时间有一公式

        有效工作时间=-1 X 加班时间 + 2 X 本月工资 + 工作环境

        我们抽象   用 Z 有效工作时间 ,X1 代表 加班时间 ,X2 代表   本月工资  ,X3 代表 工作环境 

公式抽象为:

        Z=-X1+2X2+X3

        公司为了能让每个人,发挥自己最大的效益,所以这个 值我们是求最大的

        公司为了成本考虑,我们增加了点约束条件

                2X1+X2+X3  <=  4

                X1+2X2 <=  6


        根据我们在高中学习的知识,我们可以这么转换,加入K1K2 这两个变量,约束条件变为:

                2X1+X2+X3+K1 = 4
                X1+2X2+K2 = 6

                X1,X2,X3,K1,K2 >=0


        我们根据这些条件绘制第一张单纯形表:


说明:菜单内存变量,列值存系数

初始单纯形表
公式 B X1 X2 X3 K1 K2
4=2X1+X2+X3+K14 2 1 1 1 0
6=X1+2X2+K2 6 1 2 0 0 1
0=-Z-X1+2X2+X3 0 -1 2 1 0 0


        这时,我们对他进行观察,进行单纯形表的第一次运算

运算步骤:

        1,在绿色结果公式系数中,找正数系数最大的

        2,此列中出去绿色结果公式外系数最大的

初始单纯形表
公式 B X1 X2 X3 K1 K2
1=2X1+X2+X3+K1 42 1 1 1 0
3=X1+2X2+K2 3 12 0 0 1
0=-Z-X1+2X2+X3
0 -1 2 1 0


        3,本行公式找到的变量系数变为1

        4,将本行变量系数与上下行运算,将变量虽在列其他单元格系统变为0

        我们将整个的过程称之为迭代,迭代结束条件,结果公式变量系数全为负数或者0


第一次迭代结果为:

第一次迭代
公式 B X1 X2 X3 K1 K2
1=3/2X1+X3+K1-1/2K2 1 3/2 01 1 -1/2
3=1/2X1+X2+1/2K2 3 1/2 1 0 0 1/2
-6=-Z-2X1+X3-K2
-6 -2 0 1 0 -1


第二次迭代结果为:

第二次迭代
公式 B X1 X2 X3 K1 K2
1=3/2X1+X3+K1-1/2K2 1 3/2 0 1 1 -1/2
3=1/2X1+X2+1/2K2 3 1/2 1 0 0 1/2
-7=-Z-7/2X1-k1-1/2K2
-7 -7/2 0 0 -1 -1/2


        迭代结束后,我们发现结果公式变成了这样:

Z=-7/2X1-k1-1/2K2+7


        由于所有变量均大于等于0,所以,我们这么看这个公式:

Z=-(7/2X1+k1+1/2K2)+7


        我们观察到,前半部分最大值为0,所以,本公式最大值为7!


对比:

        听到这里,我们会这么欢呼:“So easy!”,但是,我们看看,我最初看到的第一张单纯形表:

        

        你是不是被他搞懵了呢?


总结:

        在面对一个我们陌生的问题的时候,我们往往会想有没有一个简单的方法能够让我快速地掌握这个东西呢?这就是生活中,常说的窍门!但是通过这个问题的研究和解决,我发现,还真的是有窍门的,窍门就是踏踏实实跟真书上的例子走一遍,有不懂可以先放放,等差不多懂了30%,我们可以就某些问题在网上进行有针对行动额搜索!这时我们发现这个问题,我们基本上懂了70%,这时候我们再回过头来看看书上的例子,觉得这次懂了80%,那么,恭喜你,你成功了!

        这时候,我们在看看那些还在找窍门的同学,或者回顾自己找窍门的历程,我们发现,不是我们想学习,而是我们怕学习,我们对于陌生知识,有种恐惧的心理!而我们恰恰是要克服这种,心理,世上能走的路有千千万,我们发现实际就三条路,我甘愿平庸,我走到底了,剩下的两种就是死在恐惧和选择中或者活在成功里,我们要战胜的不是对手,而是我们自己!



以上是关于运筹学·单纯形法——原理剖析的主要内容,如果未能解决你的问题,请参考以下文章

运筹学笔记 对偶理论与灵敏度分析

运筹系列69:GPU版本的单纯形法

单纯形法

运筹学的图书目录

运筹优化算法工程师面试问题汇总

运筹优化算法工程师面试问题汇总