算法导论之线性规划

线性规划,充斥着运筹学,在图的单源最短路径求解差分约束系统就是用到线性规划。怎么样问题可以建模为线性规划来解决呢?在给定的有限的资源和竞争约束情况下,取得最大化或最小化目标的问题。导论中给出政治竞选问题、航空航线调度问题、钻井采油问题。最大化或最小化目标是函数的因变量,自变量就是资源的约束因素,其函数就是由这些制约因素构成的等式或不等式。下面数学定义下线性规划。

在一般线性规划问题中,最优化一个满足一组线性不等式约束的线性函数。已知一组实数a1,a2,…,an和一组变量x1,x2,…,xn,基于这些变量的一个线性函数f定义为:


如果b是一个实数而f是一个线性函数,则等式:

f(x1,x2,…,xn)=b是一个线性等式。

f(x1,x2,…,xn)≥b和f(x1,x2,…,xn)≤b是线性不等式。

线性约束就是函数f和b的关系,就是求解n个变量m个线性不等式的最大化,约束为线性不等式的线性函数最大化称为标准型;而约束为线性等式的线性函数的最大化称为松弛型。

基于上面描述可知,线性规划问题是要最小化或最大化一个受限于一组有限的线性约束的线性函数。最小化线性规划和最大化线性规划的分类,是基于目标的需求,同样是m个线性不等式约束,去求解n个变量的值,达到目标(最大化或最小化)。

凸形区域:区域内的任何两点之间连线上的点都属于这个区域。

线性规划中,二维空间(两个变量)所构成的凸形区域为可行区域,要最大化的函数为目标函数。可行区域内的每个点都会去评估目标函数x1+x2,将目标函数的一个特点点上的值称为目标值,识别出一个有最大目标值的点就是最优解。当然有二维线性规划不等式所构成的可行区域上是有无数个点,不可能都去求值,因此需要找出一个有效的方式来寻找最大目标值的点。线性规划的最优解必定是在可行区域的边界上,所以只要沿着边界寻找顶点就可以很快找到最大目标值的点。

如果有三个变量,则每个约束以三位空间的一个半空间来描述,三个半空间的交集构成了可行区域,目标函数取目标值的点集合是一个平面。因为可行区域也是凸的,取得最优目标值的点集合必然包含可行区域的一个顶点。延伸到n个变量的超平面,每个约束定义了n维空间中的一个半空间,这些半空间的交集形成的可行区域称作单纯形,目标函数是一个超平面,且是凸性,一个最优解也是在单纯形的一个顶点上取得。理解下,无论多少维,找出凸形区域,目标函数的最优解就是在凸形区域的顶点集合之一或多个。

单纯形算法输入一个线性规划(n个变量m个线性不等式),输出一个最优解。算法从单纯形的某个顶点开始,执行一系列迭代,每次迭代中,沿着单纯形的一条边从当前顶点移动到一个目标值不小于当前顶点的相邻顶点。当达到一个局部最大值,即一个顶点的目标值大于其所有相邻顶点的目标值时,算法终止。因为可行区域是凸的且目标函数是线性的,所以具备最优事实就是全局最优的。

单纯形算法需要指数时间。线性规划的第一类多项式时间算法是椭圆算法,运行缓慢;第二类指数时间的算法是内点法,在大型输入上,性能优于单纯形算法。如果在线性规划中,所有的变量都取整数值,即整数线性规划,对于该问题,找出一个可行解是NP难度的。目前还没有已知的多项式时间算法能NP难度问题,所以没有有效的整数线性规划多项式时间算法。当然,一般的线性规划可以在多项式时间内解决。

1)标准型和松弛型

标准型的线性规划所有的约束条件都是不等式,而松弛型中的约束是等式。要用单纯形算法求解线性规划,需要将所有线性规划转化为标准型,再将标准型转化为松弛型,线性方程组等式求解。

标准型定义:

已知n个实数c 1,c 2,…,c <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值