\end{align}" />
在满足(2)、(3)式约束条件时求解(1)式最大值的问题称为线性规划问题
线性规划的形式多样,但都可以转化成上述的形式,上面的形式被称为线性规划的标准型
标准型的矩阵形式:
同样在满足除(1)式之外所有其他式约束条件时求解(1)式最大值(后面相似的式子也是这样理解,不再作说明)
下面引用自算法导论:
考虑下面具有两个变量的线性规划:
x_1+x_2\protect\4x_1-x_2\leq 8\protect\2x_1+x_2\leq 10\protect\5x_1-2x_2\geq -2\protect\x_1,x_2\geq 0
\end{align}" />
几何化如下:
这个灰色的凸形区域称为可行区域,希望最大化的函数称为目标函数 。 概念上,我们可在可行区域内每个点上对目标函数 求值;我们将目标函数在一个特定点上的值称为目标值。我们可以找出一个有最大目标值的点作为最优解。
在二维中,我们可以通过一个图形化的步骤求最优解。对任意给定的在z, 上点的集合是斜率为-1的一条直线。z作变量,让 在坐标系上的可行区域移动来取得z的最大值,如下图:
得到 。
虽然不容易用图形表示超过两个变量的线性规划,但是同样的直觉仍然成立。如同在二维空间一样,因为可行区域是凸的(为什么?),取得最优目标值的点集合必然包含可行区域的一个顶点。类似地,如果有n个变量,每个约束定义了n维空间中的一个半空间。我们称这些半空间的交集形成的可行区域为单纯形。目标函数现在是一个超平面,并且因为它的凸性,一个最优解仍在单纯性的一个顶点上取得。
可行区域是凸的证明:
c^Tx\protect\Ax\leq b\protect\x\geq 0
\end{align}" />
设可行区域为S,在S上任取两个点 ,有
& Ax_1\leq b,Ax_2\leq b\protect\& A(ax_1+(1-a)x_2)=a*Ax_1+(1-a)Ax_2\leq a*b+(1-a)*b=b\protect\& A(ax_1+(1-a)x_2)\leq b\protect\& A(ax_1+(1-a)x_2)\in S
\end{align*}" />
又由凸集的定义,可知S为凸集。
PS:一个凸区域的直观解释是,该区域的任意两点之间连一条线段,线段上的点也全在该区域中。
单纯形算法以一个线性规划作为输入,输出一个最优解。它从单纯形的某个顶点开始,执行顺序迭代。在每次迭代中,它沿着单纯形的一条边从当前顶点移动到一个目标值不小于(通常是大于)当前顶点的相邻顶点。当达到一个局部的最大值,即存在一个顶点,所有相邻顶点的目标值都小于该顶点的目标值,单纯形算法终止。因为可行区域是凸的,且目标函数是线性的,所以该局部最优实际上是全局最优的。
虽然我们用几何方法很直观地描述了单纯形算法,但实际上是先将给定的线性规划写成松弛形式,即线性等式的集合。然后从代数角度进行运算。
写博客是很花时间的一件事。。。。以后有空的话会补充单纯形算法实际工作过程与实现方法。