线性规划问题
线性规划是一类形如这样的问题:
最大化/最小化一个z=∑j=1ncjxjz=\sum_{j=1}^n c_j x_jz=∑j=1ncjxj
xjx_jxj是变量,其中有些是自由变量(随意取值),有些具有非负条件。
此外还有若干形如∑j=1naijxj≤/=/≥bi\sum_{j=1}^n a_{ij}x_j \leq/=/\geq b_i∑j=1naijxj≤/=/≥bi的约束条件。
比方说,《算法设计与分析》中的一个例子:
求:maxz=12x1+15x2\max z = 12x_1+15x_2maxz=12x1+15x2
约束:
0.25x1+0.50x2≤1200.25x_1+0.50x_2 \leq 1200.25x1+0.50x2≤120
0.50x1+0.50x2≤1500.50x_1+0.50x_2 \leq 1500.50x1+0.50x2≤150
0.25x1≤500.25x_1 \leq 500.25x1≤50
x1≥0,x2≥0x_1 \geq 0, x_2 \geq 0x1≥0,x2≥0
(在这里约束只有小于等于一种,是最简单的线性规划情形)
所谓单纯形,是一种常用的求解线性规划问题的算法。我曾经为它深情地赋过三行诗一首:
啊!单纯形!
你一点也不单纯!
你很行!
_(:зゝ∠)_
接下来我们就来讲讲这一点也不单纯的单纯形算法的步骤吧!
标准形
数学的基本思想,就是化繁为简,现在我们把这堆乱七八糟的条件进行一些统合,使得线性规划问题变得更加简单。
标准形的要求有三条:最小化zzz,所有约束条件都是∑j=1naijxj=bi\sum_{j=1}^n a_{ij}x_j = b_i∑j=1naijxj=bi的形式,所有变量x_j有非负条件。
第一步好说,如果原问题是最大化zzz,只需要取反z′=−zz'=-zz′=−z,然后最小化这个z′z'z′即可。
第二步呢,则对于sumj=1naijxj≤bisum_{j=1}^n a_{ij}x_j \leq b_isumj=1naijxj≤bi的形式,引入松弛变量yi≥0y_i \geq 0yi≥0,然后将条件改为∑j=1naijxj+yi=bi\sum_{j=1}^n a_{ij}x_j+y_i = b_i∑j=1naijxj+yi=bi。至于大于等于的条件,引入类似的剩余变量yiy_iyi,∑j=1naijxj−yi=bi\sum_{j=1}^n a_{ij}x_j -y_i = b_i∑j=1naijxj−yi=bi即可。
第三步,将自由变量xjx_jxj替换为xj′−xj′′x_j'-x_j''xj′−xj′′,xj′,xj′′≥0x_j',x_j'' \geq 0xj′,xj′′≥0
那么对于例子来说,只需要添加松弛变量就可以了,化成标准形如下:
目标:minz′=−12x1−15x2\min z' = -12x_1-15x_2minz′=−12x1−15x2
约束:
0.25x1+0.50x2+x3=1200.25x_1+0.50x_2+x_3=1200.25x1+0.50x2+x3=120
0.50x1+0.50x2+x4=1500.50x_1+0.50x_2+x_4=1500.50x1+0.50x2+x4=150
0.25x1+x5=500.25x_1+x_5=500.25x1+x5=50
x1,x2,x3,x4,x5≥0x_1,x_2,x_3,x_4,x_5 \geq 0x1,x2,x3,x4,x5≥0
标准形的基本解
令A=[a11⋯a1n⋮⋱⋮am1⋯amn]A=\begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \end{bmatrix}A=⎣⎢⎡a11⋮am1⋯⋱⋯a1n⋮amn⎦⎥⎤,b=[b1⋮bm]b=\begin{bmatrix} b_1 \\ \vdots \\ b_m \end{bmatrix}b=⎣⎢⎡b1⋮bm⎦⎥⎤,c=[c1⋮cn]c=\begin{bmatrix}c_1 \\ \vdots \\ c_n \end{bmatrix}c=⎣⎢⎡c1⋮cn⎦⎥⎤,x=[x1⋮xn]x=\begin{bmatrix}x_1 \\ \vdots \\ x_n \end{bmatrix}x=⎣⎢⎡x1⋮xn⎦⎥⎤
则条件可以写作Ax=b,minz=cTxAx=b,\min z=c^TxAx=b,minz=cTx
令PjP_jPj为AAA的列向量,也可以说有条件∑j=1nPjxj=b\sum_{j=1}^n P_jx_j = b∑j=1nPjxj=b
假设AAA的秩为ttt,将列向量中的ttt个基向量弄出来组成一个m∗tm * tm∗t的矩阵BBB,非基向量对应的xjx_jxj(称为非基变量,而基向量对应的变量就叫基变量)直接赋值为0,根据我们小学学过的线性代数知识,基变量能够找到唯一解,这组解被称为基本解。
更数学一点的说法,令xBx_BxB为基变量构成的基向量,解BxB=bBx_B=bBxB=b得xB=B−1bx_B=B^{-1}bxB=B−1b,非基变量则全赋为0。
对于一组确定的基向量,基本解是唯一的,但是由于基向量的取法不唯一,所以基本解也有很多种。基本解符合了大部分条件,非常好,但唯一的问题是不一定满足xj≥0x_j \geq 0xj≥0。
定理1:若标准型有可行解,必有基本可行解。
证明:假设AAA列满秩,那么解只有一组,符合了xj≥0x_j \geq 0xj≥0就是可行的。否则一定存在不全为0的λ\lambdaλ使得∑j=1nPjλj=0\sum_{j=1}^n P_j \lambda_j = 0∑j=1nPjλj=0。令δ\deltaδ是一个常数,则∑j=1n(xj+λjδ)Pj=b\sum_{j=1}^n (x_j + \lambda_j \delta)P_j=b∑j=1n(xj+λjδ)Pj=b。{xj′=xj+λjδ}\{x_j'=x_j+\lambda_j \delta\}{xj′=xj+λjδ}也还是一组解。
xj+λjδ≥0 ⟺ δ≥−xjλjx_j+\lambda_j \delta \geq 0 \iff \delta \geq - \frac{x_j}{\lambda_j}xj+λjδ≥0⟺δ≥−λjxj,我们得到了一组δ\deltaδ的约束条件。将δ\deltaδ尽可能地减小,总会导致−xjλj-\frac{x_j}{\lambda_j}−λjxj最大的那个xjx_jxj有xj′=0x_j'=0xj′=0,于是变量数就减少了并且新的解还是可行解。不再考虑xjx_jxj,继续看剩下的Pi(i≠j)P_i(i \not= j)Pi(i=j)是否线性相关,一直做到将所有的非基变量全部变成0即可获得一组基本可行解。
定理2:若标准型有最优解,必定有基本最优解。
证明:由于{xj}\{x_j\}{xj}是最优解,所以无论δ\deltaδ如何取值(可正可负),∑j=1ncjxj≤∑j=1ncj(xj+δλj)=∑j=1ncjxj+δ∑j=1ncjλj\sum_{j=1}^n c_jx_j \leq \sum_{j=1}^n c_j(x_j+\delta\lambda_j)=\sum_{j=1}^n c_j x_j + \delta \sum_{j=1}^n c_j\lambda_j∑j=1ncjxj≤∑j=1ncj(xj+δλj)=∑j=1ncjxj+δ∑j=1ncjλj恒成立。
所以∑j=1ncjλj=0\sum_{j=1}^n c_j\lambda_j=0∑j=1ncjλj=0
所以我们做如定理1证明那样的解变换,不会改变最优性。
不过如果你看我们的例子,基变量可以取我们添加的松弛变量,会发现BBB的形式非常简单,就是一个3×3的单位矩阵。所以很快可以得到一组基本解:(0,0,120,150,50)(0,0,120,150,50)(0,0,120,150,50)。
最优性检验
这是一组可行解,可是,是不是最优解呢?如果能确定是最优解,或者没有最优解,我们的算法就可以停下来了。
我们之前定义了基变量对应的AAA中的几行构成矩阵BBB,它们对应的ccc和xxx中的几行拿出来就叫cBc_BcB啊xBx_BxB什么的。那么非基变量也类似定义NNN,对于例子,N=[0.250.500.500.500.250]N=\begin{bmatrix} 0.25 & 0.50 \\ 0.50 & 0.50 \\ 0.25 & 0 \end{bmatrix}N=⎣⎡0.250.500.250.500.500⎦⎤。
则BxB+NxN=bBx_B+Nx_N=bBxB+NxN=b,即xB=B−1b−B−1NxNx_B=B^{-1}b-B^{-1}Nx_NxB=B−1b−B−1NxN
代入目标函数z=cTx=cBTB−1b+(cNT−cBTB−1N)xNz=c^Tx=c_B^TB^{-1}b+(c_N^T-c_B^TB^{-1}N)x_Nz=cTx=cBTB−1b+(cNT−cBTB−1N)xN
那对于一组基本可行解,xN(0)=0x_N^{(0)}=0xN(0)=0,故z0=cBTB−1bz_0=c_B^TB^{-1}bz0=cBTB−1b
对于任意解:
z=z0+(cNT−cBTB−1N)xN+(cBT−cBTB−1B)xB=z0+(ct−cBTB−1A)xz=z_0+(c_N^T-c_B^TB^{-1}N)x_N+(c_B^T-c_B^TB^{-1}B)x_B=z_0+(c^t-c_B^TB^{-1}A)xz=z0+(cNT−cBTB−1N)xN+(cBT−cBTB−1B)xB=z0+(ct−cBTB−1A)x
(上式中xBx_BxB乘的东西等于0)
记λT=cT−cBTB−1A\lambda^T=c^T-c_B^TB^{-1}AλT=cT−cBTB−1A,称它的分量λ1,...,λn\lambda_1,...,\lambda_nλ1,...,λn为检验数。则z=z0+λTxz=z_0+\lambda^T xz=z0+λTx
定理3:给定一个基本可行解x(0)x^{(0)}x(0),则
(1)若所有检验数大于等于0,则x(0)x^{(0)}x(0)是最优解。
(2)若存在检验数λk<0\lambda_k < 0λk<0且所有aik≤0a_{ik}\leq 0aik≤0,则无最优解。
根据xxx的非负性还是比较显然的。
并且我们记一下Pi′=B−1P,A′=B−1A=(αij)m∗n,β=B−1bP_i'=B^{-1}P,A'=B^{-1}A=(\alpha_{ij})_{m * n},\beta=B^{-1}bPi′=B−1P,A′=B−1A=(αij)m∗n,β=B−1b(这个β\betaβ就是基变量的解值啦)
看起来很复杂,尤其是有个超级复杂的东西——矩阵逆在里面。但我们现在只讨论最简单情况,对于例子,由于BBB是一个单位阵,所以B−1B^{-1}B−1可以不用考虑了。并且由于基变量都是我们人工加出来的,cBc_BcB全零,所以又有一大段不用考虑了。
所以,λT=cT=[−12−15000]\lambda^T=c^T=\begin{bmatrix} -12 & -15 & 0 & 0 &0 \end{bmatrix}λT=cT=[−12−15000]。
但是看起来它两个条件都不满足,看来我们还得继续。
基变换
假设基B=(Pπ(1),...Pπ(m))B=(P_{\pi(1)},...P_{\pi(m)})B=(Pπ(1),...Pπ(m)),不加这个π\piπ的PPP呢,就是非基。现在我们的目的是将Pπ(l)P_{\pi(l)}Pπ(l)(换出变元/向量)和PkP_kPk(换入变元/向量)换一下,得到一个新的基,并得到它对应的基本可行解,继续检验它是不是最优解。
检验数的计算和B−1B^{-1}B−1息息相关,所以我们不得不继续定义复杂的符号,比如A′=(αij)m∗n=B−1AA'=(\alpha_{ij})_{m*n}=B^{-1}AA′=(αij)m∗n=B−1A,β=B−1b\beta=B^{-1}bβ=B−1b,以及Pi′=B−1PiP_i'=B^{-1}P_iPi′=B−1Pi(当然,对于例子里的最简单情况,其实这些东西和A,b,PiA,b,P_iA,b,Pi完全一致)
首先,B′=(Pπ(1)′,...,Pπ(m)′)=B−1B=IB'=(P_{\pi(1)}',...,P_{\pi(m)}')=B^{-1}B=IB′=(Pπ(1)′,...,Pπ(m)′)=B−1B=I
B−1A=B−1AIB^{-1}A=B^{-1}AIB−1A=B−1AI,而Pk′P_k'Pk′是B−1AB^{-1}AB−1A的第kkk列,故:
Pk′=∑i=1mαikPπ(i)P_k'=\sum_{i=1}^m \alpha_{ik}P_{\pi(i)}Pk′=i=1∑mαikPπ(i)
左边同时乘以BBB:
Pk=∑i=1mαikPπ(i)P_k=\sum_{i=1}^m \alpha_{ik}P_{\pi(i)}Pk=i=1∑mαikPπ(i)
若αlk≠0\alpha_{lk} \not=0αlk=0,则将PkP_kPk替换Pπ(l)P_{\pi(l)}Pπ(l)后,得到的还是一个基。
如果再去利用小学学的知识计算这次替换对A′A'A′和β\betaβ的影响的话,可以得到一下变化公式:
αlj′=αljαlk\alpha_{lj}'=\frac{\alpha_{lj}}{\alpha_{lk}}αlj′=αlkαlj
αij′=αij−αikαljαlk\alpha_{ij}'=\alpha_{ij}-\frac{\alpha_{ik}\alpha_{lj}}{\alpha_{lk}}αij′=αij−αlkαikαlj
唔……这就是个将除了第lll行以外的第kkk列元全部消掉,第lll行的第kkk列元变成1的变换过程呢,在高斯消元中,我们可经常做这事。
βl′=βlαlk\beta_l'=\frac{\beta_l}{\alpha_{lk}}βl′=αlkβl
βi′=βi−αikβlαlk\beta_i'=\beta_i-\frac{\alpha_{ik}\beta_l}{\alpha_{lk}}βi′=βi−αlkαikβl
要保证新的基依然能够得到可行解,就需要βi′≥0\beta_i' \geq 0βi′≥0(β\betaβ是解值)
也就是需要取lll使得βlαlk=min{βiαik∣αik>0}\frac{\beta_l}{\alpha_{lk}}=\min\{\frac{\beta_i}{\alpha_{ik}} | \alpha_{ik}>0\}αlkβl=min{αikβi∣αik>0}
另外还有:
λi′=λi−λkαliαlk\lambda_i'=\lambda_i-\lambda_k\frac{\alpha_{li}}{\alpha_{lk}}λi′=λi−λkαlkαli
z0′=z0+λkβlαikz_0'=z_0+\frac{\lambda_k \beta_l}{\alpha_{ik}}z0′=z0+αikλkβl
这些式子看着又复杂又眼熟,复杂在于有一堆lll啊kkk啊什么的,头都要晕了,而眼熟在于,它们还是好像高斯消元过程中的消元操作啊!事实上,通单纯形表,我们可以让这些复杂的公式,都变成简单的高斯消元!
不过,在介绍单纯形表前,我们还是再来回顾一遍单纯形的一般步骤吧:
单纯形的一般步骤
- 首先找一组初始可行解。
- 判断是否是最优解(所有λk≥0\lambda_k \geq 0λk≥0)或者无最优解(所有λk<0\lambda_k <0λk<0的kkk,对任何lll都有αl,k<0\alpha_{l,k} < 0αl,k<0)。
- 取一个λk<0\lambda_k<0λk<0,且αl,k>0\alpha_{l,k}>0αl,k>0,βlαl,k\frac{\beta_l}{\alpha_{l,k}}αl,kβl最小的lll,将基lll与非基kkk进行交换得到一组新基。
- 重复2。
另外,在第三步中,为了避免单纯形陷入死循环,人们一般在多个λk<0\lambda_k<0λk<0中选最小(绝对值最大)的那个。数学证明?我不会!(理直气壮.jpg)
单纯形表
将上文提到的所有参数合理地画出一张表格,那么基变换中连带着导致α,β,z\alpha, \beta, zα,β,z和λ\lambdaλ的变换,就能被统一起来。
单纯形表是一个这样子的东西:
c1⋯cn\begin{matrix}c_1 & \cdots & c_n \end{matrix}c1⋯cn | ||||
---|---|---|---|---|
cBc_BcB | xBx_BxB | bbb | x1⋯xn\begin{matrix}x_1 & \cdots & x_n \end{matrix}x1⋯xn | θ\thetaθ |
cπ(1)⋮cπ(m)\begin{matrix}c_{\pi(1)} \\ \vdots \\ c_{\pi(m)} \end{matrix}cπ(1)⋮cπ(m) | xπ(1)⋮xπ(m)\begin{matrix}x_{\pi(1)} \\ \vdots \\ x_{\pi(m)} \end{matrix}xπ(1)⋮xπ(m) | β1⋮βm\begin{matrix}\beta_1 \\ \vdots \\ \beta_m \end{matrix}β1⋮βm | α11⋯α1n⋮⋱⋮απ(m1)⋯αmn\begin{matrix}\alpha_{11} & \cdots & \alpha_{1n}\\ \vdots & \ddots & \vdots \\ \alpha_{\pi(m1)} & \cdots & \alpha_{mn}\end{matrix}α11⋮απ(m1)⋯⋱⋯α1n⋮αmn | |
−z-z−z | −z0-z_0−z0 | λ1⋯λn\begin{matrix}\lambda_1 & \cdots & \lambda_n \end{matrix}λ1⋯λn |
我们一般令要换入的kkk是λk\lambda_kλk最小的那个,θ\thetaθ就是对应的βlαlk\frac{\beta_l}{\alpha_{lk}}αlkβl。
初始的βi=bi\beta_i=b_iβi=bi,初始的xBx_BxB就是添加的几个松弛变量,初始的λ\lambdaλ也就是ccc。
我们拿例题中的数据举例:
−12−15000\begin{matrix}-12& -15 & 0 & 0 & 0 \end{matrix}−12−15000 | ||||
---|---|---|---|---|
cBc_BcB | xBx_BxB | bbb | x1x2x3x4x5\begin{matrix}x_1 & x_2 & x_3 & x_4& x_5 \end{matrix}x1x2x3x4x5 | θ\thetaθ |
000\begin{matrix}0 \\ 0 \\ 0 \end{matrix}000 | x3x4x5\begin{matrix}x_3 \\ x_4\\ x_5 \end{matrix}x3x4x5 | 12015050\begin{matrix}120 \\ 150 \\ 50 \end{matrix}12015050 | 0.250.501000.500.500100.250001\begin{matrix}0.25& 0.50 & 1 & 0 & 0\\ 0.50& 0.50& 0 & 1 & 0\\ 0.25 & 0& 0 & 0 & 1\end{matrix}0.250.500.250.500.500100010001 | 2403000\begin{matrix}240 \\ 300 \\ 0 \end{matrix}2403000 |
−z-z−z | 000 | −12−15000\begin{matrix}-12 & -15& 0 & 0 & 0\end{matrix}−12−15000 |
这里换入变元是x2x_2x2,换出变元是x3x_3x3。
现在你可以暂时忘记上面的公式了,我们要做的事是,将表中央写了数据(α,β,λ,−z\alpha,\beta,\lambda,-zα,β,λ,−z)的四个格子,看成一个统一的矩阵。然后完成第1行第2列对其他行的消元。
第一行,同时除以0.500.500.50。
第二行,150−=120150-=120150−=120,0.50−=0.250.50-=0.250.50−=0.25,0.50−=0.500.50-=0.500.50−=0.50(消成0),0−=10-=10−=1,1−=01-=01−=0,0−=00-=00−=0。
第三行,由于第2列为0,无需操作。
第四行(−z-z−z和λ\lambdaλ),0−=120∗(−15/0.50)0-=120*(-15/0.50)0−=120∗(−15/0.50),−12−=0.25∗(−15/0.50)-12-=0.25*(-15/0.50)−12−=0.25∗(−15/0.50),0−=1∗(−15/0.50)0-=1*(-15/0.50)0−=1∗(−15/0.50),0−=00-=00−=0,0−=00-=00−=0。
得到下表(θ\thetaθ是选定换入变元是x1x_1x1算的):
−12−15000\begin{matrix}-12& -15 & 0 & 0 & 0 \end{matrix}−12−15000 | ||||
---|---|---|---|---|
cBc_BcB | xBx_BxB | bbb | x1x2x3x4x5\begin{matrix}x_1 & x_2 & x_3 & x_4& x_5 \end{matrix}x1x2x3x4x5 | θ\thetaθ |
−1500\begin{matrix}-15 \\ 0 \\ 0 \end{matrix}−1500 | x2x4x5\begin{matrix}x_2 \\ x_4\\ x_5 \end{matrix}x2x4x5 | 2403050\begin{matrix}240\\ 30\\ 50 \end{matrix}2403050 | 0.5012000.250−1100.250001\begin{matrix}0.50& 1& 2 & 0 & 0\\ 0.25& 0& -1 & 1 & 0\\ 0.25 & 0& 0 & 0 & 1\end{matrix}0.500.250.251002−10010001 | 480120200\begin{matrix}480\\ 120\\ 200 \end{matrix}480120200 |
−z-z−z | 360036003600 | −4.503000\begin{matrix}-4.5 & 0& 30 & 0 & 0\end{matrix}−4.503000 |
再接下来,使用x1x_1x1换x4x_4x4,然后完成第2行第1列对其他所有行的消元,得:
−12−15000\begin{matrix}-12& -15 & 0 & 0 & 0 \end{matrix}−12−15000 | ||||
---|---|---|---|---|
cBc_BcB | xBx_BxB | bbb | x1x2x3x4x5\begin{matrix}x_1 & x_2 & x_3 & x_4& x_5 \end{matrix}x1x2x3x4x5 | θ\thetaθ |
−15−120\begin{matrix}-15 \\ -12 \\ 0 \end{matrix}−15−120 | x2x1x5\begin{matrix}x_2 \\ x_1\\ x_5 \end{matrix}x2x1x5 | 18012020\begin{matrix}180\\ 120\\ 20 \end{matrix}18012020 | 014−2010−440001−11\begin{matrix}0& 1& 4 & -2 & 0\\ 1& 0& -4 & 4 & 0\\ 0 & 0& 1 & -1 & 1\end{matrix}0101004−41−24−1001 | |
−z-z−z | 414041404140 | 0012180\begin{matrix}0 & 0& 12 & 18 & 0\end{matrix}0012180 |
可以看见此时λ\lambdaλ已经全正了,是最优解。
人工变量与两阶段法
对于所有约束条件都是≤\leq≤的情况,我们已经看过了,由于BBB可以取成单位阵,所以运算比较简便。那引入了===和≥\geq≥怎么办呢?
继续看算分书的例子:
minz=−3x1+x2+x3\min z = -3x_1+x_2+x_3minz=−3x1+x2+x3
x1−2x2+x3≤11x_1 - 2x_2+x_3 \leq 11x1−2x2+x3≤11
−4x1+x2+2x3≥3-4x_1+x_2+2x_3 \geq 3−4x1+x2+2x3≥3
−2x1+x3=1-2x_1+x_3=1−2x1+x3=1
x1,x2,x3≥0x_1,x_2,x_3 \geq 0x1,x2,x3≥0
唔……总而言之,我们可以先把它变成一个标准形。
minz=−3x1+x2+x3\min z = -3x_1+x_2+x_3minz=−3x1+x2+x3
x1−2x2+x3+x4=11x_1 - 2x_2+x_3+x_4 =11x1−2x2+x3+x4=11
−4x1+x2+2x3−x5=3-4x_1+x_2+2x_3-x_5 =3−4x1+x2+2x3−x5=3
−2x1+x3=1-2x_1+x_3=1−2x1+x3=1
x1,x2,x3,x4,x5≥0x_1,x_2,x_3,x_4,x_5 \geq 0x1,x2,x3,x4,x5≥0
取不出单位阵基向量怎么办?那就硬取!我们加入人工变量x6x_6x6和x7x_7x7,将约束条件暂时变为:
−4x1+x2+2x3−x5+x6=3-4x_1+x_2+2x_3-x_5+x_6 =3−4x1+x2+2x3−x5+x6=3
−2x1+x3+x7=1-2x_1+x_3+x_7=1−2x1+x3+x7=1
这样取x4,x6,x7x_4,x_6,x_7x4,x6,x7作为基变量就可以使B=IB=IB=I了!
但问题是,这个x6x_6x6和x7x_7x7必须等于0啊。
于是我们先求解这么一个线性规划问题:
minω=x6+x7\min \omega = x_6+x_7minω=x6+x7,约束条件不变。
由于ω≥0\omega \geq 0ω≥0,所以这个问题必有最优解。这个问题求出来的可行解,由于约束条件和求zzz的那个问题完全一致,所以也是原问题的可行解。
若最优解ω>0\omega > 0ω>0,说明原问题无解,不能将所有的人工变量都变成0。
若最优解ω=0\omega=0ω=0,也就是x6,x7=0x_6,x_7=0x6,x7=0,此时我们一定能够通过基变换操作使得x6x_6x6和x7x_7x7不是基变量,具体的数学证明我这里就不谈啦。然后我们就可以在单纯形表中直接删掉x6,x7x_6,x_7x6,x7两列,将ccc和λ\lambdaλ计算并修改后,就能接着做原问题了。
所以所谓的两阶段法,指的就是靠ω\omegaω的问题得到人工变量不在基中的可行解,然后再计算zzz的问题的一个过程。
总结
单纯形法的思路建立在“有可行解则有基本可行解”,“有最优解则有基本最优解”的思路上,将在繁多的解上讨论的问题转化为在基本解上讨论的问题。通过检验数λ\lambdaλ来确定是否得到了最优解,通过基变换来枚举不同的基本解的这么一个过程。
为了计算简便,我们初始需要的基向量阵应该是人力引入的变量构成的单位阵。这在≤\leq≤约束条件下很好实现,而对于===和≥\geq≥的情况,我们需要引入最终希望它们都是0的人工变量,然后使用两阶段法来消掉人工变量。