线性规划笔记之单纯形法推导

线性规划

假设一些食材的属性如下表所示:

名称 价格(元/斤) 维生素指数/斤 美味指数/斤 肥胖指数/斤
猪肉 30 0 15 8
鸡肉 20 0 12 3
青菜 5 10 5 0
面条 2 1 1 5
番茄 10 8 3 4
青椒 8 14 -2 0

假设分别购买这些食材x1x_1, x2x_2, x3x_3, x4x_4, x5x_5, x6x_6斤, 则总开销为:30x1+20x2+5x3+2x4+10x5+8x630x_1+20x_2+5x_3+2x_4+10x_5+8x_6。现在需要在满足维生素指数不小于100,美味指数不低于100,肥胖指数不超过30,以及总重不超过10斤的情况下组合出最省钱的菜单。则问题转化为:
min30x1+20x2+5x3+2x4+10x5+8x6 min 30x_1+20x_2+5x_3+2x_4+10x_5+8x_6
subject to 10x3+x4+8x5+14x6100 10x_3+x_4+8x_5+14x_6≥100
15x1+12x2+5x3+x4+3x52x6100 15x_1+12x_2+5x_3+x_4+3x_5-2x_6≥100
8x1+3x2+5x4+4x530 8x_1+3x_2+5x_4+4x_5≤30
0x1+x2+x3+x4+x5+x610 0≤x_1+x_2+x_3+x_4+x_5+x_6≤10
我们把这类目标函数以及约束条件均为线性关系式的简单组合优化问题成为线性规划。对于这类问题在高中应该还是接触得比较多的,当初老师应该都教过用作图法来求解,比如:
线性规划笔记之单纯形法推导
根据约束画出可行域(图中阴影部分),然后沿着等值线法向量(梯度方向)移动等值线达到极限位置(继续移动会出现空集),就可以最终取得最大或最小值。而这类问题的最优解往往都落于多边形可行域的顶点上。

单纯线性法

自1947 年,面对美国制定空军军事规划时提出的问题,丹齐克( Dantzig)首次提出了单纯形法来解决这类极值问题的求解后,应用最广的线性规划通用解法就是单纯线性法,其基本思想时从一个基本可行解出发,不断移动到下一个能使目标函数值朝优化目标改善的基本可行解上,最终达到最优的基本可行解。因为基本可行解的个数有限,所以经过有限次转换必能得出问题的最优解。如果问题无最优解,我们也可以用单纯形法来判别。

算法原理推导

对于一个线性规划问题(以下所有加粗字母表示矩阵或向量名):
线性规划笔记之单纯形法推导
可通过引入新的变量,将其转换为松弛形式:
线性规划笔记之单纯形法推导
比如对于问题:
线性规划笔记之单纯形法推导
可转化为:
线性规划笔记之单纯形法推导
其矩阵形式:
线性规划笔记之单纯形法推导
即:
线性规划笔记之单纯形法推导
其中x1x_1,x2x_2被称为非基变量xNx_Nx3x_3, x4x_4被称为基变量xBx_B。这些变量前面对应的系数矩阵可分别记为非基矩阵NN,和基矩阵BB
假设一开始非基变量xN=0x_N=0,则由(2)可得我们的初始的基本可行解为:

线性规划笔记之单纯形法推导
则此时的目标函数值:
线性规划笔记之单纯形法推导
其上cBc_BcNc_N分别为cc中与基变量和非基变量对应的分向量。接下来要讨论如何从起始的基本可行解x0x^0出发,找到下一个能使目标函数值改善的基本可行解。
由式(2)可得:
线性规划笔记之单纯形法推导
将(3)代入(1)中得目标函数在某一可行解xx处的值为:
线性规划笔记之单纯形法推导
上式中,RR代表非基变量的下标集合,zj=cBB1pjz_j=c_BB^{-1}p_j。我们可以看到只要选取合适的变量xjx_j,就可使上述函数值减小。前面提到,在设置初始基本可行解时,我们令所有非基变量xN=0x_N=0;现在我们可以将其中的某一个非基变量xkx_k增大为正值其余保持为零,则函数值就会相应下降,而且zjcjz_j-c_j越大,函数值也会下降越快:
线性规划笔记之单纯形法推导
此时:
线性规划笔记之单纯形法推导
由于要求xBx_B永远不小于0,因此由(6)可计算出xkx_k的取值范围为:
线性规划笔记之单纯形法推导

即将xkx_k取到所有bi/pikb_i/p_{ik} 的最小值的时候,函数值会下降最快。此时将对应的基变量x_Bi变为非基变量并赋值0。并用xBix_{Bi}对应的pjp_j来替换pip_i。经过上述的替换后,目标函数值减少了(zkck)xk(z_k-c_k ) x_k。我们只需不断重复上述过程直到所有的(zjcj)(z_j-c_j )为非正数,也即此时取正增大任意一个非基变量xjx_j都不能使函数值减少,说明已经找到了极小点。

例子

举个栗子:
线性规划笔记之单纯形法推导
引入松弛变量,x3,x4,x5x_3, x_4, x_5:
线性规划笔记之单纯形法推导
进行第一次迭代:
线性规划笔记之单纯形法推导
xN=0x_N=0,由(3):
线性规划笔记之单纯形法推导
由(1)计算出此时的函数值:
线性规划笔记之单纯形法推导
接下来通过对所有非基变量计算判别数(zjcj)(z_j-c_j )来检查是否已经抵达最优解,根据(4):

线性规划笔记之单纯形法推导
则此时最大非负判别数为3,对应第一组非基变量,k=1k=1x1x_1为进基变量。根据(7):
线性规划笔记之单纯形法推导
i=1i=1, 那么xBx_B中第一个分量x3x_3为离基变量。
p1p_1替换p3p_3进行第二次迭代:
线性规划笔记之单纯形法推导
此时函数值:
线性规划笔记之单纯形法推导
判别数:
线性规划笔记之单纯形法推导
k=3k=3,进基变量x3x_3
线性规划笔记之单纯形法推导
i=2i=2,离基变量为xBx_B中第二个分量x4x_4

p3p_3替换p4p_4进行第三次迭代:
线性规划笔记之单纯形法推导
此时函数值:
线性规划笔记之单纯形法推导
判别数:
线性规划笔记之单纯形法推导
此时所有判别数均不为正,因此得到目标函数的最优解x1=4,x2=0x_1=4,x_2=0,最优函数值12-12
单纯形法实际上运行的效率不高。许多数学家在随后提出性能更佳的算法,如改进单纯形法、对偶单纯形法等。在此文中暂时不作讨论。