单纯形法(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. aiTx≤biajTx=bjxk≥0
其中
x
∈
R
n
\mathbf{x}\in\mathbb{R}^n
x∈Rn
标准形式:
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=bx≥0
其中
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
A∈Rm×n,b∈R+m,x∈Rn
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} max−cTx
如果 x i x_i xi为自由变量,则引入 x i + , x i − ≥ 0 x_i^+,x_i^-\ge 0 xi+,xi−≥0,用 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+,xi−≥0
如果 a i T x ≤ b i \mathbf{a}_i^T\mathbf{x}\le b_i aiTx≤bi,引入松弛变量 x s ≥ 0 x_s\ge0 xs≥0,将约束变为 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 xs≥0
如果 a i T x ≥ b i \mathbf{a}_i^T\mathbf{x}\ge b_i aiTx≥bi,引入松弛变量(剩余变量) x s ≥ 0 x_s\ge0 xs≥0,将约束变为 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 xs≥0
如果 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={z∣cTz=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\}
{z∣cTz≤b=cTx}
凸集:
C
C
C是凸集,若
x
1
,
x
2
∈
C
\mathbf{x}_1,\mathbf{x}_2\in C
x1,x2∈C,则
∀
λ
∈
[
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−λ)x2∈C
多面体
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={x∣Ax≤b,Cx=d}
容易验证,多面体是一个闭凸集,线性规划可行域是一个多面体
极点
设
C
⊆
R
n
C\subseteq \mathbb{R}^n
C⊆Rn是一个非空闭凸集,
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,x2∈C,λ∈(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}
A∈Rm×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)=(B−1b0)称为相应于
B
\mathbf{B}
B的基解
当
B
−
1
b
≥
0
\mathbf{B}^{-1}\mathbf{b}\ge 0
B−1b≥0时,
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!(n−m)!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
k≤m
若
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
n−k个列向量中挑选
m
−
k
m-k
m−k个,组成基
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),Ai∈Rm
设可行域
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−ϵd∈P
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,z∈P,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(yi−zi)=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),Ai∈Rm
如果
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\\
cTx≥cT(x+ϵδ)⇒cTϵδ≤0cTx≥cT(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=bx≥0
其中
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
A∈Rm×n,b∈R+m,x∈Rn
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),Ai∈Rm
迭代基本原理
总会存在一个单位矩阵
不妨假设
(
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=⎝
⎛x1x2⋮xmxm+1⋮xn⎠
⎞=⎝
⎛b1b2⋮bm0⋮0⎠
⎞
因为
b
∈
R
+
m
\mathbf{b}\in\mathbb{R}_+^m
b∈R+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)0⋮0⎠
⎞
则
∑
i
=
1
m
A
i
x
i
(
0
)
=
b
\sum_{i=1}^{m}\mathbf{A}_i x_i^{(0)}=\mathbf{b}
i=1∑mAixi(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θ(Aj−i=1∑maijAi)=i=1∑maijAi=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=1∑mAixi(0)+θ(Aj−i=1∑maijAi)i=1∑m(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)−θa1j⋮xm(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)−θaij≥0i=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,⋯,xl−1,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)
⎝
⎛A110⋮000⋮0A201⋮000⋮0⋯⋯⋯⋯⋯⋯⋯Al−100⋮100⋮0Aja1ja2j⋮al−1,jaljal+1,j⋮amjAl+100⋮001⋮0⋯⋯⋯⋯⋯⋯⋯Am00⋮000⋮1bb1b2⋮bl−1blbl+1⋮bm⎠
⎞
注意到
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,⋯,Al−1,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)
⎝
⎛A110⋮000⋮0A201⋮000⋮0⋯⋯⋯⋯⋯⋯⋯Al−100⋮100⋮0Aj00⋮010⋮0Al+100⋮001⋮0⋯⋯⋯⋯⋯⋯⋯Am00⋮000⋮1bb1−θa1jb2−θa2j⋮bl−1−θal−1,jθbl+1−θal+1,j⋮bm−θ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=1∑m(xi(0)−θaij)ci+θcj=i=1∑mcixi(0)+θ(cj−i=1∑maij)=z(0)+θ(cj−i=1∑mciaij)
因为
θ
>
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
cj−∑i=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=cj−zj=cj−∑i=1mciaij称为检验数
注意到
σ
1
,
⋯
,
σ
m
≥
0
\sigma_1,\cdots,\sigma_m\ge 0
σ1,⋯,σm≥0,所以算检验数的时候,只要算非基变量的检验数
最优解
如果所有 σ j ≤ 0 \sigma_j\le 0 σj≤0,那么 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=y−x,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=(cNT−cBTN)dN=j=m+1∑nσ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,⋯,yn≥0,所以
d
m
+
1
,
⋯
,
d
n
≥
0
d_{m+1},\cdots, d_n\ge 0
dm+1,⋯,dn≥0
即
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}
cTd≤0⇒cTx≥cTy
无穷多解
如果所有
σ
j
≤
0
\sigma_j\le 0
σj≤0,并且其中一个
σ
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
Aj≤0,那么
∀
θ
>
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)−θaij≥0
那么
z
(
1
)
z^{(1)}
z(1)可以无限增大,故无界
计算步骤
实在是懒得画表了,直接截图了
第1步:求BFS,列单纯形表
第2步:最优性检验
如果所有的
c
j
−
z
j
≤
0
c_j-z_j\le 0
cj−zj≤0,且基变量不包含人工变量,则表中的基可行解就是最优解
如果存在
c
j
−
z
j
>
0
c_j-z_j>0
cj−zj>0,如果
A
j
≤
0
\mathbf{A}_j\le 0
Aj≤0,则问题为无界解,否则进行下一步
第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{aikbi∣aik>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. ⎩
⎨
⎧x1−2x1x1,x2,x3,x4,x5⩾0+x2+x23x2+x3−x3+x3+x4−x5=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+0x5−Mx6−Mx7 s.t. ⎩
⎨
⎧x1−2x1xj⩾0(j=1,⋯,7)+x2+x23x2+x3−x3+x3+x4−x5+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. ⎩
⎨
⎧x1−2x1xj⩾0(j=1,⋯,7)+x2+x23x2+x3−x3+x3+x4−x5+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=−x6−x7 s.t. ⎩
⎨
⎧x1−2x1xj⩾0(j=1,⋯,7)+x2+x23x2+x3−x3+x3+x4−x5+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