单纯形法(Simplex Algorithm)是求解线性规划问题最常用、最有效的算法之一
一般形式:
max
c
T
x
s.t.
a
i
T
x
≤
b
i
a
j
T
x
=
b
j
x
k
≥
0
其中
x
∈
R
n
\mathbf{x}\in\mathbb{R}^n
x∈Rn
标准形式:
max
c
T
x
s.t.
A
x
=
b
x
≥
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}=
当
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}=
可行解 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
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存在性类似
设
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
其中
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
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}=
因为
b
∈
R
+
m
\mathbf{b}\in\mathbb{R}_+^m
b∈R+m,所以
x
\mathbf{x}
x是BFS
两个可行基称为相邻的,如果他们之间变换且仅变换一个基变量
设
x
(
0
)
\mathbf{x}^{(0)}
x(0)的前
m
m
m个分量为基变量,即
x
(
0
)
=
(
x
1
(
0
)
⋮
x
m
(
0
)
0
⋮
0
)
\mathbf{x}^{(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
其中
θ
>
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
也就是说
x
(
1
)
=
(
x
1
(
0
)
−
θ
a
1
j
⋮
x
m
(
0
)
−
θ
a
m
j
0
⋮
θ
⋮
0
)
\mathbf{x}^{(1)}=
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(
注意到
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(
变换之后,
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
)
因为
θ
>
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
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
因为
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
这种情况下,找不到单位矩阵作为基,所以需要引入人工变量
引入人工变量
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
)
其中
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
)
转标准型
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
)

求完就发现,
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