优化理论之单纯形法
单纯行法
核心思想
由优化理论可知,如果线性规划中的最优解,那么这个最优解必是最优基本可行解。因此线性规划的核心就变成了求最优基本可行解。这构成了单纯形法的基础。
单纯形法核心思路:
- 找到一个基本可行解
- 求一个使目标函数值有所改善的基本可行解
- 不断改进的基本可行解直到最优解
因此,大方向可以分为两个:1.找一个初时基本可行;2.改进基本可行解。对于第一个问题,用二阶段法或者大M法,第二个问题则需要考虑退化情形。
单纯形方法原理
考虑线性规划问题 min s.t. f=defcTxAx=b,x≥0(1.1) 其中,A是m×n矩阵,秩为m。cT是n维行向量,b≥0是m维列向量(每个分量都大于等于0)。我们以列向量来表示A A=(p1,p2,⋯,pn) 显然Ax可表示为: Ax=j=1∑nxjpj xj可以看成是列向量pj线性组合的系数。现将A分解成(B,N)(可能经过列调换),使得其中B是基矩阵,N是非基矩阵。在此分解下,我们假设能得到一个基本可行解: x(0)=[B−1b0] 这个基本可行解对应了线性规划的某个极点,在点x(0)处的目标函数值是 f0=cTx(0)=(cBT,cNT)[B−1b0]=cBTB−1b(1.2) 其中,cBT是cT中与基变量对应的分量组成的m维行向量,cNT是cT中与非基变量对应的分量组成的n-m维行向量(因为为了让B的秩为m,可能对A中的列变量进行过变换,对应的x,c都要变换)。
现在我们从这个基本可行解x(0)出发,利用非基变量得出一个改进的基本可行解。设 x=[xBxN] 是任一个可行解,则由Ax=b可得: xB=B−1b−B−1NxN(1.3) 在此点处的目标函数值是 f=cTx=(cBT,cNT)[xBxN]=cBTxB+cNTxN=cBT(B−1b−B−1NxN)+cNTxN=基本可行解函数值cBTB−1b−(cBTB−1N−cNT)xN=f0−j∈R∑(zjcBTB−1pj−cj)xj, R为非基变量下标集=f0−j∈R∑(zj−cj)xj(1.4) 由于cBT是m维行向量,B−1是m×m维矩阵,pj是m维列向量,因此它们的积是一个数字。由(1.4)可知,适当的选择非基变量的值xj,可以使得 j∈R∑(zj−cj)xj>0(1.5) 例如,当zj−cj<0⇒xj=0;当zj−cj≥0⇒xj>0。从而得到使目标函数的值减少的新的基本可行解。为了方便,我们不妨令n−m−1个非基变量取0,一个非基变量,比如xk大于0。需要注意的是,这个xk的系数zj−cj应该是大于0的。
根据(1.4),正系数zj−cj越大,目标函数下降越快,我们不妨用贪心法,选择xk,使 zk−ck=j∈Rmax{zj−cj}>0(1.6) xk由0变成正数后,得到方程组Ax=b的另一个解: xB=B−1b−B−1NxN=bˉB−1b−ykB−1pkxk=bˉ−ykxk(1.7) 其中,bˉ,yk都是m维列向量,xk是标量。我们知道标准形式下的可行解要求xB≥0,若我们把新得到的解xB按分量写出,即 xB=⎣⎡xB1xB2⋮xBm⎦⎤=⎣⎡bˉ1bˉ2⋮bˉm⎦⎤−⎣⎡yk1yk2⋮ykm⎦⎤xk≥0(1.8) xN=(0,0,⋯,0,xk,0,⋯,0)T(1.9) 在新得到的点,目标函数的函数值为 f=f0−(zk−ck)xk(1.10) 再来,我们分析怎样确定xk的取值。根据(1.8)的可行性限制条件(非负),我们不难得出,对∀i∈{1,2,⋯,m}且yki>0.: xBi=bˉi−ykixk≥0⇒xk≤ykibˉi 因为若yki为负,xk为正,这一分量不会成为破坏非负限制条件的分量。为了保证非负限制条件,我们必须有 xk≤min{ykibˉi∣∣yki>0} 同时,为了让f尽可能减少,我们希望xk尽量取大的值,所以有 xk=min{ykibˉi∣∣yki>0}=ykrbˉr(1.11) 认为第r项即为最小值。回顾一下刚刚的步骤,在目标函数中,因为xi是未定变量,因此我们先简单的使用贪心法,选择正系数最大的(zk−ck);接下来,再判断(zk−ck)对应的变量xk的取值范围,得到其最大值。
根据(1.8)和(1.11),我们得到了一个改进可行解,其xr→0,xk→ykrbˉr,即 xB′=(xB1,xB2,⋯,xBr−1,0,xBr+1,⋯,xBm,0,⋯,xk,⋯,0)T
这个可行解一定是基本可行解。这是因为原来的基矩中, B=(pB1,pB2,⋯,pBm) 中的m个列是线性无关的,其中不包含原属于N中的列pk。根据(1.7),有yk=B−1pk⇒pk=Byk=∑i=1mykipBi,即pk是线性无关向量组(pB1,pB2,⋯,pBm)的线性组合,且至少存在一个非0系数ykr.根据替换定理,用pk来替代pBr得到如下向量组依然是线性无关的。 B=(pB1,pB2,⋯,pBr→pk,⋯,pBm) 这样可以组成新的基矩阵B′,并得到新的基解xB′,而从(1.8)和(1.11),我们确定xB′满足每一个分量非负的条件,因此其必然是一个基本可行解。
经过上述转换,xk由原来的非基变量变成了基变量,而原来的基变量xBr变成了非基变量,同时目标函数值比原来减少了(zk−ck)xk>0。重复以上过程,进一步改进基本可行解,直到式(1.6)的结果只能为非正数,以致任何一个非基变量取正值都无法再使得目标函数值降低,此时即为最优解。
总结定理1:若在极小化问题中,对于某个基本可行解,所有(zj−cj)≤0,则这个这个基本可行解是最优解;
若在极大化问题中,对于某个基本可行解,所有(zj−cj)≥0,则这个这个基本可行解是最优解;
其中,zj−cj=cBTB−1pj−cj, j=1,⋯,n
在线性规划中,通常称zj−cj为判别数或检验数。
一般计算步骤
- 首先,我们要获得一个初始基本可行解(可通过直接计算,大M法,两阶段法获得),设初始基矩阵为B
- 在限制条件Ax=[B N][xBxN]=b中,令非基变量xN=0,则BxB=b⇒xB=B−1b=bˉ,计算目标函数值f=cBTxB
- 对于此基矩阵的解集,求单纯形乘子wT=cBTB−1(m维行向量)。对于所有非基变量,计算判别数cBTB−1pj−cj=wTpj−cj=zj−cj,求得zk−ck=j∈Rmax{zj−cj}。若zk−ck≤0,停止计算,目前基本可行解是最优解。否则,进行步骤(3)
- xB′=bˉB−1b−ykB−1pkxk。若yk≤0,即每一个分量都不大于0,则停止计算,问题不存在有限最优解;否则,进行步骤(4)
- 确定下标r,使得xk=ykrbˉr=min{ykibˉi∣∣yki>0}。xBr为离基变量,xk为进基变量,用pk替代变量pBr得到新的基矩阵B′→B,返回步骤(1)
收敛性
对于非退化情形,单纯形法有优秀的结论:
定理2:对于非退化问题,单纯形方法经过有限次迭代后,能达到最优解或得出无界的结论。在此条件下,单纯形法是收敛的。
证明:
对于非退化情形,每次迭代都有 xB=B−1b=bˉ>0 此时能保证xr=ykrbr>0。因此经迭代,目标函数值减小,并且由此可知,各次迭代得到的基本可行解互不相同。由于基本可行解的个数有限,因此经有限次迭代必能达到最优解。对于退化情形,我们在后面将要证明,如果最优解存在,只要采取一定的措施,也能做到有限步收敛。
使用表格形式的单纯形方法
用单纯形方法求解线性规划问题的过程,实际上就是解线性方程组。只是在每次迭代中,要按一定规则选择自由未知量,以便能够得到改进的基本可行解。这个求解过程可以通过变换单纯形表来实现。具体做法可见《最优化理论与算法(第2版)》第3.1.4节。
退化情形
对于退化情形,即存在基变量为0的情形(基变量为0是否一定退化有待验证),经过单纯形法多次迭代后,可能出现循环解现象(退化常见而循环不常见)。因此,我们可以采用摄动法、Bland法,字典序法。