单纯形法学习

单纯形法(Simplex Algorithm)是求解线性规划问题最常用、最有效的算法之一

线性规划

一般形式:
max ⁡ c T x  s.t.  a i T x ≤ b i a j T x = b j x k ≥ 0 \begin{gathered} \max \mathbf{c}^{T} \mathbf{x} \\ \text { s.t. } \mathbf{a}_i^T\mathbf{x}\le b_i \\ \mathbf{a}_j^T\mathbf{x}=b_j \\ \mathbf{x}_k \geq 0 \end{gathered} maxcTx s.t. aiTxbiajTx=bjxk0
其中 x ∈ R n \mathbf{x}\in\mathbb{R}^n xRn

标准形式:
max ⁡ c T x  s.t.  A x = b x ≥ 0 \begin{gathered} \max \mathbf{c}^{T} \mathbf{x} \\ \text { s.t. } \mathbf{Ax}=\mathbf{b} \\ \mathbf{x} \geq 0 \end{gathered} maxcTx s.t. Ax=bx0
其中 A ∈ R m × n , b ∈ R + m , x ∈ R n \mathbf{A}\in\mathbb{R}^{m\times n},\mathbf{b}\in\mathbb{R}_{+}^m,\mathbf{x}\in\mathbb{R}^n ARm×n,bR+m,xRn

c T x \mathbf{c}^T\mathbf{x} cTx目标函数
c \mathbf{c} c价值向量, c i c_i ci价值系数
b \mathbf{b} b右端向量
A \mathbf{A} A约束矩阵
x i x_i xi没有符号约束(可以取正,负,零),则称为自由变量

满足所有约束条件的解称为可行解
可行解组成的集合为可行域

一般形式转为标准形式

如果是 min ⁡ c T x \min \mathbf{c}^T\mathbf{x} mincTx,则改为 max ⁡ − c T x \max -\mathbf{c}^T\mathbf{x} maxcTx

如果 x i x_i xi为自由变量,则引入 x i + , x i − ≥ 0 x_i^+,x_i^-\ge 0 xi+,xi0,用 x i + − x i − x_i^+-x_i^- xi+xi来代替 x i x_i xi,并添加约束 x i + , x i − ≥ 0 x_i^+,x_i^-\ge 0 xi+,xi0

如果 a i T x ≤ b i \mathbf{a}_i^T\mathbf{x}\le b_i aiTxbi,引入松弛变量 x s ≥ 0 x_s\ge0 xs0,将约束变为 a i T x + x s = b i \mathbf{a}_i^T\mathbf{x}+x_s= b_i aiTx+xs=bi,并添加约束 x s ≥ 0 x_s\ge 0 xs0

如果 a i T x ≥ b i \mathbf{a}_i^T\mathbf{x}\ge b_i aiTxbi,引入松弛变量(剩余变量) x s ≥ 0 x_s\ge0 xs0,将约束变为 a i T x − x s = b i \mathbf{a}_i^T\mathbf{x}-x_s= b_i aiTxxs=bi,并添加约束 x s ≥ 0 x_s\ge 0 xs0

如果 b i < 0 b_i<0 bi<0则两边同乘 − 1 -1 1

线性规划可行域几何结构

x \mathbf{x} x的超平面: H x = { z ∣ c T z = c T x = b } H_{\mathbf{x}}=\left\{\mathbf{z}|\mathbf{c}^T\mathbf{z}=\mathbf{c}^T\mathbf{x}=b\right\} Hx={zcTz=cTx=b}
半空间: { z ∣ c T z ≤ b = c T x } \left\{\mathbf{z}|\mathbf{c}^T\mathbf{z}\le b=\mathbf{c}^T\mathbf{x}\right\} {zcTzb=cTx}
在这里插入图片描述
凸集 C C C是凸集,若 x 1 , x 2 ∈ C \mathbf{x}_1,\mathbf{x}_2\in C x1,x2C,则 ∀ λ ∈ [ 0 , 1 ] , s . t .   λ x 1 + ( 1 − λ ) x 2 ∈ C \forall \lambda \in\left[0,1\right],s.t.\ \lambda \mathbf{x}_1+\left(1-\lambda\right)\mathbf{x}_2\in C λ[0,1],s.t. λx1+(1λ)x2C

多面体 P = { x ∣ A x ≤ b , C x = d } P=\left\{\mathbf{x}|\mathbf{A}\mathbf{x}\le \mathbf{b},\mathbf{C}\mathbf{x}=\mathbf{d}\right\} P={xAxb,Cx=d}
容易验证,多面体是一个闭凸集,线性规划可行域是一个多面体

极点

C ⊆ R n C\subseteq \mathbb{R}^n CRn是一个非空闭凸集, x ˉ ∈ C \bar{\mathbf{x}}\in C xˉC
如果不存在 x 1 , x 2 ∈ C , λ ∈ ( 0 , 1 ) \mathbf{x}_1,\mathbf{x}_2\in C,\lambda \in \left(0,1\right) x1,x2C,λ(0,1),使得 x ˉ = λ x 1 + ( 1 − λ ) x 2 \bar{\mathbf{x}}=\lambda \mathbf{x}_1+(1-\lambda)\mathbf{x}_2 xˉ=λx1+(1λ)x2
x ˉ \bar{\mathbf{x}} xˉ C C C的一个极点(extreme point)

基可行解

B B B是秩为 m m m的约束矩阵 A ∈ R m × n \mathbf{A}\in \mathbb{R}^{m\times n} ARm×n种的一个 m m m阶满秩子方阵,
B \mathbf{B} B称为一个
B \mathbf{B} B m m m个线性无关的列向量称为基向量
变量 x \mathbf{x} x中与之对应的 m m m个分量称为基变量,其余分量为非基变量
x = ( x B x N ) = ( B − 1 b 0 ) \mathbf{x}=\begin{pmatrix}\mathbf{x}_\mathbf{B}\\\mathbf{x}_{\mathbf{N}}\\\end{pmatrix}=\begin{pmatrix}\mathbf{B}^{-1}\mathbf{b}\\\mathbf{0}\\\end{pmatrix} x=(xBxN)=(B1b0)称为相应于 B \mathbf{B} B基解
B − 1 b ≥ 0 \mathbf{B}^{-1}\mathbf{b}\ge 0 B1b0时, x \mathbf{x} x称为基可行解(basic feasible solution,BFS),此时相应的基 B \mathbf{B} B称为可行基

显然,极点至多有 C n m = ( n m ) = n ! m ! ( n − m ) ! C_{n}^{m}=\begin{pmatrix}n\\m\\ \end{pmatrix}=\frac{n!}{m!\left(n-m\right)!} Cnm=(nm)=m!(nm)!n!

定理1

可行解 x \mathbf{x} x时基可行解的充要条件时 x \mathbf{x} x正分量所对应的 A \mathbf{A} A的列向量线性无关

证明:
必要性:由基可行解定义,显然
充分性:
不妨设 x \mathbf{x} x为可行解,前 k k k个分量为正分量
A \mathbf{A} A的列向量为 A 1 , A 2 , ⋯   , A n \mathbf{A}_1,\mathbf{A}_2,\cdots, \mathbf{A}_n A1,A2,,An

A 1 , ⋯   , A k \mathbf{A}_1,\cdots, \mathbf{A}_k A1,,Ak线性无关, k ≤ m k\le m km
k = m k=m k=m,则 x \mathbf{x} x为基可行解
k < m k<m k<m,因为 r a n k ( A ) = m rank\left(\mathbf{A}\right)=m rank(A)=m,可以从剩下 n − k n-k nk个列向量中挑选 m − k m-k mk个,组成基 B \mathbf{B} B,显然 x \mathbf{x} x B \mathbf{B} B对应的基向量

极点和基可行解等价

x \mathbf{x} x是基可行解的充要条件是 x \mathbf{x} x是极点

证明:
A = ( A 1 , ⋯   , A n ) , A i ∈ R m \mathbf{A}=\left(\mathbf{A}_1,\cdots,\mathbf{A}_n\right),\mathbf{A}_i\in\mathbb{R}^m A=(A1,,An),AiRm
设可行域 P P P
充分性:设 x \mathbf{x} x是极点,
假设 x \mathbf{x} x不是BFS
不妨假设 x \mathbf{x} x的前 k k k个分量为正分量
A 1 , ⋯   , A k \mathbf{A}_1,\cdots, \mathbf{A}_k A1,,Ak线性相关(如果线性无关,则根据定理1, x \mathbf{x} x时BFS)
于是 ∃ d ≠ 0 \exists\mathbf{d}\neq \mathbf{0} d=0,使得 ∑ i = 1 k A i d i = 0 \sum_{i=1}^{k}\mathbf{A}_i d_i=\mathbf{0} i=1kAidi=0
∃ ϵ > 0 \exists \epsilon>0 ϵ>0,使得 x + ϵ d , x − ϵ d ∈ P \mathbf{x}+\epsilon\mathbf{d},\mathbf{x}-\epsilon\mathbf{d}\in P x+ϵd,xϵdP
x = 1 2 ( x + ϵ d ) + 1 2 ( x − ϵ d ) \mathbf{x}=\frac{1}{2}\left(\mathbf{x}+\epsilon\mathbf{d}\right)+\frac{1}{2}\left(\mathbf{x}-\epsilon\mathbf{d}\right) x=21(x+ϵd)+21(xϵd)
x \mathbf{x} x不是极点,矛盾
所以 x \mathbf{x} x是BFS

必要性:设 x \mathbf{x} x是BFS
假设 x \mathbf{x} x不是极点
则存在 y , z ∈ P , y ≠ x , z ≠ x , λ ∈ ( 0 , 1 ) , x = λ y + ( 1 − λ ) z \mathbf{y},\mathbf{z}\in P,\mathbf{y}\neq \mathbf{x},\mathbf{z}\neq \mathbf{x},\lambda \in\left(0,1\right),\mathbf{x}=\lambda \mathbf{y}+\left(1-\lambda\right)\mathbf{z} y,zP,y=x,z=x,λ(0,1),x=λy+(1λ)z
x \mathbf{x} x k k k个分量为正分量,则 A 1 , ⋯   , A k \mathbf{A}_1,\cdots,\mathbf{A}_k A1,,Ak线性无关
∑ i = 1 k A i x i = b \sum_{i=1}^{k}\mathbf{A}_i x_i=\mathbf{b} i=1kAixi=b
∑ i = 1 k A i y i = b \sum_{i=1}^{k}\mathbf{A}_i y_i=\mathbf{b} i=1kAiyi=b
∑ i = 1 k A i z i = b \sum_{i=1}^{k}\mathbf{A}_i z_i=\mathbf{b} i=1kAizi=b
于是 ∑ i = 1 k A i ( y i − z i ) = 0 \sum_{i=1}^{k}\mathbf{A}_i \left(y_i-z_i\right)=0 i=1kAi(yizi)=0
因为存在 y i ≠ z i y_i\neq z_i yi=zi,所以 A 1 , ⋯   , A k \mathbf{A}_1,\cdots,\mathbf{A}_k A1,,Ak线性相关,矛盾
所以 x \mathbf{x} x是极点

存在性

如果有可行解,则一定有BFS

证明:
x \mathbf{x} x为可行解,前 k k k个分量为正分量
A = ( A 1 , ⋯   , A n ) , A i ∈ R m \mathbf{A}=\left(\mathbf{A}_1,\cdots,\mathbf{A}_n\right),\mathbf{A}_i\in\mathbb{R}^m A=(A1,,An),AiRm
如果 A 1 , ⋯   , A k \mathbf{A}_1,\cdots,\mathbf{A}_k A1,,Ak线性无关,则 x \mathbf{x} x是BFS
如果 A 1 , ⋯   , A k \mathbf{A}_1,\cdots,\mathbf{A}_k A1,,Ak线性相关
∃ δ \exists \mathbf{\delta} δ δ 1 , ⋯   , δ k \delta_1,\cdots,\delta_k δ1,,δk不全为0,使得 A δ = 0 \mathbf{A}\mathbf{\delta}=0 Aδ=0
∃ ϵ > 0 , s . t .   x ± ϵ δ ≥ 0 \exists \epsilon>0,s.t.\ \mathbf{x}\pm \epsilon\mathbf{\delta}\ge 0 ϵ>0,s.t. x±ϵδ0
x ± ϵ δ \mathbf{x}\pm \epsilon\mathbf{\delta} x±ϵδ也是可行解
存在 ϵ \epsilon ϵ,使得 x i ± ϵ δ i x_i\pm\epsilon \delta_i xi±ϵδi中至少一个等式为 0 0 0,其中 i = 1 , 2 , ⋯   , k i=1,2,\cdots,k i=1,2,,k
也就是说 x ± ϵ δ \mathbf{x}\pm \epsilon\mathbf{\delta} x±ϵδ的正分量个数至少比 x \mathbf{x} x少一个

这个过程可以继续下去,直到只有1个正分量,此时 x \mathbf{x} x也是BFS

最优解是BFS

如果有有限的最优值(不是无界解),则一定存在一个基可行解是最优解

证明:
证明过程与BFS存在性类似

x \mathbf{x} x是最优解
如果 x \mathbf{x} x不是BFS,则 x \mathbf{x} x是可行解

∃ ϵ > 0 , δ ≠ 0 , s . t .   x ± ϵ δ \exists\epsilon>0,\delta\neq \mathbf{0},s.t.\ \mathbf{x}\pm \epsilon\mathbf{\delta} ϵ>0,δ=0,s.t. x±ϵδ也是可行解
c T x ≥ c T ( x + ϵ δ ) ⇒ c T ϵ δ ≤ 0 c T x ≥ c T ( x − ϵ δ ) ⇒ c T ϵ δ ≥ 0 \mathbf{c}^T\mathbf{x}\ge \mathbf{c}^T\left(\mathbf{x}+ \epsilon\mathbf{\delta}\right)\Rightarrow \mathbf{c}^T\epsilon\mathbf{\delta}\le0\\ \mathbf{c}^T\mathbf{x}\ge \mathbf{c}^T\left(\mathbf{x}- \epsilon\mathbf{\delta}\right)\Rightarrow \mathbf{c}^T\epsilon\mathbf{\delta}\ge0\\ cTxcT(x+ϵδ)cTϵδ0cTxcT(xϵδ)cTϵδ0
所以 c T δ = 0 \mathbf{c}^T\mathbf{\delta}=0 cTδ=0,也就是说 x ± ϵ δ \mathbf{x}\pm \epsilon\mathbf{\delta} x±ϵδ也是最优解
存在 ϵ \epsilon ϵ,使得 x i ± ϵ δ i x_i\pm\epsilon \delta_i xi±ϵδi中至少一个等式为 0 0 0
也就是说 x ± ϵ δ \mathbf{x}\pm \epsilon\mathbf{\delta} x±ϵδ的正分量个数至少比 x \mathbf{x} x少一个

这个过程可以继续下去,直到只有1个正分量,此时 x \mathbf{x} x也是BFS

单纯形法

基本思路就是先找BFS,判断是不是最优解,如果不是,就找相邻BFS,并使目标函数值增大,直到最优解
max ⁡ c T x  s.t.  A x = b x ≥ 0 \begin{gathered} \max \mathbf{c}^{T} \mathbf{x} \\ \text { s.t. } \mathbf{Ax}=\mathbf{b} \\ \mathbf{x} \geq 0 \end{gathered} maxcTx s.t. Ax=bx0
其中 A ∈ R m × n , b ∈ R + m , x ∈ R n \mathbf{A}\in\mathbb{R}^{m\times n},\mathbf{b}\in\mathbb{R}_{+}^m,\mathbf{x}\in\mathbb{R}^n ARm×n,bR+m,xRn
m < n , r a n k ( A ) = m m<n,rank\left(\mathbf{A}\right)=m m<n,rank(A)=m
A = ( A 1 , ⋯   , A n ) , A i ∈ R m \mathbf{A}=\left(\mathbf{A}_1,\cdots,\mathbf{A}_n\right),\mathbf{A}_i\in\mathbb{R}^m A=(A1,,An),AiRm

迭代基本原理

总会存在一个单位矩阵
不妨假设
( A 1 , ⋯   , A m ) = I m \left(\mathbf{A}_1,\cdots,\mathbf{A}_m\right)=\mathbf{I}_{m} (A1,,Am)=Im
松弛变量所对应的列向量为 e i \mathbf{e}_i ei
如果找不到单位矩阵,可以引入人工变量(后面会说)

A 1 , ⋯   , A m \mathbf{A}_1,\cdots,\mathbf{A}_m A1,,Am就是基向量了,对应的 x 1 , ⋯   , x m x_1,\cdots,x_m x1,,xm为基变量
一个基解就是
x = ( x 1 x 2 ⋮ x m x m + 1 ⋮ x n ) = ( b 1 b 2 ⋮ b m 0 ⋮ 0 ) \mathbf{x}=\begin{pmatrix} x_1\\ x_2\\ \vdots\\ x_m\\ x_{m+1}\\ \vdots\\ x_n\\ \end{pmatrix}=\begin{pmatrix} b_1\\ b_2\\ \vdots\\ b_m\\ 0\\ \vdots\\ 0 \end{pmatrix} x= x1x2xmxm+1xn = b1b2bm00
因为 b ∈ R + m \mathbf{b}\in\mathbb{R}_+^m bR+m,所以 x \mathbf{x} x是BFS

一个BFS换到相邻BFS

两个可行基称为相邻的,如果他们之间变换且仅变换一个基变量
x ( 0 ) \mathbf{x}^{(0)} x(0)的前 m m m个分量为基变量,即
x ( 0 ) = ( x 1 ( 0 ) ⋮ x m ( 0 ) 0 ⋮ 0 ) \mathbf{x}^{(0)}=\begin{pmatrix} x_1^{(0)}\\ \vdots\\ x_m^{(0)}\\ 0\\ \vdots\\ 0\\ \end{pmatrix} x(0)= x1(0)xm(0)00

∑ i = 1 m A i x i ( 0 ) = b \sum_{i=1}^{m}\mathbf{A}_i x_i^{(0)}=\mathbf{b} i=1mAixi(0)=b
显然
A j = ∑ i = 1 m a i j A i θ ( A j − ∑ i = 1 m a i j A i ) = 0 \begin{aligned} \mathbf{A}_j&=\sum_{i=1}^{m}a_{ij}\mathbf{A}_i\\ \theta\left(\mathbf{A}_j-\sum_{i=1}^{m}a_{ij}\mathbf{A}_i\right)&=0 \end{aligned} Ajθ(Aji=1maijAi)=i=1maijAi=0
其中 θ > 0 \theta>0 θ>0
所以
∑ i = 1 m A i x i ( 0 ) + θ ( A j − ∑ i = 1 m a i j A i ) = b ∑ i = 1 m ( x i ( 0 ) − θ a i j ) A i + θ A j = b \begin{aligned} \sum_{i=1}^{m}\mathbf{A}_i x_i^{(0)}+\theta\left(\mathbf{A}_j-\sum_{i=1}^{m}a_{ij}\mathbf{A}_i\right)&=\mathbf{b}\\ \sum_{i=1}^{m}\left(x_i^{(0)}-\theta a_{ij}\right)\mathbf{A}_i +\theta\mathbf{A}_j&=\mathbf{b}\\ \end{aligned} i=1mAixi(0)+θ(Aji=1maijAi)i=1m(xi(0)θaij)Ai+θAj=b=b
也就是说 x ( 1 ) = ( x 1 ( 0 ) − θ a 1 j ⋮ x m ( 0 ) − θ a m j 0 ⋮ θ ⋮ 0 ) \mathbf{x}^{(1)}=\begin{pmatrix} x_1^{(0)}-\theta a_{1j}\\ \vdots\\ x_m^{(0)}-\theta a_{mj}\\ 0\\ \vdots\\ \theta\\ \vdots\\ 0 \end{pmatrix} x(1)= x1(0)θa1jxm(0)θamj0θ0 是一个基解,因为 θ > 0 \theta>0 θ>0,要想成为基可行解,需要满足
x i ( 0 ) − θ a i j ≥ 0 i = 1 , 2 , ⋯ m x_i^{(0)}-\theta a_{ij}\ge 0\quad i=1,2,\cdots m xi(0)θaij0i=1,2,m
解得 0 < θ ≤ min ⁡ i { x i ( 0 ) a i j ∣ a i j > 0 } 0<\theta \le\min\limits_{i}\left\{\frac{x_i^{(0)}}{a_{ij}}|a_{ij}>0\right\} 0<θimin{aijxi(0)aij>0}
l = arg ⁡ min ⁡ i = { x i ( 0 ) a i j ∣ a i j > 0 } l=\arg\min\limits_{i}=\left\{\frac{x_i^{(0)}}{a_{ij}}|a_{ij}>0\right\} l=argimin={aijxi(0)aij>0}
θ = x l ( 0 ) a l j \theta = \frac{x_l^{(0)}}{a_{lj}} θ=aljxl(0),则 x i ( 0 ) − θ a i j x_i^{(0)}-\theta a_{ij} xi(0)θaij中至少有一个为0
x 1 , ⋯   , x l − 1 , x j , x l + 1 , ⋯   , x m x_1,\cdots,x_{l-1},x_j,x_{l+1},\cdots,x_m x1,,xl1,xj,xl+1,,xm对应的列排列起来
( A 1 A 2 ⋯ A l − 1 A j A l + 1 ⋯ A m b 1 0 ⋯ 0 a 1 j 0 ⋯ 0 b 1 0 1 ⋯ 0 a 2 j 0 ⋯ 0 b 2 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ 1 a l − 1 , j 0 ⋯ 0 b l − 1 0 0 ⋯ 0 a l j 0 ⋯ 0 b l 0 0 ⋯ 0 a l + 1 , j 1 ⋯ 0 b l + 1 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ 0 a m j 0 ⋯ 1 b m ) \left(\begin{array}{cccccccc|c} \boldsymbol{A}_{1} & \boldsymbol{A}_{2} & \cdots & \boldsymbol{A}_{l-1} & \boldsymbol{A}_{j} & \boldsymbol{A}_{l+1} & \cdots & \boldsymbol{A}_{m} & \boldsymbol{b} \\ 1 & 0 & \cdots & 0 & a_{1 j} & 0 & \cdots & 0 & b_{1} \\ 0 & 1 & \cdots & 0 & a_{2 j} & 0 & \cdots & 0 & b_{2} \\ \vdots & \vdots & & \vdots & \vdots & \vdots & & \vdots & \vdots \\ 0 & 0 & \cdots & 1 & a_{l-1, j} & 0 & \cdots & 0 & b_{l-1} \\ 0 & 0 & \cdots & 0 & a_{l j} & 0 & \cdots & 0 & b_{l} \\ 0 & 0 & \cdots & 0 & a_{l+1, j} & 1 & \cdots & 0 & b_{l+1} \\ \vdots & \vdots & & \vdots & \vdots & \vdots & & \vdots & \vdots \\ 0 & 0 & \cdots & 0 & a_{m j} & 0 & \cdots & 1 & b_{m} \end{array}\right) A1100000A2010000Al1001000Aja1ja2jal1,jaljal+1,jamjAl+1000010Am000001bb1b2bl1blbl+1bm
注意到 a l j > 0 a_{lj}>0 alj>0,所以 A 1 , ⋯   , A l − 1 , A j , A l + 1 , ⋯   , A m \mathbf{A}_1,\cdots, \mathbf{A}_{l-1},\mathbf{A}_j,\mathbf{A}_{l+1},\cdots,\mathbf{A}_m A1,,Al1,Aj,Al+1,,Am线性无关,可以构成一个基, x ( 1 ) \mathbf{x}^{(1)} x(1)是基可行解
通过初等行变换
( A 1 A 2 ⋯ A l − 1 A j A l + 1 ⋯ A m b 1 0 ⋯ 0 0 0 ⋯ 0 b 1 − θ a 1 j 0 1 ⋯ 0 0 0 ⋯ 0 b 2 − θ a 2 j ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ 1 0 0 ⋯ 0 b l − 1 − θ a l − 1 , j 0 0 ⋯ 0 1 0 ⋯ 0 θ 0 0 ⋯ 0 0 1 ⋯ 0 b l + 1 − θ a l + 1 , j ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ 0 0 0 ⋯ 1 b m − θ a m j ) \left(\begin{array}{cccccccc|c} \boldsymbol{A}_{1} & \boldsymbol{A}_{2} & \cdots & \boldsymbol{A}_{l-1} & \boldsymbol{A}_{j} & \boldsymbol{A}_{l+1} & \cdots & \boldsymbol{A}_{m} & \boldsymbol{b} \\ 1 & 0 & \cdots & 0 & 0 & 0 & \cdots & 0 & b_{1}-\theta a_{1j} \\ 0 & 1 & \cdots & 0 & 0 & 0 & \cdots & 0 & b_{2}-\theta a_{2j} \\ \vdots & \vdots & & \vdots & \vdots & \vdots & & \vdots & \vdots \\ 0 & 0 & \cdots & 1 & 0 & 0 & \cdots & 0 & b_{l-1}-\theta a_{l-1,j} \\ 0 & 0 & \cdots & 0 & 1 & 0 & \cdots & 0 & \theta \\ 0 & 0 & \cdots & 0 & 0 & 1 & \cdots & 0 & b_{l+1}-\theta a_{l+1,j} \\ \vdots & \vdots & & \vdots & \vdots & \vdots & & \vdots & \vdots \\ 0 & 0 & \cdots & 0 & 0 & 0 & \cdots & 1 & b_{m}-\theta a_{mj} \end{array}\right) A1100000A2010000Al1001000Aj000100Al+1000010Am000001bb1θa1jb2θa2jbl1θal1,jθbl+1θal+1,jbmθamj
变换之后, x ( 1 ) \mathbf{x}^{(1)} x(1)的基依然是单位矩阵, x ( 1 ) \mathbf{x}^{(1)} x(1) x ( 0 ) \mathbf{x}^{(0)} x(0)构成相邻基可行解

现在我们知道,要将 l l l替换成 j j j,那么 j j j应该要怎么选择

最优解检验和解的判别

z ( 0 ) = ∑ i = 1 m c i x i ( 0 ) z^{(0)}=\sum_{i=1}^{m}c_i x_i^{(0)} z(0)=i=1mcixi(0)
z ( 1 ) = ∑ i = 1 m ( x i ( 0 ) − θ a i j ) c i + θ c j = ∑ i = 1 m c i x i ( 0 ) + θ ( c j − ∑ i = 1 m a i j ) = z ( 0 ) + θ ( c j − ∑ i = 1 m c i a i j ) \begin{aligned} z^{(1)}&=\sum_{i=1}^{m}\left(x_i^{(0)}-\theta a_{ij}\right)c_i +\theta c_j\\ &=\sum_{i=1}^{m}c_i x_i^{(0)}+\theta \left(c_j-\sum_{i=1}^{m}a_{ij}\right)\\ &=z^{(0)}+\theta \left(c_j-\sum_{i=1}^{m}c_ia_{ij}\right) \end{aligned} z(1)=i=1m(xi(0)θaij)ci+θcj=i=1mcixi(0)+θ(cji=1maij)=z(0)+θ(cji=1mciaij)
因为 θ > 0 \theta>0 θ>0,所以只要 c j − ∑ i = 1 m c i a i j > 0 c_j-\sum_{i=1}^{m}c_ia_{ij}>0 cji=1mciaij>0就有 z ( 1 ) > z ( 0 ) z^{(1)}>z^{(0)} z(1)>z(0)
σ j = c j − z j = c j − ∑ i = 1 m c i a i j \sigma_j=c_j-z_j=c_j-\sum_{i=1}^{m}c_ia_{ij} σj=cjzj=cji=1mciaij称为检验数
注意到 σ 1 , ⋯   , σ m ≥ 0 \sigma_1,\cdots,\sigma_m\ge 0 σ1,,σm0,所以算检验数的时候,只要算非基变量的检验数

最优解

如果所有 σ j ≤ 0 \sigma_j\le 0 σj0,那么 z ( 1 ) z^{(1)} z(1)就是最优值

证明:
x \mathbf{x} x是最优解, y \mathbf{y} y为可行解
A x = b , A y = b \mathbf{Ax}=\mathbf{b},\mathbf{Ay}=\mathbf{b} Ax=b,Ay=b
x \mathbf{x} x的基为 B = I \mathbf{B}=\mathbf{I} B=I,前 m m m个分量为基变量
A = ( B , N ) = ( I , N ) \mathbf{A}=\left(\mathbf{B},\mathbf{N}\right)=\left(\mathbf{I},\mathbf{N}\right) A=(B,N)=(I,N)
d = y − x , d B = ( d 1 , ⋯   , d m ) T , d N = ( d m + 1 , ⋯   , d n ) T \mathbf{d}=\mathbf{y}-\mathbf{x},\mathbf{d}_{\mathbf{B}}=\left(d_1,\cdots,d_m\right)^T,\mathbf{d}_{\mathbf{N}}=\left(d_{m+1},\cdots,d_n\right)^T d=yx,dB=(d1,,dm)T,dN=(dm+1,,dn)T
c B = ( c 1 , ⋯   , c m ) T , c N = ( c m + 1 , ⋯   , c n ) T \mathbf{c}_{\mathbf{B}}=\left(c_1,\cdots,c_m\right)^T,\mathbf{c}_{\mathbf{N}}=\left(c_{m+1},\cdots,c_n\right)^T cB=(c1,,cm)T,cN=(cm+1,,cn)T
A d = 0 B d B + N d N = 0 d B = − N d N \begin{aligned} \mathbf{A}\mathbf{d}&=\mathbf{0}\\ \mathbf{B}\mathbf{d}_{\mathbf{B}}+\mathbf{N}\mathbf{d}_\mathbf{N}&=\mathbf{0}\\ \mathbf{d}_{\mathbf{B}}&=-\mathbf{N}\mathbf{d}_\mathbf{N}\\ \end{aligned} AdBdB+NdNdB=0=0=NdN
c T d = c B T d B + c N T d N = − c B T N d N + c N T d N = ( c N T − c B T N ) d N = ∑ j = m + 1 n σ j d j \begin{aligned} \mathbf{c}^T\mathbf{d}&=\mathbf{c}_{\mathbf{B}}^T\mathbf{d}_{\mathbf{B}}+\mathbf{c}_{\mathbf{N}}^T\mathbf{d}_{\mathbf{N}}\\ &=-\mathbf{c}_{\mathbf{B}}^T\mathbf{N}\mathbf{d}_\mathbf{N}+\mathbf{c}_{\mathbf{N}}^T\mathbf{d}_{\mathbf{N}}\\ &=\left(\mathbf{c}_{\mathbf{N}}^T-\mathbf{c}_{\mathbf{B}}^T\mathbf{N}\right)\mathbf{d}_{\mathbf{N}}\\ &=\sum_{j=m+1}^{n}\sigma_j d_j\\ \end{aligned} cTd=cBTdB+cNTdN=cBTNdN+cNTdN=(cNTcBTN)dN=j=m+1nσjdj
因为 x m + 1 , ⋯   , x n = 0 , y m + 1 , ⋯   , y n ≥ 0 x_{m+1},\cdots,x_n=0,y_{m+1},\cdots,y_n\ge 0 xm+1,,xn=0,ym+1,,yn0,所以 d m + 1 , ⋯   , d n ≥ 0 d_{m+1},\cdots, d_n\ge 0 dm+1,,dn0
c T d ≤ 0 ⇒ c T x ≥ c T y \mathbf{c}^T\mathbf{d}\le 0\Rightarrow \mathbf{c}^T\mathbf{x}\ge \mathbf{c}^T\mathbf{y} cTd0cTxcTy

无穷多解

如果所有 σ j ≤ 0 \sigma_j\le 0 σj0,并且其中一个 σ j = 0 \sigma_j=0 σj=0,则 z ( 1 ) = z ( 0 ) z^{(1)}=z^{(0)} z(1)=z(0),也就是说 x ( 0 ) , x ( 1 ) x^{(0)},x^{(1)} x(0),x(1)都是最优解
因为可行域是个凸集,所以 ∀ λ ∈ [ 0 , 1 ] , λ x ( 0 ) + ( 1 − λ ) x ( 1 ) \forall \lambda \in\left[0,1\right],\lambda x^{(0)}+\left(1-\lambda\right)x^{(1)} λ[0,1],λx(0)+(1λ)x(1)也是最优解,即有无穷多解

无界解

如果 σ j > 0 \sigma_j>0 σj>0,并且 A j ≤ 0 \mathbf{A}_j\le 0 Aj0,那么 ∀ θ > 0 , s . t .   x i ( 0 ) − θ a i j ≥ 0 \forall \theta>0,s.t.\ x_i^{(0)}-\theta a_{ij}\ge 0 θ>0,s.t. xi(0)θaij0
那么 z ( 1 ) z^{(1)} z(1)可以无限增大,故无界

计算步骤

实在是懒得画表了,直接截图了
第1步:求BFS,列单纯形表
在这里插入图片描述
第2步:最优性检验
如果所有的 c j − z j ≤ 0 c_j-z_j\le 0 cjzj0,且基变量不包含人工变量,则表中的基可行解就是最优解
如果存在 c j − z j > 0 c_j-z_j>0 cjzj>0,如果 A j ≤ 0 \mathbf{A}_j\le 0 Aj0,则问题为无界解,否则进行下一步

第3步:从一个BFS转到相邻的目标函数值更大的BFS,列出新的单纯形表
1.确定入基变量
只要检验数 σ j > 0 \sigma_j>0 σj>0,对应的 x j x_j xj都可以作为入基变量,但是一般找最大的 σ k \sigma_k σk
σ k = max ⁡ j { σ j ∣ σ j > 0 } \sigma_k=\max_{j}\left\{\sigma_j|\sigma_j>0\right\} σk=jmax{σjσj>0}
其对应的变量 x k x_k xk为入基变量

2.确定出基变量
θ = min ⁡ i { b i a i k ∣ a i k > 0 } = b l a l k \theta=\min_{i}\left\{\frac{b_i}{a_{ik}}|a_{ik}>0\right\}=\frac{b_l}{a_{lk}} θ=imin{aikbiaik>0}=alkbl
x l x_l xl是出基变量, a l k a_{lk} alk称为主元素

3.用入基变量 x k x_k xk替换出基变量 x l x_l xl,得到新的基
通过初等行变换使得 A k \mathbf{A}_k Ak变换为 e k \mathbf{e}_k ek
在这里插入图片描述

人工变量

max ⁡ z = − 3 x 1 + x 3 + 0 x 4 + 0 x 5  s.t.  { x 1 + x 2 + x 3 + x 4 = 4 − 2 x 1 + x 2 − x 3 − x 5 = 1 3 x 2 + x 3 = 9 x 1 , x 2 , x 3 , x 4 , x 5 ⩾ 0 \begin{aligned} &\max z=-3 x_{1}+x_{3}+0 x_{4}+0 x_{5}\\ &\text { s.t. }\left\{\begin{array}{rlr} x_{1}&+x_{2}&+x_{3}&+x_{4}& &=4 \\ -2 x_{1}&+x_{2}&-x_{3}& &-x_{5}& =1 \\ &3 x_{2}&+x_{3}& & &=9 \\ x_{1}, x_{2}, x_{3}, x_{4}, x_{5} \geqslant 0 \end{array}\right. \end{aligned} maxz=3x1+x3+0x4+0x5 s.t.  x12x1x1,x2,x3,x4,x50+x2+x23x2+x3x3+x3+x4x5=4=1=9
这种情况下,找不到单位矩阵作为基,所以需要引入人工变量

大M法

引入人工变量 x 6 , x 7 x_6,x_7 x6,x7
max ⁡ z = − 3 x 1 + x 3 + 0 x 4 + 0 x 5 − M x 6 − M x 7  s.t.  { x 1 + x 2 + x 3 + x 4 = 4 − 2 x 1 + x 2 − x 3 − x 5 + x 6 = 1 3 x 2 + x 3 + x 7 = 9 x j ⩾ 0 ( j = 1 , ⋯   , 7 ) \begin{aligned} &\max z=-3 x_{1}+x_{3}+0 x_{4}+0 x_{5}-M x_{6}-M x_{7}\\ &\text { s.t. }\left\{\begin{array}{rrr} x_{1}&+x_{2}&+x_{3}&+x_{4}& & &&&&=4 \\ -2 x_{1}&+x_{2}&-x_{3}&&-x_{5}&+x_{6} &&& &=1 \\ &3 x_{2}&+x_{3} && &&&+x_{7} & &=9 \\ x_{j} \geqslant 0(j=1, \cdots, 7) & \end{array}\right. \end{aligned} maxz=3x1+x3+0x4+0x5Mx6Mx7 s.t.  x12x1xj0(j=1,,7)+x2+x23x2+x3x3+x3+x4x5+x6+x7=4=1=9
其中 M = + ∞ M=+\infty M=+,即一个很大的数
想要取到最优解,显然需要人工变量为0
如果人工变量不为0,则无可行解

两阶段法

大M法手算的时候不会有什么问题,但是机器算的时候会出现问题

两阶段法:
第一阶段是求解只包含人工变量的线性规划问题,即令目标函数中其他变量的系数取零,人工变量的系数取某个正的常数(一般取1),在保持原问题约束条件不变的清况下求这个目标函数极小化时的解。显然在第一阶段中,当人工变量取值为0时,目标函数值也为0.这时候的最优解就是原线性规划问题的一个基可行解。如果第一阶段最优值不为0,原问题物可行解

当第一阶段求解结果表明问题有可行解时,第二阶段是在原问题中去除人工变量,并从此可行解(即第一阶段的最优解)出发,继续寻找问题的最优解

还是上面的例子
min ⁡ z = x 6 + x 7  s.t.  { x 1 + x 2 + x 3 + x 4 = 4 − 2 x 1 + x 2 − x 3 − x 5 + x 6 = 1 3 x 2 + x 3 + x 7 = 9 x j ⩾ 0 ( j = 1 , ⋯   , 7 ) \begin{aligned} &\min z=x_{6}+ x_{7}\\ &\text { s.t. }\left\{\begin{array}{rrr} x_{1}&+x_{2}&+x_{3}&+x_{4}& & &&&&=4 \\ -2 x_{1}&+x_{2}&-x_{3}&&-x_{5}&+x_{6} &&& &=1 \\ &3 x_{2}&+x_{3} && &&&+x_{7} & &=9 \\ x_{j} \geqslant 0(j=1, \cdots, 7) & \end{array}\right. \end{aligned} minz=x6+x7 s.t.  x12x1xj0(j=1,,7)+x2+x23x2+x3x3+x3+x4x5+x6+x7=4=1=9
转标准型
max ⁡ z = − x 6 − x 7  s.t.  { x 1 + x 2 + x 3 + x 4 = 4 − 2 x 1 + x 2 − x 3 − x 5 + x 6 = 1 3 x 2 + x 3 + x 7 = 9 x j ⩾ 0 ( j = 1 , ⋯   , 7 ) \begin{aligned} &\max z=- x_{6}- x_{7}\\ &\text { s.t. }\left\{\begin{array}{rrr} x_{1}&+x_{2}&+x_{3}&+x_{4}& & &&&&=4 \\ -2 x_{1}&+x_{2}&-x_{3}&&-x_{5}&+x_{6} &&& &=1 \\ &3 x_{2}&+x_{3} && &&&+x_{7} & &=9 \\ x_{j} \geqslant 0(j=1, \cdots, 7) & \end{array}\right. \end{aligned} maxz=x6x7 s.t.  x12x1xj0(j=1,,7)+x2+x23x2+x3x3+x3+x4x5+x6+x7=4=1=9
在这里插入图片描述
求完就发现, x 4 , x 2 , x 1 x_4,x_2,x_1 x4,x2,x1就是基变量了
然后把目标函数变回原来的目标函数,继续求解(人工变量已经没有用了,可以去掉了)
在这里插入图片描述

退化

按最小比值 θ \theta θ来确定出基变量时,可能存在2个或者以上最小比值,从而使下一个表的基可行解中出现一个或多个基变量为0的退化解。

退化解的出现,原因是存在多余约束,使得多个基可行解对应同一个顶点。当存在退化解的时候可能出现循环。
为了避免这个问题:(1)当存在多个 σ j > 0 \sigma_j>0 σj>0时,选下标最小的作为入基变量
(2)当出现多个 θ \theta θ的最小比值时,选下标最小的作为出基变量
(总结起来就是选下标最小)

代码

摸了

参考
运筹学教程(第5版)(胡运权, 郭耀煌, 龚益鸣, 程佳惠, 陈秉正)
https://mp.weixin.qq.com/s/tm5EuZNLrL8SUWlRXKgR3Q

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nightmare004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值