一步一步走向锥规划 - LP

​一般来说凸优化(Convex Optimization, CO)中最一般的是锥规划 (Cone Programming, CP)问题,  前面我们介绍了最简单的是最小二乘(Least Square, LS)问题, 现在我们介绍一点线性规划(Linear Programming, LP)

一步一步走向锥规划 - LP_第1张图片


引子

彼得堡学派是人类近代史的一个奇迹, 是由切比雪夫(ChebyShev)一手开创, 切比雪夫研究的领域包括, 数论、概率论、函数逼近论、积分学, 这些都在这个学派极大开花, 而切比雪夫之所以能成为这个开创者, 一个重要原因就是他从小精通法语, 并且大胆积极的和法国数学家沟通交流。 另外一个重要原因就是善于培养学生,马尔可夫、李亚普诺夫都是他的学生, 都是一等一的数学大师, 这绝不是偶然。这个学派对概率和各种不等式玩的出神入化, 对近代机器学习的发展影响巨大!

帕夫努季·利沃维奇·切比雪夫本人, 出身于贵族家庭.他的祖辈中有许多人立过战功. 父亲列夫·帕夫洛维奇·切比雪夫参加过抵抗拿破仑(Napoleon)入侵的卫国战争, 母亲阿格拉费娜·伊万诺夫娜·切比雪娃也出身名门,他们共生育了五男四女,切比雪夫排行第二.切比雪夫的法语就是来自母亲精心的教育!  题外话, 日本的一般妇女都会二门外语左右, 这对子女的教育都是极大的优势!

切比雪夫对数学的兴趣,来自阅读并思考了欧几里得(Euclid)《几何原本》(Elements)。 题外话, 现在各大中小学, 从来没有时间给学生阅读数学原著和思考, 整天重复做题, 还指望培养一流大数学家, 简直不可能。

一步一步走向锥规划 - LP_第2张图片


有个年轻的犹太俄罗斯数学家Leonid Vitaliyevich Kantorovich, 受到了这个学派的极大影响, 在概率, 不等式, 数值逼近方法做出了极大贡献。 并且获得诺贝尔经济学奖。

一步一步走向锥规划 - LP_第3张图片


Kantorovich对一般性线性规划进行了归纳,并且最先提出了解法。 从此线性规划最先走向了经济领域,走向了世界。

什么是LP, 线性规划

标准形式

LP正如其名,目标是求线性乘积的最值, 并且受到线性不等式的约束。标准形式如下:

一步一步走向锥规划 - LP_第4张图片


举个例子, 经过标准化就是上面我们形式了:

一步一步走向锥规划 - LP_第5张图片


把上面的所有线性要求图形化, 根据不等式知道,定义域为黄色的凸区域:

一步一步走向锥规划 - LP_第6张图片


图形化求解这个比较容易,因为目标公式是线性函数, 所以只要考虑凸区域的最值点, 又因为凸区域本身就是直线围起来的, 所以只要考虑角就行了



这样可以得到在x=5, y=5这个点, LP问题取到最大值。

但是我们稍微讨论一下最优值的分布, 一般情况下, 不等式围成的区域有三种情况:

空集合(null set):这种情况天然没有最优解(optimum)。

有限可行区域: Bounded Feasible Region

有唯一解(unique optimal)

有无数解(multiple optimal)

无限可行区域: Unbounded Feasible Region

无最优解

有唯一解(unique optimal)

有无数解(multiple optimal)

一步一步走向锥规划 - LP_第7张图片


一步一步走向锥规划 - LP_第8张图片


顺便, 我们说明一下带权求和(weighted sum)的几何含义: 对于点积p个点和它们的系数的点积。



我们讨论三种限制情况:

1. 如果常量之和为1:



这是X被称为仿射求和(affine combination): 是两点直线上所有点

一步一步走向锥规划 - LP_第9张图片


2. 如果所有常数为非负:



这是X被称为锥求和(conic combination):是两个点向量方向之间所有可能方向可能的向量。

一步一步走向锥规划 - LP_第10张图片


3. 如果同时满足affine combination 和 conic combination,



这时候被称为凸求和(convex combination):是两个点之间线段上所有点

一步一步走向锥规划 - LP_第11张图片


有了凸求和的定义, 那么我们就可以通过凸求和来判断一个点是不是角:

角只能是自己和自己的凸求和,或者角不是任何其他两个点的凸求和。

如果一个点可以表示成两个点的凸求和, 那么这个点就不是角。

这样,我们给出了LP的一般定义,以及图形化解法。

几个经典问题

在LS问题里面, 我们把误差定义为欧式空间距离(Euclidean Distance), 如果我们换成曼哈顿距离(Manhattan Distance), 那么我们就得到Least Absolute Deviation Regression (LADR)。

一步一步走向锥规划 - LP_第12张图片


利用Subgradient求导, 我们可以得到LS类似的结论:

一步一步走向锥规划 - LP_第13张图片


通过简单的变换, 我们就能把LADR问题转换成LP问题了:

一步一步走向锥规划 - LP_第14张图片


除了基于Manhattan距离的回归, 还有基于Chebyshev距离的回归, 他们都是典型的LP问题:

一步一步走向锥规划 - LP_第15张图片


LP的几何意义

从矩阵空间看

LP的矩阵空间比较简单, 只有线性的乘法, 因此只有简单的矩阵空间的关系,意义不是很大。

一步一步走向锥规划 - LP_第16张图片


从仿射空间看(affine space)

Affine space和前面的subspace最大的区别就是, Affine只保留了相对欧式距离关系。 举个例子, 下面图里有两层子区域, 在原点的可以构成suspace, 但是上层的不能构成一个subspace, 因为不能满足线性生成(span),包括线性组合和缩放,依然属于这个区域, 具体可以看“矩有四子”中子空间的定义。 但是这个区域依然保留着相对关系,是一个仿射空间。

一步一步走向锥规划 - LP_第17张图片


为什么要有仿射空间呢?

有了仿射空间的定义, 我们就可以对仿射空间进行变换。 否则只能在固定的投影空间(Projection)里面, 就需要对4个点都要计算, 因为我们要保留子空间的特性(绝对位置关系)。 但是在仿射空间里面, 我们只要保留相对位置空间, 所以只需要对3个点进行定位确定相对线性关系。

一步一步走向锥规划 - LP_第18张图片


一步一步走向锥规划 - LP_第19张图片


有了上面的了解, 我们再来看一个我们已经很常用的affine combination。 在下面的二维空间里面, 点D就是A, B, C三点之间的相对关系计算出来的点, 而不考虑A点自己的向量关系。

一步一步走向锥规划 - LP_第20张图片


有了仿射空间, 我们在求LP问题的时候, 根据仿射空间和线性目标, 我们就知道, 极值点只能在仿射空间区域的角(Corner)取到, 这样就能构建单纯形Simplex区域来进行计算了。

一步一步走向锥规划 - LP_第21张图片


Simplex就是通过空间点线性仿射连接(affine combination)构成的一个凸包区域。



LP概述

在Kantorovich提出线性规划的问题之后, 美国数学家Dantzig在1947年提出了单纯形算法(Simplex),Dantzig是来自波兰的美国数学家, 他的博士导师Jerzy Neyman相当牛, 是美国统计系(伯克利统计系)的第一个创建者。

一步一步走向锥规划 - LP_第22张图片


之后,Fiacco 和 McCormick在60年代提出了早期的插值算法(interior-point methods, IPM), 到了70年代, 人们又提出了椭面法(ellipsoid method), 和一些subgradient methods。Ellipsoid 算法最大意义是首次提出多项式时间(polynomial-time)的算法,但是实际上这些方法都不如Simplex算法好用,Simplex算法被称为20世纪10大算法之一, 直到1984年来自印度的数学家Karmarkar提出了多项式时间(polynomial-time)的插值点算法(interior-point methods, IPM), 一下子改变了Simplex一家独大的状态。Karmarkar就是来自传说中的IIT的。

一步一步走向锥规划 - LP_第23张图片


从此interior-point methods慢慢和Simplex算法并肩成为主流, 并且Simplex属于LP专业定制,很难扩展, 而Karmarkar的算法后来扩展到了非线性(nonlinear)问题中继续使用。

因此LP算法主流主要是Dantzig的Simplex和Karmarkar的IPM算法:

1994 Simplex Method:大部分中小规模问题超快,大规模问题不如IPM,偶尔情况很差。

1984Interior-point Method, IPM:大规模情况比较快,中小规模不如Simplex, 但是不会出现最坏情况。

Simplex 算法概述

Simplex思想

算法的思想比较直观,就是要在Simplex上从任意一个顶点(角)出发, 然后找到一条路,它的终点就是最优值点。 这个算法利用前面提到的最优点必然落在角上的结论。

一步一步走向锥规划 - LP_第24张图片


为什么不能遍历所有的角(Corner)来找到最优点?

在n维度的空间里面,假设有k个切面围成一个多面体(polyhedron), 那么这个多面体最多有多少个角(Vertex)? 有如下结论:

一步一步走向锥规划 - LP_第25张图片


这个结论可以通过在基本的Simplex上面添加切面来验证:

一步一步走向锥规划 - LP_第26张图片


从上面的结论,我们可以知道, 这是随着k的增长指数增长的值。 所以, 根据LP的特征, 每个不等式就是一个切面, 然后把可能区域(feasible domain)围成一个凸的多面体, 而最优点一定在角上, 但是遍历所有角(Vertex)的数目是根不等式和维度个数而指数增长的, 是不可以取的策略。

在LP中, 角的数学上如何表达的?

假设角的集合为P,并且满足如下条件:



那么如果X是角点, 对A有什么要求(什么情况下是交点是角)?

为了不失一般性, 把x向量中,零向量部分分开表示。

一步一步走向锥规划 - LP_第27张图片


在这种情况下, 我们把A也进行拆分成前p列为

。 那么:





那么X是角(Extreme Point)的要求是,对应的

矩阵是満秩的,或者矩阵的所有列是线性独立的(linearly independent)。



采用反证法, 证明如下:

一步一步走向锥规划 - LP_第28张图片


已经知道角点X,要求

矩阵満秩, 那么満秩是不是一定是角点呢?同样反证法, 我们只要证明非角点一定不满秩就好了。



一步一步走向锥规划 - LP_第29张图片


所以, 在Simplex算法中从一个角点跳到一个相邻的角点, 都必须满足非零部分对应的列是相互独立的(矩阵是満秩的)。

为了更好表示, 我们引入basis 和 non-basis来进行划分:

一步一步走向锥规划 - LP_第30张图片


这样, 我们首先得找一个基本解(basic solution, bs), 让它满足

。 如果更进一步, 还能找到



。 那么我就找到一个基本可行解了(basic feasible solution, bfs),也就是说找到一个角了。



从下面图上可以直观的看到基本解 和基本可行解的差别了, 可行基本解使我们想要的凸多面体的角(CDEM), 而基本解还包含其多面体区域外的角。  另外(BTW),可行解(Feasible Solutions, fs)就是凸多面体内部区域(四边形CDEM和内部)。

一步一步走向锥规划 - LP_第31张图片


有了上面角的数学表达形式这个结论, 我们很容易得到:

1. 如果A不是満秩(Full Rank)的, 那么就没有角, 那么就无解了。

2. 角的个数小于从列数(n)里面选出行数(m)个列的可能性。



一步一步走向锥规划 - LP_第32张图片


虽然前面我们已经给出了更为精确的结论, 但是它的由来并不清楚, 而这里我们很容易推导出一个上限(bfs是bs的一个子集, bfs数量小于bs数量)。

邻居顶点是如何表示的?

有了上面的结论, 我们在来看一下如何通过矩阵来表示邻居顶点?

既然是邻居, 那么就是要共享大部分限制条件,最多只有一个限制条件不一致。 那么在矩阵里面, 就是要两个基集合(basic set)只有一个列不一样。

在这样的情况下, 从一个点移到另外一个邻居点就是选择一个新的非基点(non-basic)加入到基集合里面来, 同时从基里面选择原有的一个列放回, 如下图所示:

一步一步走向锥规划 - LP_第33张图片


那么如何通过矩阵做到这一点呢? 就要通过高斯消去法(Gaussian Elimination, GE)。 举个极端的例子, 大家还记通过GE来求矩阵逆么?

我们会看到整个basis从联合矩阵右边移到左边, 然后就求解到了逆矩阵。

一步一步走向锥规划 - LP_第34张图片


注意, 高斯消去法(GE)应用到计算机求解的时候经常会出现round-off error,或者divide by zero, 所以会每次选择pivot点进行操作。Pivot点选择也很简单就是把一列上最大值的行换到对应位置, 避免除以0或者小的数导致误差。

一步一步走向锥规划 - LP_第35张图片


为什么需要松弛形式(slack form)?

前面我们讨论过, 顶点的形式要满足:



但是标准形式下面, 并不满足这两个条件。 因此Simplex这个算法利用的并不是LP的标准形式, 而是松弛形式(slack form )或者说增大形式(Augmented form),  这个形式就是通过引入松弛变量(slack), 来把矩阵乘法的不等式变成等式。 然后所有定义域变量都放到第一象限。 从而满足我们先前设定的角的简单形式。

一步一步走向锥规划 - LP_第36张图片


Simplex算法的怎么设定优化目标的?

有了松弛形式之后,就是求解目标是什么?

Simplex 的目标就是基于等式, 在一个象限里面化解到一个目标表达式:

Z + c1 * x1 + c2 * x2 + c3 * x3 = b

等价于:

Z = b - c1 * x1 - c2 * x2 - c3 * x3

使得c1, c2, c3...的符号相同。

由于 X, Y, Z >= 0。 因此:

Z取最小值: 要求c1, c2, c3 <0,Z和x1, x2, x3单调性一致,x1=x2=x3=0的时候是最小值

Z取最大值: 要求c1, c2, c3 >0,Z和x1, x2, x3单调性相反,x1=x2=x3=0的时候是最小值

有了目标了, 那么求解方式是什么?

首先我们图示化来看一下, 从一个点到最优点(optimum)理想的路径的启发。  例如下图, 最理想的情况应该吧把直线Z=4x+3y,沿着梯度上升(Gradient ascent)的方向平移, 一直移到D点, 因为D和直线仅有一个交点了, 这种情况下Z取到最大值。

但是Simplex算法是从角集合之间进行移动的。 假如, 目前在A点,A点是一个基本可行点(bfs), 因为A点是角,所以是基本点(bs), 另外,A点在黄色区域内,所以是可行点(feasible solution)。  A点又两个邻居, B和E点。 那么B点和E点哪个更好呢?

根据前面最优的梯度上升的路径, 其实我们应该选择和梯度上升更为一致的方向。  那么B和E点的方向, 哪个方向更为和梯度方向一致呢?  我们可以把梯度分解到X轴和Y轴, 看到梯度在X轴上的分量是4,而在Y轴上的分量是3, 那么可以确定沿着X轴更为合适, 因为梯度在这个方向上投影更大, 之间的夹角更小,更为一致。

如果我们再把梯度的分量对应到等式z=4x+3y的系数, 就知道4是x的系数(coefficient), 而3是y的系数。   所以直观上来说, 我们要选系数更大的方向。

一步一步走向锥规划 - LP_第37张图片


根据前面讲述的利用高斯消去法(GE)来进行从一个bfs点, 移到邻居的bfs点。 这时候, 也要选择pivot列进行操作。 前面我们提到, 只要想办法从basic 和non-baisc set 里面替换任意一列,就是变换到邻居了。  这里我们又加上, 要选择最大系数的方向操作。 因此pivot列就要选择系数最大的列优先进行GE操作。

如何选择Pivot点进行高斯消去法来交换basic列?

前面我们已经讲述了基本思想, 这里我们举个例子来进行说明:

对于标准的LP算法, 求如下最大值:

一步一步走向锥规划 - LP_第38张图片


对应的图如下,所示:

一步一步走向锥规划 - LP_第39张图片


首先, 我们引入Slack变量, 换成Slack形式:

一步一步走向锥规划 - LP_第40张图片


这样我们得到对应的Ax = b,x > 0的矩阵形式:

(注意: 目标公式化成了-40 x1 - 30 x2          + P  =  0)

一步一步走向锥规划 - LP_第41张图片


根据前面的矩阵基的理论, 很容易把slack变量对应的列选出来作为基:

一步一步走向锥规划 - LP_第42张图片


在这种情况下, 很容易设定non-basic变量为0, 然后basic 变量就是b值。



我们发现这时候对应的是坐标0点, 图上A点。

根据我们之前讲述的理解, 我们应该往系数最大的x1轴(x2=0)的方向移动, 因此我们找到对应列, 为pivot列。

一步一步走向锥规划 - LP_第43张图片


选择x1轴对应的列为pivot列, 如下图, pivot列是P行里面除了P列之外的最小的列(取了负号的最大系数)。

一步一步走向锥规划 - LP_第44张图片


那么选择哪一行进行操作了呢? 根据高斯消去法里面Pivot行的思想, 我们应该选择pivot列里面最大值的行进行操作, 但是, 这里不是, 这里是选择正的 rhs / s 最小的行进行操作(等价于把rhs全部变成1, 然后每行除以b之后,对应的最大值的行)。如下图所示, 我们选择了24/3最小的行, 或者说选择了3/24最大列,依然符合pivot的思想。 当然这只是从pivot思想出发的阐述, 具体后面会说明为什么要选择正的值的最小pivot ratio。

一步一步走向锥规划 - LP_第45张图片


通过高斯消去(GE)之后, 得到如下:

一步一步走向锥规划 - LP_第46张图片


这样, 我们得到了新的基集合和非基集合, 我们看到是对应的x2=0和s3=0的直线的交点:



而这个点就是我们要找的G点:

一步一步走向锥规划 - LP_第47张图片


如果继续这个过程, 我们就会再找到x2是最大系数方向, s2是pivot选择的行:

一步一步走向锥规划 - LP_第48张图片


进行GE后,我们得到如下:

一步一步走向锥规划 - LP_第49张图片


对应的新的基和非基集合是:



所以找到了s2=0和s3=0的交点:

一步一步走向锥规划 - LP_第50张图片


这时候我们再来看P对应的行, 里面所有系数全部同号了, 而且全部是正号, 根据我们前面讲述的结论, 我们找到了最大值。

为什么Pivot行要选择pivot ratio最小的行?

前面我们直观的简单描述了pivot行的选择, 但是似乎不是强制的, 其实pivot行的选择是强制的。

假设根据松弛变量扩展, 我们有如下结果, 然后我们改写一下, 把单位矩阵放到前面去:

一步一步走向锥规划 - LP_第51张图片


假设我们选择了某一列,第j列, 那么我们很容易得到如下一组新的basic solution:

一步一步走向锥规划 - LP_第52张图片


但是要使得这组basic solution成立就要求所有的X的分量全部大于等于0. 但是要使得basic feasible solution成立, 那么就要求前m个分量中至少有一个等于0.

在这种要求下, 讨论aij的大小, 如果aij<=0情况, 那么天然就有新的x>=0, 然是如果aij > 0的情况发生, 那么就要求theta的取值是最小pivot比值。

一步一步走向锥规划 - LP_第53张图片


所以, 我们要求取theta为对b列和pj列的所有比值的最小值(必须正数)。

这就是为什么我们一旦选择了pivot列以后, 我们要选择pivot行为pivot ratio最小那一行做基值求解。

Simplex 算法详解

算法流程图

我们把上面流程总结一下,就是Simplex算法的流程了:

一步一步走向锥规划 - LP_第54张图片


Simplex 如何限定到只关注基本可行解(bfs)?

前面我讲了, Simplex算法是从一个bfs,找到相邻的更优的bfs,直到相邻点里面没有更优的bfs了。 那么问题来了。如何找到第一个bfs?

如果是标准形式, 通过引入Slack变量:

一步一步走向锥规划 - LP_第55张图片


一步一步走向锥规划 - LP_第56张图片


那么对应的原点的bfs就是直观上可以应用的第1个:



要注意这里bi >= 0 否则, 解在第一象限就不成了。

从而得到:



如果直接就是增强模式:

一步一步走向锥规划 - LP_第57张图片


通过一系列GE化解:

一步一步走向锥规划 - LP_第58张图片


我们也可以得到一个带有单位阵的初始化矩阵:

一步一步走向锥规划 - LP_第59张图片


这样如果令上面这个矩阵的non-basic变量全部为0那么有:

一步一步走向锥规划 - LP_第60张图片


前面我们对bi >= 0 的情况进行了说明:



对于存在 bi < 0 的情况怎么办呢?

有两种方法可以做到这一点:

1.Big M Method,BMM,大M方法: 本质和下面TPM一样,但是初始化M是个问题。过大的M可能会导致计算中的error of round off, 小了, M会失效。

2.Two-Phase Method,TPM,两阶段法: 理论上更完美。

大M方法

由于slack变量能够平衡不等式小的一边, 如果 b<0, 虽然依然能将不等式化解成等式, 但是直接取slack变量为基的话, 那么slack variable = b < 0就不是基础可行解了。 我们知道一旦取得等式后, 我们就能让转换成所有b>0, 只是这时候slack变量系数就不是1了,不是天然基了。

因此大M方法,就是硬生生给b凑一个天然基变量, 但是这样又会破坏等式, 因此要这个变量必须等于0。 这样就要求优化目标中进行改写,使得取得最优值的时候,这个变量必须等于0.

在添加slack变量后始终能够做到让b > 0:

一步一步走向锥规划 - LP_第61张图片


但是A  =  [ B |  I ]不在成立了, 因此这时候利用大M办法继续添加变量。

一步一步走向锥规划 - LP_第62张图片


这样我们能够得到[  A  |  I  ], 这样就很容易得到一个bfs解作为Simplex算法的出发点。 但是我们看到 目标 Z 变了, 通过配置一个较大的M使得Xa = 0 的时候才是最大的。

下面我们举个例子,详细说明:

一步一步走向锥规划 - LP_第63张图片


这样就快要利用Simplex步骤求解了:

首先, 我们把目标公式里面的artificial variable的系数变成0. 然后利用Simplex进行选择pivot column和pivot row:

一步一步走向锥规划 - LP_第64张图片


在GE之后得到如下:

一步一步走向锥规划 - LP_第65张图片


这样我们就得到一组 bfs了:



所以我们只要利用artificial variable, 然后通过GE,找到置换后的一组bfs就是大M方法的思路。

但是大M方法由于取的M过大, 很容易导致round-off error问题, 尤其在计算机实现的时候。

两阶段法

我们知道, 本质上, 找到1组bfs只需要找到一个顶点, 因此跟目标公式没什么关系, 因此, Two Phase Method就是利用最简化的目标公式来找一个基本可行解。  这样,第一阶段, 通过如下目标公式找到一个bfs解。



第二阶段,利用找到的一组bfs, 通过Simplex算法求解目标。

举个例子, 如下直接替换原来的目标求解bfs:

第一阶段:

一步一步走向锥规划 - LP_第66张图片


这样通过Simplex算法:

一步一步走向锥规划 - LP_第67张图片


我们得到了一组non-basic variable(NBV)和basic variable(BV)



第二阶段:

这样对于原来的表达式, 我们得到一组解, 我们替换目标公式, 然后除去artificial variable(= 0), 得到如下公式:

一步一步走向锥规划 - LP_第68张图片


然后再计算Simplex结果:

一步一步走向锥规划 - LP_第69张图片


这我们求解到了最优解:



Simplex 算法举列

举个3维例子, 下面是一个最大值的例子:

一步一步走向锥规划 - LP_第70张图片


1.  在不等号小的一边加入松弛变量(slack variable), 这样等式成立的时候, slack 变量必须在在第一象限(>= 0)。

一步一步走向锥规划 - LP_第71张图片


2. 同时把目标P也引入等式左边。



3. 获得系数矩阵(Tableau)

一步一步走向锥规划 - LP_第72张图片


对应的basic变量



根据non-basic变量为0,找到fbs点为原点。

一步一步走向锥规划 - LP_第73张图片


4. 找到初始的bfs点后, 因为是求最大值,根据前面的总结, 如何把上面系数矩阵的最后一行(目标行), 除了P之外参数全部变成正数。 所以开始循环向最优点移动:

一步一步走向锥规划 - LP_第74张图片


GE处理完后得到新的矩阵

一步一步走向锥规划 - LP_第75张图片


可以看到新找到A点, s4=0成立。



一步一步走向锥规划 - LP_第76张图片


5. 继续我们找到了H点:

一步一步走向锥规划 - LP_第77张图片


以及s2点:

一步一步走向锥规划 - LP_第78张图片


6. 这时候所有的P值全部不小于零了, 因此找到最优值



Simplex 一个边界情况

原始的Simplex 算法对于有些情况可能不能处理的很好, 譬如下面这种情况, 存在算法退化(Degeneracy)的情况。

一步一步走向锥规划 - LP_第79张图片


上面三个条件, 对应的图形如下, 我们可以看到三个条件围成的区域和如果去掉条件(1)(2)之后的情况一致。

一步一步走向锥规划 - LP_第80张图片


在添加松弛变量后, 得到如下矩阵。

一步一步走向锥规划 - LP_第81张图片


在执行了一次Simplex操作后, 从坐标原点走到了三角形的一个角。 这时候我们发现对应的basic变量存在为0的情况 (s3 = 0)。



一步一步走向锥规划 - LP_第82张图片


在这种情况下,s3由于是basic变量, 但是因为b为0,所以也为0。 这时候s3被称为退化基变量。 这是再进行一次Simplex算法, 选择x2列第三行。

一步一步走向锥规划 - LP_第83张图片


但是如果按照之前的Pivot ratio取大于0的最小比例, 这时候就会选择第2列,第1行。 这样操作后就会带来退化和循环的问题。 从多面体的图上看, 造成退化的主要原因就是有一些冗余直线经过角, 但是却不限界多面体区域。

对于退化的解决, 重要的思想是要尽量保持严格单调(strictly monotone),

这里就不细说, 更多细节可以参考:

1.Brand’s rule:  一个排序(order)的进入和出来的规则

2.Lexicographic rule(1955):



Simplex 算法局限性

Klee-Minty在1972年给出了一个Simplex算法需要遍历所有点的例子:

这个例子的2维情况如下:

一步一步走向锥规划 - LP_第84张图片


3维度情况如下:

一步一步走向锥规划 - LP_第85张图片


这个图被称为Klee-Minty斜方体

n 维的情况:

一步一步走向锥规划 - LP_第86张图片


假如我们进一步把类似形式更具体化位矩阵表示2/5 < 1/2:

一步一步走向锥规划 - LP_第87张图片


具体到Simplex算法的矩阵形式:

一步一步走向锥规划 - LP_第88张图片


一步一步走向锥规划 - LP_第89张图片


可以看出遍历了所有角, 因此, 我们说Simplex算法理论是最坏情况是指数形式的。

Simplex 近期突破

Simplex算法实际使用效果很好, 但是它的最坏情况很可能是指数时间(exponential time), 但是能够证明,平均情况下, Simplex算法是多项式时间的(polynomial time)。

南加州大学的腾尚华(Shang-Hua Teng)老师和他的合作者通过他们创建的平滑分析(Smooth analysis)解释了为什么Simplex算法会获得平均多项式时间的效果, 并且因此获得了2008年的Godel 计算理论大奖。有兴趣可以拜读他们的94页的论文“Smoothed Analysis of Algorithms: Why the Simplex Algorithm Usually Takes Polynomial Time”。

LP对偶

线性规划对偶(duality)问题的数学表述如下:

一步一步走向锥规划 - LP_第90张图片


举个具体例子:

一步一步走向锥规划 - LP_第91张图片


再举一个不是正方形矩阵的例子

一步一步走向锥规划 - LP_第92张图片


如果从图上直观来说, 最大和最小的最优值点在强凸情况下,是对应的。

一步一步走向锥规划 - LP_第93张图片


如何来理解对偶呢?

假设有个家具厂, 生产书桌, 餐桌和椅子。 但是生产这些东西, 需要资源: 木材, 时间, 和木工。 而这些资源都是有一定限额的。 同时我们知道每个产品对应的利润是多少。

一步一步走向锥规划 - LP_第94张图片


那么很直观, 如何生产各个产品数量使得利润最高?

一步一步走向锥规划 - LP_第95张图片


如果我们换个角度来看, 我们把y设定为单位资源的价格:

一步一步走向锥规划 - LP_第96张图片


那么我们要购买全部资源的所需要的最小价格?

一步一步走向锥规划 - LP_第97张图片


所以,我们购买全部资源的最小成本, 必须和产品的最大利润一致。

这样我们解释了一下, LP对偶问题的含义。   对于LP问题,Simplex算法也可以解决对偶问题的。

IPM 算法引述

IPM思想

前面我们探讨了Simplex算法, 如果对比Karmarkar算法和Simplex最直观的比较, 如下, Simplex是沿着凸多面体(convex polyhedral)的边贪心走的。  而IPM是沿着内部(Interior)梯度点方向走的。

一步一步走向锥规划 - LP_第98张图片


虽然,Karmarkar听上去很直观, 但是如何计算一个和梯度最接近的方向, 又如何选择点? 这些都是问题。

一步一步走向锥规划 - LP_第99张图片


Karmarkar利用了反复投影的方式来达到最优点:

一个当前的点会transform到一个转换区域的中心点。 原来的多边形区域会变换到一个正多边形区域。 这样就存在一个仿射缩放(affine scaling)。

一步一步走向锥规划 - LP_第100张图片


之后, 会在仿射区域进行投影(steepest-descent direction):

一步一步走向锥规划 - LP_第101张图片


如果梯度方向不在区域内, 要进行矩阵的Col(A)空间。

一步一步走向锥规划 - LP_第102张图片


在完成投影之后, 会在投影目标区域前进一步, 然后再反投影回原空间。

一步一步走向锥规划 - LP_第103张图片


如果把整个过程再重复起来, 就能保证每次都往投影的梯度方向前进。

一步一步走向锥规划 - LP_第104张图片


又由于每次都把当前点投影到中心, 然后前进。 所以算法会开始加速向梯度方向前进, 然后慢慢越来越准确的接近边缘区域。

一步一步走向锥规划 - LP_第105张图片


对于Karmarkar算法发明后, 一下子轰动了整个世界, 居然有算法号称在处理大规模LP问题时候要比Simplex算法快10倍, 这下子像机场调度什么的就可以利用LP来解决了。  于是AT&T看到这个机会, 申请了专利。 又一下子引发了全世界对此的讨论, 因为到底这个基础性的算法,是要专利保护还是应该开放给全世界来提高效率。

于是有人开始争议说这个算法本身不算是创新,只是projected Newton barrier method 加上了 logarithmic barrier function在特殊参数的特解。 但是很多人并不认同这种说法。   可惜AT&T虽然申请了专利,并且还开发对应的软件, 但是获利不多了,软件只买了两套。 在2006年这个专利已经失效了。  但是这个专利有个明显的负作用了, 妨碍了Karmarkar本人与数学规划界进一步的合作探讨,发挥更大的影响力。   回头想想Google这样的公司开源一些基础性算法多么的明智。

对于Karmarkar算法本身的更多细节, 就在这里不展开细说了, 希望以后有机会再补充。

小结, 这里描述了LP规划的一般思路, 阐述了Simplex算法的思想, 尤其Pivot点是如此确定的。  对Karmarkar算法没有描述。 但是需要知道的是Karmarkar算法对应用LP到大规模线性规划里面, 例如机场调度中有着极大的影响。 尤其2008年腾尚华(Shang-Hua Teng)说明了Simplex为什么最坏不好, 但是通常很好,而获得Godel奖,他也是得过这个大奖的唯一华人。

一步一步走向锥规划 - LP_第106张图片


参考:

http://www.mathsoc.spb.ru/pantheon/kantorov/

http://math.tutorvista.com/algebra/simplex-method.html

https://people.richland.edu/james/ictcm/2006/3dsimplex.html

https://inst.eecs.berkeley.edu/~ee127a/book/login/l_intro_some_pbs.html

http://www-groups.dcs.st-and.ac.uk/~history/Biographies/Dantzig_George.html

http://mathoverflow.net/questions/127423/how-many-vertices-can-a-convex-polytope-have

http://math.uww.edu/~mcfarlat/s-prob.htm

http://doc.mbalib.com/view/9cf748a18c322f527d989e746e55dcd0.html

https://www.utdallas.edu/~scniu/OPRE-6201/documents/LP10-Special-Situations.pdf

http://dictionnaire.sensagent.leparisien.fr/Karmarkar's%20algorithm/en-en/

你可能感兴趣的:(一步一步走向锥规划 - LP)