【运筹学学习笔记】单纯形法(持续更新)

运筹学绪论

运筹学是一门应用于管理有组织系统的科学,根据问题的要求,通过数学分析与计算,做出综合性的合理安排,以期达到资源的最优化利用。

运筹学考虑系统的整体优化、多学科的配合以及模型方法的应用,其研究可以分为以下几个步骤:

1.分析与表述问题。
2.建立模型
3.对问题求解
4.对模型和由模型导出的解进行检验
5.建立对解的有效控制
6.方案的实施。

其中,建模是运筹学方法的核心和精髓。

线性规划与单纯形法

线性规划模型的组成要素和特征

决策变量 指决策者为实现规划目标采取的方案、措施,是问题中要确定的未知量。

目标函数 指问题要达到目标的要求,表示为决策变量的函数。

约束条件 指决策变量取值时受到的各种限制,表示为决策变量的等式或不等式。

定义:目标决策变量为可控的连续变量,目标函数和约束条件都是线性的,这类模型称为线性规划模型。

线性规划问题的一般形式

1.标量形式

决策变量 {xii=1,2,...,n}\{x_i|i=1,2,...,n\}

目标函数 max(min) z=c1x1+c2x2+...+cnxnmax(min)~z=c_1x_1+c_2x_2+...+c_nx_n

约束条件 s.t.={a11x1+a12x2+...+a1nxn(=,)b1,a21x1+a22x2+...+a2nxn(=,)b2,  am1x1+am2x2+...+amnxn(=,)bm,xj0  xj0  xjs.t.=\left\{ \begin{matrix} a_{11}x_1+a_{12}x_2+...+a_{1n}x_n \le(=,\ge)b_1,\\ a_{21}x_1+a_{22}x_2+...+a_{2n}x_n \le(=,\ge)b_2,\\ ~~\vdots\\ a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n \le(=,\ge)b_m,\\ x_j\ge0~或~x_j\le0~或~x_j无约束 \end{matrix} \right.

一般用 n ~n~表示决策变量的个数, m ~m~代表约束等式/不等式的个数

通常情况下要求 m<n ~m<n~,否则可能导致没有可行解

2.向量形式

决策变量 X=(x1 x2  xn)TX=(x_1~x_2~\ldots~x_n)^T

目标函数 max(min) z=CXmax(min)~z=CX

约束条件 s.t.={j=1nxjPj(=,)bX0s.t.=\left\{ \begin{matrix} \displaystyle\sum_{j=1}^{n}x_jP_j\le(=,\ge)b\\ X\ge 0 \end{matrix} \right.

其中 C=(c1 c2 ... cn),Pj=(a1j a2j  amj)T,b=(b1 b2 ... bm)TC=(c_1~c_2~...~c_n),P_j=(a_{1j}~a_{2j}~\ldots~a_{mj})^T,b=(b_1~b_2~...~b_m)^T.

注意列向量 PQ ~P\ge Q~意味着 i  PiQi\forall i~~P_i\ge Q_i,矩阵也类似

3.矩阵形式

max(min) z=CXs.t.={AX(=,)bX0 C=(c1 c2 ... cn),A=[a11a12a1na21a22a2nam1am2amn],X=(x1x2xn),b=(b1b2bn) max(min)~z=CX\\ s.t.=\left\{ \begin{matrix} AX\le(=,\ge)b\\ X\ge 0 \end{matrix} \right.\\ 其中~C=(c_1~c_2~...~c_n),\\ A=\left[\begin{matrix} a_{11}&a_{12}&\ldots&a_{1n}\\ a_{21}&a_{22}&\ldots&a_{2n}\\ \vdots&\vdots&&\vdots\\ a_{m1}&a_{m2}&\ldots&a_{mn}\\ \end{matrix} \right],X=\left(\begin{matrix}x_1\\x_2\\\vdots\\x_n\\\end{matrix}\right),b=\left(\begin{matrix}b_1\\b_2\\\vdots\\b_n\\\end{matrix}\right)

称为约束方程组变量的系数矩阵,简称为约束变量的系数矩阵。

线性规划问题的标准形式

对于一般的线性规划模型缺乏统一的结构,这在问题的求解上无疑增加了一定的难度,因此,我们在定义线性规划的标准形式如下:

决策变量 {xii=1,2,...,n}\{x_i|i=1,2,...,n\}

目标函数 max(min) z=c1x1+c2x2+...+cnxnmax(min)~z=c_1x_1+c_2x_2+...+c_nx_n

约束条件 s.t.={a11x1+a12x2+...+a1nxn=b1,a21x1+a22x2+...+a2nxn=b2,  am1x1+am2x2+...+amnxn=bm,x10,x20,xn0s.t.=\left\{ \begin{matrix} a_{11}x_1+a_{12}x_2+...+a_{1n}x_n=b_1,\\ a_{21}x_1+a_{22}x_2+...+a_{2n}x_n=b_2,\\ ~~\vdots\\ a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n=b_m,\\ x_1\ge0,x_2\ge0,\dots x_n\ge0 \end{matrix} \right.

其中 bj0,1jm.~b_j\ge0,1\le j\le m.

矩阵形式
max z=CXs.t.={AX=bX0 max~z=CX\\ s.t.=\left\{ \begin{matrix} AX=b\\ X\ge 0 \end{matrix} \right.

其中ARm×nA\in \mathbb{R}^{m\times n}是一个行满秩矩阵

标准形式的转化

1.目标函数

目标函数的极小值\Leftrightarrow目标函数相反数的最大值,即 min z=CXmax z=CX~min~z=CX \Rightarrow max~z'=-CX

2.约束条件

i=1naijxjbi    i=1naijxj+xn+i=bi  (xn+i0)\displaystyle\sum_{i=1}^{n} a_{ij}x_j\le b_i~~\Rightarrow~~\sum_{i=1}^{n} a_{ij}x_j+x_{n+i}=b_i~~(x_{n+i}\ge0),其中 xn+i ~x_{n+i}~称为松弛变量

i=1naijxjbi    i=1naijxjxn+i=bi  (xn+i0)\displaystyle\sum_{i=1}^{n} a_{ij}x_j\ge b_i~~\Rightarrow~~\sum_{i=1}^{n} a_{ij}x_j-x_{n+i}=b_i~~(x_{n+i}\ge0),其中 xn+i ~x_{n+i}~称为剩余变量

松弛变量可以理解为资源的剩余,剩余变量可以理解为需求的溢出

bi0    bi=bi,aij=aij b_i\le0~~\Rightarrow~~b_i=-b'_i,a_{ij}=-a'_{ij}~其中 1jn , bi0~1\le j\le n~,~b'_i\ge0

3.决策变量

无约束决策变量:xj x_j~无限制xj=xjxj \Rightarrow x_j=x'_j-x''_j~,其中xj,xj0x'_j,x''_j\ge0

非正变量:xj0xj=xjx_j\le0\Rightarrow x_j=-x'_j,其中 xj0~x'_j\ge0

线性规划问题的解

可行解:如果一个非负矩阵 X ~X~满足约束方程,则称矩阵 X ~X~为可行解。

可行域:可行解组成的集合Ω={XAX=b,X0,XRn}\Omega=\{X\mid AX=b,X\ge0,X\in\mathbb{R}^n\}称为可行域,可行域中使得目标函数达到最大值的可行解称为最优解

:若 B ~B~ A ~A~的一个 m×m ~m\times m~阶的满秩子矩阵,则称 B ~B~为线性规划问题的一个基。B B~中的每一个列向量用 Pj ~P_j~表示,注意这里基是一组系数矩阵
B=[b11b12b1mb21b22b2mbm1bm2bmm]=(P1,P2,,Pm) B=\left[\begin{matrix} b_{11}&b_{12}&\ldots&b_{1m}\\ b_{21}&b_{22}&\ldots&b_{2m}\\ \vdots&\vdots&&\vdots\\ b_{m1}&b_{m2}&\ldots&b_{mm}\\ \end{matrix}\right]=(P_1,P_2,\dots,P_m)
基解:假设 B ~B~为一个基,可知存在 x1,,xm ~x_1,\ldots,x_m~使得 x1P1+xmPm=b~x_1P_1+\ldots x_mP_m=b,则称X=(x1,,xm,0,,0)TX=(x_1,\ldots,x_m,0,\ldots,0)^T为基 B ~B~的基解,其中 x1,,xm ~x_1,\dots,x_m~称为基变量,其余的决策变量称为非基变量。

基可行解:若满足变量非负约束条件的基解称为基可行解。

可行基:假对应于基可行解的基称为可行基。

退化解:当基解中的非零分量小于 m ~m~个时,该基解是退化解

解的维恩图表示:
【运筹学学习笔记】单纯形法(持续更新)

线性规划问题的解法

1.图解法(略) 2.单纯形法

预备知识

凸集:假设 CRn~C\subset\mathbb{R}^n.若对任意 X,YC ~X,Y\in C~ 0<λ<1 ~0<\lambda<1~,都有 λX+(1λ)YC ~\lambda X+(1-\lambda)Y\subset C~,则称 C ~C~为一个凸集(Convex set)。从直观上讲,凸集没有凹入部分,其内部也没有空洞。

凸组合:设向量 {xi},i=1,2,,n~\{x_i\},i=1,2,\dots,n,如果有实数λi0 \lambda_i\ge0~ i=1nλi=1~ \displaystyle\sum_{i=1}^n \lambda_i=1,则称 i=1nλixi ~\displaystyle\sum_{i=1}^n\lambda_ix_i~为向量 {xi} ~\{x_i\}~的凸组合(凸线性组合)

顶点:假设 C ~C~是凸集,且 XC ~X\in C~.若不存在 X1,X2C ~X_1,X_2\in C~使得 X=λX1+(1λ)X2 ~X=\lambda X_1+(1-\lambda)X_2~,其中0<λ<10<\lambda<1,则 X ~X~称为 C ~C~的一个顶点.

凸集内点与其顶点的关系:若 C ~C~是有界的凸集,则对任意 XC ~X\in C~,都可以表示成 D ~D~的顶点的凸组合。

几个基本定理(证明不考)

定理1:若线性规划问题存在可行解,则其可行域是凸集。
证明:我们我们考察如下的标准形式的线性规划问题:
max z=CXs.t.={AX=bX0 max~z=CX\\ s.t.=\left\{ \begin{matrix} AX=b\\ X\ge 0 \end{matrix} \right.
两个不同的解是 X ~X~ Y ~Y~满足 AX=BX=b,X0,Y0 ~AX=BX=b,X\ge0,Y\ge0~,则对于任意 0<λ<1~0<\lambda<1,我们有 A(λX+(1λ)Y)=b,λX+(1λ)Y0 ~A(\lambda X+(1-\lambda)Y)=b,\lambda X+(1-\lambda)Y\ge0~.所以可行域为凸集。

定理2:线性规划问题的基可行解对应线性规划问题可行域的顶点。

引理 1:线性规划问题的可行解 X 为基可行解的充要条件是 X 的正分量所对应的系数列向量是线性无关的.(由基可行解的定义可知必要性是显然的. )

证明:假设XX为一个基可行解,若 X ~X~不是一个顶点,则可行域中存在两个不同的点 Y,Z ~Y,Z~使得 X=λY+(1λ)Z,0<λ<1 ~X=\lambda Y+(1-\lambda)Z,0<\lambda<1~,不妨设 X ~X~只有前 k ~k~个分量大于0,显然 Y,Z ~Y,Z~ nk ~n-k~个分量都为0,我们有
i=1kxiPi=b, i=1kyiPi=b, i=1kziPi=b. \sum_{i=1}^kx_iP_i=b,~\sum_{i=1}^ky_iP_i=b,~\sum_{i=1}^kz_iP_i=b.

由于 P1,P2,,Pk ~P_1,P_2,\dots,P_k~线性无关(也就是方程只有一个解),我们得到 X=Y=Z ~X=Y=Z~,与我们的假设矛盾,所以XX一定是一个顶点。

如果假设XX是一个顶点,并且假设其只有前 k ~k~个分量大于0,若果 X ~X~不是一个基可行解,则由引理可知 P1,P2,,Pk ~P_1,P_2,\dots,P_k~线性相关,说以存在 k ~k~个不为零的实数使得
d1P1+d2P2++dkPk=0D=(d1,d2,,dk,0,,0)T d_1P_1+d_2P_2+\dots+d_kP_k=0\\ D=(d_1,d_2,\dots,d_k,0,\dots,0)^T
显然有 AX=0A(X+sD)=A(XsD)=b ~AX=0\rightarrow A(X+sD)=A(X-sD)=b~,对任意实数 s ~s~都成立,s>0,X+sD0  XsD0\exist s>0, X+sD\ge0~\wedge~X-sD\ge0,则 X ~X~是可行域中 X+sD ~X+sD~ XsD ~X-sD~的中点,这与XX是一个顶点矛盾,所以XX一定是一个基可行解。

定理3:若线性规划问题存在最优解,则一定存在一个基可行解是最优解。

引理2:若XX是一个最优解,且 X=λY+(1λ)Z ~X=\lambda Y+(1-\lambda)Z~,其中 Y,Z ~Y,Z~是两个可行解,0<λ<10<\lambda<1,则 CX=CY=CZ ~CX=CY=CZ~.(反证法易得)

证明:设XX是一个最优解,且不妨假设其只有前kk个分量大于0,若XX是一个基可行解,则证毕;否则存在kk个不全为0的实数使得(5)式成立,且A(X+rD)=A(XsD)=b A(X+rD)=A(X-sD)=b~对任意实数 s,r ~s,r~都成立,同时X+rDX+rDXsDX-sD至少有一个正分量的数量小于 k~k。则由上一个引理可知我们得到了一个新的最优解,且这个最优解的正分量的数量小于 k~k,若新的到的最优解依然不是基可行解,重复上面的过程,我们可以得到一个新的最优解,这个最优解的正分量的数量小于 k~k,以此类推,经过有限步之后,我们肯定可以得到一个基可行解. 证毕.

定理4:若线性规划问题有可行解,则必有基可行解

定理5:若线性规划问题有最优解,则必有最优基可行解

单纯形法

确定初始基可行解

当线性规划问题全部为“\le”时,在化为标准型时,加入的m个松弛变量所构成的单位矩阵就可以构成一组基:设给定线性规划问题
max z=j1ncjxjs.t.={j=1nxjPjbxj0 max~z=\sum_{j-1}^n c_jx_j\\ s.t.=\left\{ \begin{matrix} \displaystyle\sum_{j=1}^{n}x_jP_j\le b\\ x_j\ge 0 \end{matrix} \right.
在第 i ~i~个约束条件上加上松弛变量 ssi,(i=1,,m)~s_{si},(i=1,\dots,m),化为标准形式
max z=j1ncjxj+0i=1mxsis.t.={j=1naijxj+xsi=b,(i=1,2,,m)xj0 max~z=\sum_{j-1}^n c_jx_j+0\sum_{i=1}^m x_{si}\\ s.t.=\left\{ \begin{matrix} \displaystyle\sum_{j=1}^{n}a_{ij}x_j+x_{si}=b,(i=1,2,\dots,m)\\ x_j\ge 0 \end{matrix} \right.
其约束方程的系数矩阵为
[a11a12a1n100a21a22a2n010am1am2amn001] \left[\begin{matrix} a_{11}&a_{12}&\dots&a_{1n}&1&0&\dots&0\\ a_{21}&a_{22}&\dots&a_{2n}&0&1&\dots&0\\ \vdots&\vdots& &\vdots&\vdots&\vdots& &\vdots\\ a_{m1}&a_{m2}&\dots&a_{mn}&0&0&\dots&1\\ \end{matrix}\right]
这个系数矩阵中含有一个单位向量(Ps1,Ps2,,Psm)(P_{s1},P_{s2},\dots,P_{sm}),只要以这个单位矩阵作为基,就可以立即解出基变量值 xsi=bi ~x_{si}=b_i~,因为 bi0 ~b_i\ge0~,因此 X=(0,,0,b1,,bm)T~X=(0,\dots,0,b_1,\dots,b_m)^T就是一个基可行解。

当线性规划问题中约束条件包含"==“或”\ge"时,化为标准型后一般不包含单位矩阵,这时常用添加人工变量的方法人为构造一个单位矩阵作为基,称为人工基,具体方法在第五章讨论。

基可行解的转换

不失一般性,设初始基可行解为
 X(0)=(x10,x20,,xm0,0,,0nm)T=(XBXN),A=(B N) ~X^{(0)}=(x^0_1,x^0_2,\dots,x^0_m,\overbrace{0,\dots,0}^{n-m个})^T=\left(\begin{matrix}X_B\\X_N\end{matrix}\right),A=(B~N)
其中BB是对应的可行基,相应的,设C=(CB,CN)C=(C_B,C_N),我们有AX(0)=(B,N)(XBXN)=BXB=bAX^{(0)}=(B,N)\left(\begin{matrix}X_B\\X_N\end{matrix}\right)=BX_B=b,我们有XB=B1b,XN=0X_B=B^{-1}b,X_N=0

此时目标函数值 z(0)=CX=(CB CN)(XBXN)=CBXBCNXN=CBB1b.~z^{(0)}=CX=(C_B~C_N)\left(\begin{matrix}X_B\\X_N\end{matrix}\right)=C_BX_B-C_NX_N=C_BB^{-1}b.

原始方程组的增广形式为:

P1 P2    Pm Pm+1    Pj Pn  b[a11a12a1ma1,m+1a1ja1nb1a21a22a2ma2,m+1a2ja2nb2am1am2ammam,m+1amjamnbm] \left.\begin{matrix}\\ P_1~&P_2&~~\dots&~~P_m&~P_{m+1}~~&\dots&~~P_j&\dots~&P_n&~~b\\ \end{matrix}\right.\\ \left[\begin{array}{ccccccccc|c} a_{11}&a_{12}&\dots&a_{1m}&a_{1,m+1}&\dots&a_{1j}&\dots&a_{1n}&b_1\\ a_{21}&a_{22}&\dots&a_{2m}&a_{2,m+1}&\dots&a_{2j}&\dots&a_{2n}&b_2\\ \vdots&\vdots&\ddots&\vdots&\vdots&&\vdots&&\vdots&\vdots\\ a_{m1}&a_{m2}&\dots&a_{mm}&a_{m,m+1}&\dots&a_{mj}&\dots&a_{mn}&b_m\\ \end{array}\right]

因为 P1,P2,,Pm ~P_1,P_2,\dots,P_m~ Rm ~\mathbb{R^m}~的一组基,所以其余的PjP_j都可以用这个基来表示,我们可以将PjP_j替换为BB1PjBB^{-1}P_j,所以有 B(XBθB1Pj)+θPj=b~B(X_B-\theta B^{-1}P_j)+\theta P_j=b,我们假设XBθB1Pj0X_B-\theta B^{-1}P_j\ge0,那么我们得到了一个新的可行解
X~=(XBθB1Pj0)+θej \tilde{X}=\left(\begin{matrix}X_B-\theta B^{-1}P_j\\0\end{matrix}\right)+\theta e_j
其中,ej e_j~为第 j ~j~个分量为1其余分量为0的单位列向量,这个可行解的目标函数值为
z~=CX~=(CB CN)((XBθB1Pj0)+θej)=CBXB+θ(cjCBB1Pj)=z(0)+θ(cjCBB1Pj) \begin{aligned} \widetilde{z}&=C\tilde{X}\\ &=(C_B~C_N)\left(\left(\begin{matrix}X_B-\theta B^{-1}P_j\\0\end{matrix}\right)+\theta e_j\right)\\ &=C_BX_B+\theta(c_j-C_BB^{-1}P_j)\\ &=z^{(0)}+\theta(c_j-C_BB^{-1}P_j) \end{aligned}

我们令 σj=cjCBB1Pj~\sigma_j=c_j-C_BB^{-1}P_j,则z~=z(0)+θσj\tilde{z}=z^{(0)}+\theta\sigma_jσj \sigma_j~被称为检验数

​ 如果 θj>0~\theta_j>0,则新的可行解可以使目标函数变大,且 θ ~\theta~应该越大越好. 此时注意到为了保证X~\tilde{X}是一个可行解,应该有 XBθB1Pj0~X_B-\theta B^{-1}P_j\ge0,显然这个(B1Pj)(B^{-1}P_j)很难处理,我们不妨在求解之前通过初等行变换把BB化为单位矩阵(想一想,为什么可以这么做?),即化成

P1P2PmPm+1Pj  Pn  b[100a1,m+1a1ja1nb1010a2,m+1a2ja2nb2001am,m+1amjamnbm] \left.\begin{matrix}\\ P_1&P_2&\dots&P_m&P_{m+1}&\dots&P_j&\dots&~~P_n&~~b&\\ \end{matrix}\right.\\ \left[\begin{array}{ccccccccc|c} 1&0&\dots&0&a_{1,m+1}&\dots&a_{1j}&\dots&a_{1n}&b_1\\ 0&1&\dots&0&a_{2,m+1}&\dots&a_{2j}&\dots&a_{2n}&b_2\\ \vdots&\vdots&\ddots&\vdots&\vdots&&\vdots&&\vdots&\vdots\\ 0&0&\dots&1&a_{m,m+1}&\dots&a_{mj}&\dots&a_{mn}&b_m\\ \end{array}\right]

假设BB是一个单位矩阵且b>0b>0,那么 θ ~\theta~的最大值显然是θ=min{biaij:aij>0,1im}\displaystyle\theta^*=min\{\frac{b_i}{a_{ij}}:a_{ij}>0,1\le i\le m\},不妨设θ=brarj\displaystyle\theta^*=\frac{b_r}{a_{rj}},则(P1,,Pr1,Pr+1,,Pm,Pj)(P_1,\dots,P_{r-1},P_{r+1},\dots,P_m,P_j)构成一组新的基,这个基的基解和目标函数值为

X(1)=(XBθB1Pj0)+θej,z(1)=z(0)+θσj X^{(1)}=\left(\begin{matrix}X_B-\theta^* B^{-1}P_j\\0\end{matrix}\right)+\theta^* e_j,z^{(1)}=z^{(0)}+\theta^*\sigma_j

最优性检验和解的判别

(1) 当  σj0~\forall~\sigma_j\le0时,表明现有顶点的目标函数的值比起相邻各顶点的目标

函数值都大,现以顶点对应的基可行解即为最优解。(为什么局部最优解等于全局最优解?)

(2)当  σj0 σr=0~\forall~\sigma_j\le0\wedge\exist~ \sigma_r=0时,X~=(XBθB1Pj0)+θej \tilde{X}=\left(\begin{matrix}X_B-\theta B^{-1}P_j\\0\end{matrix}\right)+\theta e_j~ X(0)~X^{(0)}的线性组合都是最优解,因此有无限多个解

(3)当 σj>0( θ>0) XBθB1Pj0\exist~\sigma_j>0\wedge(\forall~\theta>0)~X_B-\theta B^{-1}P_j\ge0时,目标函数值可以取到无限大,最优解无界。

单纯性法的计算步骤

to be continue...to~be~continue...