单纯形法原理如何应用于复杂线性规划问题?
摘要:单纯形法 参考连接:单纯形法 单纯形法是针对求解线性规划问题的一个算法,这个名称里的 “单纯形” 是代数拓扑里的一个概念,可以简单将“单纯形”理解为一个凸集,标准的线性规划问题(线性规划标准型)可以表示为: [max,(or,min)
单纯形法
参考连接:单纯形法
单纯形法是针对求解线性规划问题的一个算法,这个名称里的 “单纯形” 是代数拓扑里的一个概念,可以简单将“单纯形”理解为一个凸集,标准的线性规划问题(线性规划标准型)可以表示为:
\[max\,(or\,min)\quad{f(x)=cx}
\]
\[\quad\quad\quad{s.t.}\quad{Ax=b}
\]
\[\quad\quad\quad\quad\quad{x}\geq{0}
\]
单纯形法最早由 George Dantzig于1947年提出,单纯形法对于求解线性规划问题是具有跨时代意义的,其实不仅仅是针对线性规划,非线性规划问题在求解的过程中也大量依赖单纯形法。
一、凸集及其性质的介绍
1.1 凸集的概念
单纯形可以理解为一个凸集,介绍单纯形法之前有必要先来了解一下凸集概念及其性质,凸集上求最优解是凸优化的一个分支,凸集对于简化问题是有重要意义的。
凸集可以用图形表示为一个没有洞的联通区域,如下图所示:
凸集的概念:
(1)如果集合\(C\)中任意两个点\(X_1,X_2\),其连线上所有的点也都是集合\(C\)中的点,称\(C\)为凸集
(2)\(X_1,X_2\)的连线可以表示为:\(aX_1+(1-a)X_2\quad(0<a<1)\)
(3)凸集定义用数学解析式可表示为:对\(\forall{X_1,X_2}\in{C}\),有:\(aX_1+(1-a)X_2\in{C}\quad(0<a<1)\)
关于(2),以一个一维坐标例子简单理解一下。如图,\(aX_1+(1-a)X_2=a(X_1-X_2)+X_2\quad(0<a<1)\),其中\(a=0\)和\(a=1\)分别代表\(X_2、X_1\);\(a\in(0,1)\)代表点\(X_1\)和点\(X_2\)连线中任意一点
根据定义下面这个图形所定义的区域不是凸集:
1.2 凸集的顶点
顶点:
凸集\(C\)中满足下述条件的点\(X\)称为顶点:
如果\(C\)中不存在任何两个不同的点\(X_1,X_2\),使\(X\)成为这两个点连线上的一个点。
或者这样表述:对\(\forall{X_1,X_2}\in{C}\),不存在\(X=aX_1+(1-a)X_2\quad(0<a<1)\),则称\(X\)是凸集\(C\)的顶点
如图,因为\(a≠0或1\),所以\(X\)不能成为\(C\)中某条连线上的一个点。
1.3 几个基本定理
定理1若线性规划问题存在可行解,则问题的可行域是凸集
证明见《运筹学教程(第五版)》第20页
定理2线性规划问题的基可行解\(X\)对应线性规划问题可行域(凸集)的顶点
定理3若线性规划问题有最优解,一定存在一个基可行解是最优解
二、单纯形法原理
2.1 线性规划问题的解的概念
可行解满足所有约束条件的解,称为线性规划问题的可行解。全部可行解的集合称为可行域。
最优解使目标函数达到最大值的可行解称为最优解。
基设\(A\)为约束方程组的\(m×n(m>n)\)阶系数矩阵,其秩为\(m\),\(B\)是\(A\)的一个\(m×m\)阶满秩子矩阵,称\(B\)是线性规划问题的一个基。
\(B\)中每一个列向量\(P_j(j=1,\dots,m)\)称为基向量
与基向量\(P_j\)对应的变量\(x_j\)称为基变量
线性规划中除基变量以外的变量称为非基变量
基解由\(m\)个约束方程可解出\(m\)个基变量的唯一解\(X_B\),将这个解加上非基变量取\(0\)的值产生的解\(X\),称为线性规划问题的基解。
基解中变量取非\(0\)值的个数不大于方程数\(m\),故基解的总数不超过\(C^m_n\)个
基可行解满足变量非负约束条件(如\(x\geq0\))的基解称为基可行解
单纯型法应用于标准化形式的线性规划问题,所以在线性规划问题中决策变量\(x\)均大于等于\(0\)
可行基对应于基可行解的基称为可行基
2.2 单纯形法的实现
根据定理2和定理3,最优解一定是一个基可行解,且为凸集的一个顶点。
单纯形法的核心思想可以归纳为: 找到每一个基本可行解,代入目标函数后计算函数值取其最大或最小值即可。单纯形法上从代数角度是寻找约束条件的每一个基本可行解,从几何意义上来说是遍历凸集的每一个顶点,根据算法的特性有时也称为转轴法。
当求解最小值问题时,如果借助梯度的概念,在得到一个顶点后,切换下一个顶点方向是函数变小的方向无疑会节省很多时间。
