[我分享] 单纯形法简介

[复制链接]
faruto 发表于 2008-4-30 13:53:00
单纯形法

simplex method


  求解线性规划问题的通用方法。单纯形是美国数学家G.B.丹齐克于1947年首先提出来的。它的理论根据是:线性规划问题的可行域是 n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。顶点所对应的可行解称为基本可行解。单纯形法的基本思想是:先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解也可用此法判别。单纯形法的一般解题步骤可归纳如下:①把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作为初始基本可行解。②若基本可行解不存在,即约束条件有矛盾,则问题无解。③若基本可行解存在,从初始基本可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解。④按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。⑤若迭代过程中发现问题的目标函数值无界,则终止迭代。

  用单纯形法求解线性规划问题所需的迭代次数主要取决于约束条件的个数。现在一般的线性规划问题都是应用单纯形法标准软件在计算机上求解,对于具有106个决策变量和104个约束条件的线性规划问题已能在计算机上解得。

  改进单纯形法 原单纯形法不是很经济的算法。1953年美国数学家G.B.丹齐克为了改进单纯形法每次迭代中积累起来的进位误差,提出改进单纯形法。其基本步骤和单纯形法大致相同,主要区别是在逐次迭代中不再以高斯消去法为基础,而是由旧基阵的逆去直接计算新基阵的逆,再由此确定检验数。这样做可以减少迭代中的累积误差,提高计算精度,同时也减少了在计算机上的存储量。

  对偶单纯形法  1954年美国数学家C.莱姆基提出对偶单纯形法。单纯形法是从原始问题的一个可行解通过迭代转到另一个可行解,直到检验数满足最优性条件为止。对偶单纯形法则是从满足对偶可行性条件出发通过迭代逐步搜索原始问题的最优解。在迭代过程中始终保持基解的对偶可行性,而使不可行性逐步消失。设原始问题为min{cx|Ax=b,x≥0},则其对偶问题为 max{yb|yA≤c}。当原始问题的一个基解满足最优性条件时,其检验数cBB-1A-c≤0。即知y=cBB-1(称为单纯形算子)为对偶问题的可行解。所谓满足对偶可行性,即指其检验数满足最优性条件。因此在保持对偶可行性的前提下,一当基解成为可行解时,便也就是最优解。

    数学优化中,由George Dantzig发明的单纯形法是线性规划问题的数值求解的流行技术。有一个算法与此无关,但名称类似,它是Nelder-Mead法或称下山单纯形法,由Nelder和Mead发现(1965年),这是用于优化多维无约束问题的一种数值方法,属于更一般的搜索算法的类别。

这二者都使用了单纯形的概念,它是N维中的N + 1个顶点的凸包,是一个多胞体:直线上的一个线段,平面上的一个三角形,三维空间中的一个四面体,等等。
==============================
我的另一篇帖子有关单纯形法实现和GUI界面
https://www.ilovematlab.cn/thread-7634-1-1.html

[ 本帖最后由 faruto 于 2008-4-30 13:54 编辑 ]

huright 发表于 2008-4-30 16:56:29
遭遇无钱下载,:'(

xxyyxz 发表于 2008-4-30 17:39:35
运筹学的内容,好啊

faruto 发表于 2008-5-2 00:37:31

回复 3# 的帖子

感觉坛子里 运筹学方面的 资料不是很多,这好我这段有这门课就发了一些上来~!:) :)

faruto 发表于 2008-5-2 00:39:35

回复 2# 的帖子

遭遇无钱下载,:'(


你想要那个GUI的源代码吗?把邮箱告诉我,我传给你好了~!:)

xxyyxz 发表于 2008-5-3 21:30:34
原帖由 faruto 于 2008-5-2 00:37 发表
感觉坛子里 运筹学方面的 资料不是很多,这好我这段有这门课就发了一些上来~!:) :)


线性规划,非线性规划都是啊,论坛里不少问题啊

why4000 发表于 2008-5-6 15:01:20
我也是没钱下载:'(

why4000 发表于 2008-5-6 15:02:31
why4000@gmail.com,谢谢了,不过不知道你知不知道二次规划的算法。

ltr511 发表于 2008-10-22 10:05:11
哎,没钱。
想用来算一下水环境容量的东西。
LTR511@163.com,不知道能不能给我发一下!

stunk 发表于 2008-10-22 11:08:12

KARMARKA算法

单纯形法虽然有效,但不是多项式算法,在求解大规模问题时有可能出现死循环的情况,为此,KARKARKA曾在1984年提出改进的内点算法,称为KARMARKA算法,该算法是多项式时间算法,如果有兴趣大家可以看相应的资料

Fanshill 发表于 2010-4-28 00:26:16
其实我想详细讨论下这个算法的思想

liezhi 发表于 2016-3-11 10:46:12
大牛,我想问问快速凸包算法,实现过程,最好有代码。。

naughtiness 发表于 2017-3-10 10:48:56
厉害了,,,,,学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表