第3章 线性规划 线性规划问题是最优化理论的重要分支,也是最基本的内容,许多实际问题抽象成数学模型后,都可以归结为线性规划问题。自从1947年G.B.Dantzig 提出求解线性规划的单纯形法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深入。特别是随着计算机技术及数值计算方法的发展,线性规划的应用领域更为广泛。 3.1 线性规划的标准形式 例1-1和例1-2所述问题的数学模型的共同特点是目标函数和约束条件均为线性,设计变量非负。例1-1中的约束条件既含有不等式约束也含有等式约束,而例1-2中的约束条件仅含“≤”的约束。归纳起来,线性规划问题的一般形式为 目标函数:max (min)f(x)=c1x1+c2x2+…+cnxn 约束条件: a11x1+a12x2+…+a1nxn≤(=,≥)b1 a21x1+a22x2+…+a2nxn≤(=,≥)b2  am1x1+am2x2+…+amnxn≤(=,≥)bm xj≥0, j=1,2,…,n, m0最大者对应的非基本变量进入基本变量,当该变量取正值时,可使目标函数增加最多。如果所有非基本变量的系数cj-zj不再有正值,则说明非基本变量的进基运算不会再使目标函数值增加,此时就终止计算,输出最优结果。非基本变量转换为基本变量后,则要将上一轮迭代中的一个基本变量转换为非基本变量,判断出基本变量表的条件由约束方程的消元计算格式给出。 设xk为进基变量,不失一般性,认为xk替换xr,在约束方程中相应地用pk替换pr, pk=[a′1k a′2k … a′mk]T, pr=[a′1r a′2r … a′mr]T,新的基矩阵为E(1)。为表示清楚起见,将pk标记为p(k)r,其元素相应地表示为p(k)r=[a′(k)1r a′(k)2r … a′(k)mr]T。因此基矩阵E(1)表示为E(1)=[p1 p2 … p(k)r … pm] =10…a′(k)1r…0 01…a′(k)2r…0  …a′(k)rr…0  00…a′(k)mr…1 变量xk由零变为正值后,新的方程组的解为x′E=E-1(1)b′ (3-13) 其中,基矩阵E(1)的逆阵为E-1(1)=10…-a′(k)1ra′(k)rr…0 01…-a′(k)2ra′(k)rr…0  …1a′(k)rr…0  00…-a′(k)mra′(k)rr…1 (3-14)  这里认为初始基矩阵为单位阵。在基矩阵中用pk替换pr,就是将pk放在第r列的位置上。对于式(3-14)所示的矩阵,其逆矩阵只有第r列的元素发生变化,对角线上的元素为相应元素的倒数,该列上其他元素等于原来的元素取反再除以对角线上的元素。式(3-13)的解为x(k)r=b′ra′(k)rr (3-15) x(k)i=b′i-a′(k)irb′ra′(k)rr=b′i-a′(k)irx(k)r, i=1,2,…, m,i≠r (3-16)  由于设计变量非负,并假设设计变量在约束方程中的系数和右端项元素均大于零,因此x (k)r≥0自然满足;而式(3-16)中的变量非负意味着b′i-a′(k)irb′ra′(k)rr≥0即b′ia′(k)ir-b′ra′(k)rr≥0 (3-17) 当θ=xk=b′ra′(k)rr=min b′ia′(k)ir,a′(k)ir>0 (3-18) 时,则能保证用xk替换xr使所有基本变量非负。在线性规划中,通常称σj=cj-zj (3-19) 为判别数或检验数。对极小化问题,进基变量xk的下标与σk=ck-zk=minj(cj-zj)项的下标“k”对应,非基本变量xk的引入使目标函数f=f0+∑nj=m+1σjxj增加最多(最大值问题),或减少最多(最小值问题)。出基变量xEr的下标与θ=b′ra′rk=minb′ia′ik,a′ik>0项的下标“r”对应。式(3-18)和式(3-19)是单纯形法求解线性规划问题的重要判别式和检验规则。 3.2.3 单纯形法的计算步骤 应用单纯形法求解时,首先要了解怎样求得初始基本可行解,又怎样从一个基本可行解转到邻近的另一个基本可行解,又怎样检验得到的基本可行解是不是最优解。下面通过例题3-2说明这些问题。 【例3-2】 用单纯形法求下述问题的最优解:min z=-6x1+3x2-2x3 s.t. 2x1+x2+x3≤6 x1+x3≤2 x1,x2,x3≥0 解: 首先引入松弛变量x4,x5,把数学模型化为标准形式:min z=-6x1+3x2-2x3+0x4+0x5 s.t. 2x1+x2+x3+x4+0x5=6 x1+0x2+x3+0x4+x5=2 x1,x2,x3,x4,x5≥0 引入松弛变量后,变量总数n=5,约束方程数m=2(不含变量大于等于零的约束),因此有n-m=3个非基本变量,并令其为零进行求解。一个简单的做法就是选松弛变量x4,x5为基本变量,因为其系数列向量为单位基向量E=p4 p5=10 01。将基本变量用右端列向量和非基本变量表示,得x4=6-2x1-x2-x3 x5=2-x1-x3令非基本变量x1=x2=x3=0,则基本解为x4=6, x5=2记初始基本解为x(0)=\T 此解又满足式xj≥0,j=1,2,…,5,因此,x(0)是基本可行解,它对应着凸可行域的一个顶点。一般来说,对于约束条件全为“≤bi”形式(i=1,2,…,m)的线性规划问题,通过引入松弛变量,可较容易地找到一个初始基本可行解。 下一步,将初始基本可行解x(0)=\T代入目标函数表达式中,得z=-6×0+3×0-2×0+0×6+0×2=0 非基本变量x1=x2=x3=0对应的目标函数值z=0,为找出进基变量,将x4,x5代入原式得z=-6x1+3x2-2x3+c4(6-2x1-x2-x3)+c5(2-x1-x3) =6c4+2c5+(-6-2×c4-c5)x1+(3-c4)x2+(-2-c4-c5)x3 =\10 01]6 2]+\-\10 01]211 101]x1 x2 x3] =cTEE-1b+(cTN-cTEE-1N)xN =-6x1+3x2-2x3 由上式看出,x1增加1个单位,目标函数值z下降6个单位;x2增加1个单位,z增加3个单位;x3增加1个单位,z值下降2个单位。如果使x1和x3成为正值,都能使目标函数向极小方向改善,那么当前解不是最优解。 选择的进基变量应是使目标函数改善最大的非基本变量进基。由前面的分析看到,在目标函数中,应选择有负系数,且负系数绝对值最大的非基本变量进基。例3-2中,目标函数中x1的系数为-6,所以x1应选为进基变量。这是因为当x1由当前的零变为正值时,使目标函数下降最大。 出基变量的选择也不是任意的,原则是要保证变量满足非负条件。为此,要考察约束条件。这两个方程均有变量x1要从0上升为正值,要从x4和x5这两个变量中选择一个出基(即从当前值下降到0) ,而另两个非基本变量x2和x3还要保持为零。 由式x4=6-2x1-x2-x3 x5=2-x1-x3得x4=6-2x1 x5=2-x1 x1从0变为正值时,x4和x5可从当前值下降为0,但不能成为负值(因为变量要满足非负条件)。由上式可以看出,x1取x1=θmin =min biai1=21=2时,x4和x5均为非负 (x4=2>0, x5=0) ,且θmin 使x5=0,因此选x5为出基变量。 已经确定了进基变量x1和出基变量x5,就可进行新的消元求解。继续求解下面的方程:0x5+x2+x3+x4+2x1=6 x5+0x2+x3+ 0x4+x1=2 此时,令非基本变量x2=x3=x5=0,求x1和x4的解。为了下面便于说明建立单纯形表的过程,用初等变换(消元)求解上面的方程,结果为-2x5+x2-x3+x4+0x1=2 x5+0x2+x3+0x4+x1=2解得x1=2, x4=2 再将x1和x4用约束方程的非基本变量表示,得x4=2-x2+x3+2x5 x1=2-x3-x5将其代入目标函数,得z=-6(2-x3-x5)+3x2-2x3+c4(2-x2+x3+2x5)+c5x5整理得z=-6×2+c4×2+(3-c4)x2+(-2+6+c4)x3+(c5+6+2c4)x5由于所有非基本变量的系数均为非负,没有进一步可使目标函数减少的非基本变量,因此迭代结束,最优解为x1=2,x2=0,x3=0,f=-12. 根据3.2.2节的介绍及上面的计算,单纯形法的一般步骤可归纳如下。 (1) 把线性规划问题的约束方程组表达成标准形方程组,然后找出一个基本可行解作为初始基本可行解。对等式约束或“≥bi”形式的约束,如果不易得出初始基本可行解,则需