陈宝林《最优化理论与算法》详细学习笔记 (三)————单纯形法
一般线性规划问题具有线性方程组的变量数大于方程个数,这时有不定的解。于是,我们有选择地选择一个基本可行解,也就是可行域的一个顶点,沿着可行域的边界到下一个相邻的顶点,要求新的顶点目标值函数更优,如此迭代,直至找到最优解,或判定该最优化问题无界。这就是单纯形法的基本求解思路
数学模型
给定标准形式的LP
mincx
s.t.
Ax=b,
i=1,2,…,m,
x≥0
x=(xB,xN),xB 为基变量,
xN 为非基变量
利用分块矩阵
A=[B,N]Ax=b⇒BxB+NxN=b⇒xB+B−1NxN=B−1b⇒xB=B−1b−B−1xN
于是目标函数
z=cB′xB+cN′xN=cB′(B−1b−B−1NxN)+cN′xN=cB′B−1b+(cN′−cB′B−1N)xN
上式中
(cN′−cB′B−1N)的分量
cˉj=cj−cB′B−1Aj为约化(缩减)费用,于是有基本可行解
x与基
B相关联;若约化费用
cˉ>0则可以推出
x为最优;
x为最优且非退化可以推出
cˉ>0。
最优性检验与解的判别
由于线性规划问题的求解可能出现唯一最优解、无穷多最优解、无界解和无可行解等四种情况,因此,需要建立解的判别准则。
xi=bi′−j=m+1∑naij′xj,(i=1,2,⋯n)
将上式代入目标函数式,整理可得
z=j=1∑ncjxj=i=1∑mcixi+j=m+1∑ncjxj=i=1∑mci(bi−j=m+1∑naijxj)+j=m+1∑ncjxj=i=1∑mcibi−i=1∑mcij=m+1∑naijxj+j=m+1∑ncjxj=i=1∑mcibi−j=m+1∑ni=1∑mciaijxj+j=m+1∑ncjxj=i=1∑mcibi+j=m+1∑n(cj−i=1∑mciaij)xj
最优解的判别定理
若
X(0)=(b1′,b2′,⋯,bm′,0,⋯,0)T为对应于基
B的一个基可行解,且对于一切
j=m+1,…,n有
σj≤0,则
X(0)为最优解。称
σj为检验数
无穷多最优解判别定理
若
X(0)=(b1′,b2′,⋯,bm′,0,⋯,0)T为对应于基
B的一个基可行解,且对于一切
j=m+1,…,n有
σj≤0,又存在某个非基变量的检验数
σm+k=0,则线性规划问题有无穷多最优解。
简要证明思路如下:只需将非基变量
xm+k=0换入基变量中,找到一个新基可行解
X(1)。因为
σm+k=0,所以
z=z0,故
X(1)也是最优解,进而
X(0)和
X(1)连线上的所有点都是最优解。
无界解判别定理
若
X(0)=(b1′,b2′,⋯,bm′,0,⋯,0)T为一个基可行解,有一个
σm+k>0,并且对
i=m+1,…,n,有
ai,m+k≤0,那么该线性规划问题具有无界解(或称无最优解)。
简要证明思路如下:构造一个新的解
X(1),其分量为
xi(1)=bi′−λai,m+k′(λ>0)xm+k(1)=λxj(1)=0;j=m+1,⋯,n, 并且 j=m+k
因为
ai,m+k≤0,所以对任意的
λ>0都是可行解,把
x(1)代入目标函数内,得到
z=z0+λσm+k
因
σm+k>0,故当
λ→+∞, 则
z→+∞, 故该问题 目标函数无界。
其他情形
以上讨论都是针对标准型的,即求目标函数极大化时的情况。当要求目标函数极小化时,一种情况是将其化为标准型。
如果不化为标准型,只需在上述1,2点中把
σj≤0 改 为
σj≥0, 第3点中将
σm+k>0 改写为
σn+k<0 即可。
第三章 单纯形法
单纯形表
单纯形表
为了便于理解计算关系,现设计一种计算表,称为单纯形表,其功能与增广矩阵相似。
将(1-22)式与目标函数组成n+1个变量,m+1个方程的方程组。
x1+a1m+1xm+1+⋯+a1nxn=b1x2+a2m+1xm+1+⋯+a2nxn=b2xm+amm+1xm+1+⋯+amnxn=bm−z+c1x1+⋯+cmxm+cm+1xm+1+⋯+cnxn=0
为了便于迭代运算,可将上述方程组写成增广矩阵形式
⎝⎜⎜⎜⎜⎜⎛00⋮0110⋮0c1010c2⋯⋯⋯⋯00⋮0cma1,m+1a2,m+1⋮am,m+1cm+1⋯⋯⋯⋯a1na2n⋮amncnb1b2⋮bm0⎠⎟⎟⎟⎟⎟⎞
若将
z看作不参与基变换的基变量,它与
x1,x2,…,xm的系数构成一个基,这时可采用行初等变换将
c1,c2,…,cm变换为零,使其对应的系数矩阵为单位矩阵。得到
⎝⎜⎜⎜⎜⎜⎛00⋮0110⋮000100⋯⋯⋯⋯00⋮00a1,m+1a2,m+1⋮am,m+1cm+1−∑i=1mciai,m+1⋯⋯⋯⋯a1na2n⋮amncn−∑i=1mciainb1b2⋮bm−∑i=1mcibi⎠⎟⎟⎟⎟⎟⎞
对于上表的说明:
XB列中填入基变量,这里是
x1,x2,…,xm;
CB列中填入基变量的价值系数,这里是
c1,c2,…,cm;它们是与基变量相对应的;
b列中填入约束方程组右端的常数;
cj行中填入基变量的价值系数
c1,c2,…,cn;
θi列的数字是在确定换入变量后,按
θ规则计算后填入;
最后一行称为检验数行,对应各非基变量
xj的检验数是
cj−∑i=1mciaij,j=1,2,⋯,n
计算步骤
在初始单纯形表的基础上,每迭代一步构造一个新单纯形表,计算步骤如下:
(1)按数学模型确定初始可行基和初始基可行解,建立初始单纯形表。
(2)计算各非基变量xj的检验数,
σj=cj−∑i=1mciaij;检查检验数,若所有检验数
σj≤0,j=1,2,⋯n则已得到最优解,可停止计算。否则转入下一步。
(3)在
σj>0,j=m+1,…,n中,若有某个
σk对应
xk的系数列向量
Pk≤0,则此问题是无界,停止计算。否则,转入下一步。
(4)根据
max(σj>0)=σk,确定
xk为换入变量,按
θ计算
θ=min(aikbi∣aik>0)=alkbl
(5)以
alk为主元素进行迭代(即用高斯消去法或称为旋转运算),把
xk所对应的列向量
Pk=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛a1ka2k⋮alk⋮amk⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞ 变换 ⇒⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛00⋮1⋮0⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞← 第 l 行
将X_{B}列中的x_{l}换为x_{k},得到新的单纯形表。重复(2)~(5),直到终止。
人工变量法
设线性规划问题的约束条件
∑j=1nPjxj=b
其中没有可作为初始基的单位矩阵,则分别给每一个约束方程加入人工变量
xn+1,…,xn+m,得到
⎩⎪⎪⎨⎪⎪⎧a11x1+a12x2+⋯+a1nxn+xn+1a21x1+a22x2+⋯+a2nxn+xn+2am1x1+am2x2+⋯+amnxnx1,⋯,xn≥0;xm+1,⋯,xn+m≥0=b=b+xn+m=b
以
xn+1,…,xn+m为基变量,并可得到一个
m×m单位矩阵。令非基变量
x1,…,xn为零,便可得到一个初始基可行解
X(0)=(0,0,…,0,b1,b2,…,bm)T
因为人工变量是后加入到原约束条件中的虚拟变量,要求经过基的变换将它们从基变量中逐个替换出来。
基变量中不再含有非零的人工变量,这表示原问题有解。
若在最终表中当所有
cj−zj≤0,而在其中还有某个非零人工变量,这表示原问题无可行解。
以下讨论如何解含有人工变量的线性规划问题。
大M法
大M法的思想就是,在原线性规划问题加入松弛变量和人工变量后,将目标函数中松弛变量的系数设为0、人工变量的系数设为M(无穷大的数),再利用单纯形法进行计算得到最优解。
两阶段法
以下介绍求解含有人工变量线性规划问题的两阶段法。
第一阶段:不考虑原问题是否存在基可行解;给原线性规划问题加入人工变量,并构造仅含人工变量的目标函数和要求实现最小化。
目标函数
minω=xn+1+⋯+xn+m+0x1+0x2+⋯+0xn
约束条件
⎩⎪⎪⎨⎪⎪⎧a11x1+a12x2+⋯⋯a21x1+a22x2+⋯⋯+a1nxn+xn+1⋯am1x1+am2x2+⋯⋯+amxn⋯=b1=b2⋯+xn+m=bm⋯⋯
第一阶段求解:用单纯形法求解上述模型。若得到的最有值
w=0,说明原问题存在基可行解,可以进行第二段计算。否则原问题无可行解,应停止计算。
第二阶段求解:从第一阶段计算得到的最终表中除去人工变量,将目标函数行的系数,换为原问题的目标函数系数,作为第二阶段计算的初始表。各阶段的计算方法及步骤与第3节介绍的单纯形法相同。
退化
在单纯形法计算中用
θ规则确定换出变量时,有时存在两个以上相同的最小比值,这样在下一次迭代中就有一个或几个基变量等于零,这就出现了退化解。
这时换出变量
xl=0,迭代后目标函数值不变。这时不同基表示为同一顶点。有人构造了一个特例,当出现退化时,进行多次迭代,而基从
B1,
B2,…又返回到
B1,即出现计算过程的循环,便永远达不到最优解。
尽管实际计算过程中循环现象极少出现,但还是有可能发生的。如何解决这问题? 先后有人提出了“摄动法”,“字典序法”。1974年由勃兰特(Bland)提出一种简便的规则,简称勃兰特规则:
(1) 选取
cj−zj>0中下标最小的非基变量
xk为换入变量,即
k=min(j∣cj−zj>0)
(2) 当按
θ规则计算存在两个和两个以上最小比值时,选取下标最小的基变量为换出变量。
按勃兰特规则计算时,一定能避免出现循环。