1、线性规划的标准型
目标函数:
(1) max Z = c 1 x 1 + c 2 x 2 + ⋯ + c n x n \max Z = c_1x_1+c_2x_2+\dots+c_nx_n\tag{1} maxZ=c1x1+c2x2+⋯+cnxn(1)
约束条件:
(2) s . t . { a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 2 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ a m 1 x 1 + a m 2 x 2 + ⋯ + a m n x n = b m x 1 , x 2 , … , x n ≥ 0 b 1 , b 2 , … , b n ≥ 0 s.t.\left\{ \begin{aligned} & a_{11}x_1+a_{12}x_2+\dots+a_{1n}x_n=b_1 \\ & a_{21}x_2+a_{22}x_2+\dots+a_{2n}x_n=b_2 \\ & \cdots \cdots \cdots \cdots \cdots \cdots \cdots \cdots \cdots \cdots \\ & a_{m1}x_1+a_{m2}x_2+\dots+a_{mn}x_n=b_m \\ & x_1,x_2,\dots,x_n \geq 0 \quad b_1,b_2,\dots,b_n\geq 0 \\ \tag{2} \end{aligned} \right. s.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧a11x1+a12x2+⋯+a1nxn=b1a21x2+a22x2+⋯+a2nxn=b2⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯am1x1+am2x2+⋯+amnxn=bmx1,x2,…,xn≥0b1,b2,…,bn≥0(2)
简记
目标函数最大
约束条件等式
决策变量非负
资源变量非负
向量形式
(3) max Z = C X s . t . { ∑ i = 1 n P j x j = b i = 1 , 2 , … , m x j ≥ 0 j = 1 , 2 , … , n \max Z = CX \\ s.t.\left\{ \begin{aligned} & \sum_{i=1}^{n}P_jx_j=b\quad i=1,2,\dots,m \\ & x_j\geq 0\quad j=1,2,\dots,n \\ \tag{3} \end{aligned} \right. maxZ=CXs.t.⎩⎪⎪⎨⎪⎪⎧i=1∑nPjxj=bi=1,2,…,mxj≥0j=1,2,…,n(3)
矩阵形式
(4) max Z = C X s . t . { A X = b X ≥ 0 \max Z = CX \\ s.t.\left\{ \begin{aligned} & AX=b \\ & X\geq 0 \\ \tag{4} \end{aligned} \right. maxZ=CXs.t.{AX=bX≥0(4)
线性规划问题解的概念
最优解:使目标函数
(
1
)
(1)
(1)达到最大值的可行解。
基:设
A
A
A是约束方程组
(
2
)
(2)
(2)的
m
×
n
m\times n
m×n阶系数矩阵
(
n
>
m
)
(n>m)
(n>m),其秩为
m
m
m,
B
B
B是
A
A
A的一个
m
×
m
m\times m
m×m阶的满秩子矩阵,称
B
B
B是线性规划问题的一个基
(5)
B
=
[
a
11
a
12
…
a
1
m
⋮
⋮
⋮
⋮
a
m
1
a
m
2
…
a
m
m
]
=
(
P
1
,
…
,
P
j
,
…
,
P
m
)
B= \left[ \begin{matrix} a_{11} & a_{12} & \dots & a_{1m}\\ \vdots & \vdots & \vdots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mm} \\ \end{matrix} \right]=(P_1,\dots,P_j,\dots,P_m)\tag{5}
B=⎣⎢⎡a11⋮am1a12⋮am2…⋮…a1m⋮amm⎦⎥⎤=(P1,…,Pj,…,Pm)(5)
上式中
P
j
,
j
=
1
,
…
,
m
P_j,j=1,\dots,m
Pj,j=1,…,m为基向量,
x
j
x_j
xj为相应基向量的基变量,除基变量以外的变量称为非基变量。
基解:在约束方程组
(
2
)
(2)
(2)中,令所有非基变量
x
m
+
1
=
x
m
+
2
=
⋯
=
x
n
=
0
x_{m+1}=x_{m+2}=\dots=x_{n}=0
xm+1=xm+2=⋯=xn=0,因为
∣
B
∣
≠
0
|B|\neq0
∣B∤=0,据克莱姆法则,对于
(
2
)
(2)
(2)可以求出唯一解
X
B
=
(
x
1
,
x
2
,
…
,
x
m
)
T
X_B=(x_1,x_2,\dots,x_m)^T
XB=(x1,x2,…,xm)T。称
X
=
(
x
1
,
x
2
,
…
,
x
m
,
0
,
0
,
…
,
0
)
T
X=(x_1,x_2,\dots,x_m,0,0,\dots,0)^T
X=(x1,x2,…,xm,0,0,…,0)T为基解。
基可行解:满足变量非负约束条件
(
3
)
(3)
(3)的基解。
可行基:对应基可行解的基。
单纯形法原理
凸集、顶点及几个定理
设
K
K
K是
n
n
n维欧式空间的一点集,若
∀
X
(
1
)
∈
K
,
X
(
2
)
∈
K
\forall X^{(1)}\in K,X^{(2)}\in K
∀X(1)∈K,X(2)∈K的连线上的所有点
a
X
(
1
)
+
(
1
−
a
)
X
(
2
)
∈
K
,
0
≤
a
≤
1
aX^{(1)}+(1-a)X^{(2)}\in K,0 \leq a\leq 1
aX(1)+(1−a)X(2)∈K,0≤a≤1,则称
K
K
K为凸集。
设
K
K
K是凸集,
X
∈
K
X\in K
X∈K;若
X
X
X不能用不同的两点
X
(
1
)
∈
K
X^{(1)}\in K
X(1)∈K和
X
(
2
)
∈
K
X^{(2)}\in K
X(2)∈K的线性组合表示为
X
=
a
X
(
1
)
+
(
1
−
a
)
X
(
2
)
,
0
<
a
<
1
X=aX^{(1)}+(1-a)X^{(2)},0<a<1
X=aX(1)+(1−a)X(2),0<a<1,则称
X
X
X为
K
K
K的一个顶点(或极点)。
几点结论:
(1)可行域若有界则是凸集,也可能是无界域;
(2)每个基可行解对应可行域的一个顶点;
(3)可行域有有限多个顶点;
(4)如果有最优解,必在某个顶点上得到。
“箭尾的解一定是箭头的解,反之不一定成立。”
单纯形法的迭代思路
单纯形法的迭代原理
(6) max Z = C X s . t . { ∑ i = 1 n P j x j = P 1 x 1 + P 2 x 2 + ⋯ + P n x n = b x j ≥ 0 , j = 1 , 2 , … , n \max Z = CX \\ s.t.\left\{ \begin{aligned} & \sum_{i=1}^{n}P_jx_j =P_1x_1+P_2x_2+\dots+P_nx_n = b \\ & x_j\geq0, j=1,2,\dots,n \tag{6} \end{aligned} \right. maxZ=CXs.t.⎩⎪⎪⎨⎪⎪⎧i=1∑nPjxj=P1x1+P2x2+⋯+Pnxn=bxj≥0,j=1,2,…,n(6)
(1) 构造初始可行基
(7) B = ( P 1 , P 2 , … , P m ) = [ 1 0 … 0 0 1 … 0 ⋮ ⋮ ⋮ 0 0 … 1 ] m × m B = (P_1,P_2,\dots,P_m)= \left[ \begin{matrix} 1&0&\dots&0\\ 0&1&\dots&0\\ \vdots&\vdots& &\vdots\\ 0&0&\dots&1 \end{matrix} \right]_{m\times m}\tag{7} B=(P1,P2,…,Pm)=⎣⎢⎢⎢⎡10⋮001⋮0………00⋮1⎦⎥⎥⎥⎤m×m(7)
- 直接观察一个可行基 ∣ B ∣ ≠ 0 |B|\neq 0 ∣B∤=0;
- ≤ \leq ≤约束,加松弛变量;
- ≥ \geq ≥约束,加人工变量。
(8)
s
.
t
.
{
x
1
+
a
1
m
+
1
x
m
+
1
+
⋯
+
a
1
n
x
n
=
b
1
x
2
+
a
2
m
+
1
x
m
+
1
+
⋯
+
a
2
n
x
n
=
b
2
⋯
⋯
⋯
⋯
⋯
⋯
⋯
⋯
⋯
⋯
x
m
+
a
m
m
+
1
x
m
+
1
+
⋯
+
a
m
n
x
n
=
b
m
x
1
,
x
2
,
…
,
x
n
≥
0
b
1
,
b
2
,
…
,
b
n
≥
0
s.t.\left\{ \begin{aligned} & x_1 \qquad \qquad \qquad+a_{1m+1}x_{m+1}+\dots+a_{1n}x_n=b_1 \\ & \qquad x_2 \qquad \qquad +a_{2m+1}x_{m+1}+\dots+a_{2n}x_n=b_2 \\ & \cdots \cdots \cdots \cdots \cdots \cdots \cdots \cdots \cdots \cdots \\ & \qquad \qquad \qquad x_m +a_{mm+1}x_{m+1}+\dots+a_{mn}x_n=b_m \\ & x_1,x_2,\dots,x_n \geq 0 \quad b_1,b_2,\dots,b_n\geq 0 \\ \tag{8} \end{aligned} \right.
s.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x1+a1m+1xm+1+⋯+a1nxn=b1x2+a2m+1xm+1+⋯+a2nxn=b2⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯xm+amm+1xm+1+⋯+amnxn=bmx1,x2,…,xn≥0b1,b2,…,bn≥0(8)
显然,松弛变量的系数矩阵构成一个可行基。
(2) 基变换
两个基可行解相邻,两者可变换且仅变换一个基变量。
设初始基可行解为:
X
(
0
)
=
(
x
1
0
,
x
2
0
,
…
,
x
m
0
,
0
,
…
,
0
)
T
X^{(0)}=(x_1^0,x_2^0,\dots,x_m^0,0,\dots,0)^T
X(0)=(x10,x20,…,xm0,0,…,0)T;
将初始基可行解代入式
(
4
)
(4)
(4)中,得
∑
i
=
1
m
P
i
x
i
0
=
b
\sum_{i=1}^{m}P_ix_i^0=b
∑i=1mPixi0=b;
写出系数矩阵得增广矩阵:
(9)
(
P
1
,
P
2
,
…
,
P
m
,
P
m
+
1
,
…
,
P
j
…
,
P
n
,
b
)
=
[
1
0
…
0
a
1
,
m
+
1
…
a
1
j
…
a
1
n
b
1
0
1
…
0
a
2
,
m
+
1
…
a
2
j
…
a
2
n
b
2
⋮
⋮
⋮
⋮
…
⋮
…
⋮
⋮
0
0
…
1
a
m
,
m
+
1
…
a
m
j
…
a
m
n
b
m
]
m
×
n
(P_1,P_2,\dots,P_m,P_{m+1},\dots,P_j\dots,P_n,b)= \left[ \begin{matrix} 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& &\vdots&\vdots&\dots&\vdots&\dots&\vdots&\vdots\\ 0&0&\dots&1&a_{m,m+1}&\dots&a_{mj}&\dots&a_{mn}&b_m \end{matrix}\tag{9} \right]_{m\times n}
(P1,P2,…,Pm,Pm+1,…,Pj…,Pn,b)=⎣⎢⎢⎢⎡10⋮001⋮0………00⋮1a1,m+1a2,m+1⋮am,m+1…………a1ja2j⋮amj…………a1na2n⋮amnb1b2⋮bm⎦⎥⎥⎥⎤m×n(9)
可得
P
j
=
∑
i
=
1
m
a
i
j
P
i
P_j = \sum_{i=1}^{m}a_{ij}P_i
Pj=∑i=1maijPi
→
\rightarrow
→
P
j
−
∑
i
=
1
m
a
i
j
P
i
=
0
P_j-\sum_{i=1}^{m}a_{ij}P_i=0
Pj−∑i=1maijPi=0;
在上式中乘一个正数
θ
>
0
\theta>0
θ>0,得
(10)
θ
(
P
j
−
∑
i
=
1
m
a
i
j
P
i
)
=
0
∑
i
=
1
m
P
i
x
i
0
=
b
}
∑
i
=
1
m
(
x
i
0
−
θ
a
i
j
)
P
i
+
θ
P
j
=
b
\left. \begin{aligned} \theta (P_j-\sum_{i=1}^{m}a_{ij}P_i)&=0 \\ \sum_{i=1}^{m}P_ix_i^0&=b \\ \tag{10} \end{aligned} \right\}\sum_{i=1}^{m}(x_i^0-\theta a_{ij})P_i+\theta P_j = b
θ(Pj−i=1∑maijPi)i=1∑mPixi0=0=b⎭⎪⎪⎪⎪⎬⎪⎪⎪⎪⎫i=1∑m(xi0−θaij)Pi+θPj=b(10)
由
∑
i
=
1
m
(
x
i
0
−
θ
a
i
j
)
P
i
+
θ
P
j
=
b
\sum_{i=1}^{m}(x_i^0-\theta a_{ij})P_i+\theta P_j = b
∑i=1m(xi0−θaij)Pi+θPj=b 可找到满足原约束方程组
∑
j
=
1
n
P
j
x
j
=
b
\sum_{j=1}^{n}P_jx_j=b
∑j=1nPjxj=b 的另一个点:
(11)
X
(
1
)
=
(
x
1
0
−
θ
a
1
j
,
…
,
x
m
0
−
θ
a
m
j
,
0
,
…
,
θ
,
0
)
T
X^{(1)} = (x_1^0-\theta a_{1j},\dots,x_m^0-\theta a_{mj},0,\dots,\theta,0)^T\tag{11}
X(1)=(x10−θa1j,…,xm0−θamj,0,…,θ,0)T(11)
要使式
(
11
)
(11)
(11)是一个基可行解,则应对所有
i
=
1
,
2
,
…
,
m
i=1,2,\dots,m
i=1,2,…,m
存在
x
i
0
−
θ
a
i
j
≥
0
x_i^0-\theta a_{ij}\geq0
xi0−θaij≥0 (先要使其可行)
令这
m
m
m 个不等式至少有一个等号成立,且当
a
i
j
≤
0
a_{ij}\leq0
aij≤0 时,上式依然成立,故可令
(12)
θ
=
min
l
{
x
i
0
a
i
j
∣
a
i
j
>
0
}
=
x
l
0
a
l
j
\theta = \min \limits_{l} \{\frac{x_i^0}{a_{ij}}|a_{ij}>0\}=\frac{x_l^0}{a_{lj}} \tag{12}
θ=lmin{aijxi0∣aij>0}=aljxl0(12)
可确保
(13)
x
i
0
−
θ
a
i
j
{
=
0
,
i
=
l
≥
0
,
i
≠
l
x_i^0-\theta a_{ij} \left\{ \begin{aligned} &=0,i=l\\ &\geq 0,i\neq l\\ \tag{13} \end{aligned} \right.
xi0−θaij{=0,i=l≥0,i̸=l(13)
∴
X
(
1
)
=
(
x
1
0
−
θ
a
i
j
,
…
,
x
m
0
−
θ
a
i
j
,
0
,
…
,
θ
,
…
,
0
)
T
\therefore X^{(1)} = (x_1^0-\theta a_{ij},\dots,x_m^0-\theta a_{ij},0,\dots,\theta,\dots,0)^T
∴X(1)=(x10−θaij,…,xm0−θaij,0,…,θ,…,0)T 是可行解。
此时与
x
1
1
,
…
,
x
l
−
1
1
,
x
j
1
,
x
l
+
1
1
,
…
,
x
m
1
x_1^1,\dots,x_{l-1}^1,x_j^1,x_{l+1}^1,\dots,x_m^1
x11,…,xl−11,xj1,xl+11,…,xm1 对应的基向量:
(14)
(
P
1
,
…
,
P
l
−
1
,
P
j
,
P
l
+
1
,
…
,
P
m
)
=
[
1
…
0
a
1
j
0
…
0
0
…
0
a
2
j
0
…
0
⋮
⋮
⋮
⋮
⋮
0
…
0
a
m
j
0
…
1
]
m
×
m
(P_1,\dots,P_{l-1},P_j,P_{l+1},\dots,P_m)=\left[ \begin{matrix} 1&\dots&0&a_{1j}&0&\dots&0\\ 0&\dots&0&a_{2j}&0&\dots&0\\ \vdots&\quad&\vdots&\vdots&\vdots&\quad&\vdots\\ 0&\dots&0&a_{mj}&0&\dots&1\\ \end{matrix} \right]_{m\times m}\tag{14}
(P1,…,Pl−1,Pj,Pl+1,…,Pm)=⎣⎢⎢⎢⎡10⋮0………00⋮0a1ja2j⋮amj00⋮0………00⋮1⎦⎥⎥⎥⎤m×m(14)
通过初等行变换使
P
j
=
(
0
,
0
,
…
,
0
,
1
,
0
,
…
,
0
)
T
P_j = (0,0,\dots,0,1,0,\dots,0)^T
Pj=(0,0,…,0,1,0,…,0)T。
(3) 最优性检验和解的判别
将上述
X
(
0
)
X^{(0)}
X(0),
X
(
1
)
X^{(1)}
X(1) 分别代入目标函数
z
=
∑
j
=
1
n
c
j
x
j
z=\sum_{j=1}^{n}c_jx_j
z=∑j=1ncjxj,得
(15)
z
(
0
)
=
∑
i
=
1
m
c
i
x
i
z^{(0)} = \sum_{i=1}^{m}c_ix_i\tag{15}
z(0)=i=1∑mcixi(15)
(16)
z
(
1
)
=
∑
i
=
1
m
c
i
(
x
i
0
−
θ
a
i
j
)
+
θ
c
j
=
∑
i
=
1
m
c
i
x
i
0
+
θ
(
c
j
−
∑
i
=
1
m
c
i
a
i
j
)
=
z
(
0
)
+
θ
(
c
j
−
∑
i
=
1
m
c
i
a
i
j
)
z^{(1)} = \sum_{i=1}^{m}c_i(x_i^0-\theta a_{ij})+\theta c_j=\sum_{i=1}^{m}c_ix_i^0 + \theta(c_j-\sum_{i=1}^{m}c_ia_{ij})=z^{(0)}+\green{\theta(c_j-\sum_{i=1}^{m}c_ia_{ij})}\tag{16}
z(1)=i=1∑mci(xi0−θaij)+θcj=i=1∑mcixi0+θ(cj−i=1∑mciaij)=z(0)+θ(cj−i=1∑mciaij)(16)
式中
θ
>
0
\theta>0
θ>0,称
σ
j
=
(
c
j
−
∑
i
=
1
m
c
i
a
i
j
)
\red{\sigma_j=(c_j-\sum_{i=1}^{m}c_ia_{ij})}
σj=(cj−∑i=1mciaij) 为检验数。
- 当所有 σ j ≤ 0 \sigma_j\leq 0 σj≤0,当前顶点(基可行解)的目标函数已是最大值,即为最优解;
- 当所有
σ
j
≤
0
\sigma_j\leq 0
σj≤0,又有某个非基变量
x
j
x_j
xj 的检验数为0,则在另一个顶点也使目标函数达到最大,两点连线上的所有点都是最优解,即无穷多最优解,当所有非基变量的检验数
σ
j
<
0
\sigma_j<0
σj<0 时,有唯一最优解;
最优解判别定理:
若 X ( 0 ) = ( b 1 ′ , b 2 ′ , … , b m ′ , 0 , … , 0 ) T X^{(0)} = (b_1',b_2',\dots,b_m',0,\dots,0)^T X(0)=(b1′,b2′,…,bm′,0,…,0)T 为基可行解,且全部 σ j ≤ 0 , j = m + 1 , … , n \blue{\sigma_j\leq0,j=m+1,\dots,n} σj≤0,j=m+1,…,n,则 X ( 0 ) X^{(0)} X(0) 为最优解,若存在一个非基变量 x m + k \green{x_{m+k}} xm+k 对应的检验数 σ m + k = 0 \green{\sigma_{m+k} = 0} σm+k=0,则存在无穷多最优解;且全部 σ j < 0 , j = m + 1 , … , n \blue{\sigma_j<0,j=m+1,\dots,n} σj<0,j=m+1,…,n,则 X ( 0 ) X^{(0)} X(0) 为唯一最优解。
无界解判别定理:
若有一个非基变量 x m + k \green{x_{m+k}} xm+k 的 σ m + k > 0 \green{\sigma_{m+k}>0} σm+k>0,而其对应非基变量的所有系数 a i , m + k ≤ 0 , i = 1 , 2 , … , m a_{i,m+k}\leq 0,i=1,2,\dots,m ai,m+k≤0,i=1,2,…,m,则具有无界解。
计算步骤
(1) 求初始基可行解,列出初始单纯形表
(2)最优性检验
(3)基变换
- 1,确定换入基的变量
只要有检验数大于0,对应的变量就可作为换入变量,当有一个以上检验数大于0时,一般从中选取最大的一个:
(17) σ k = max j { σ j ∣ σ j > 0 } \sigma_k=\max \limits_{j}\{\sigma_j|\sigma_j>0\}\tag{17} σk=jmax{σj∣σj>0}(17)
其对应的变量 x k \red{x_k} xk 作为换入变量。 - 2,确定换出基的变量
根据确定 θ \theta θ 最小比值规则,对 P k P_k Pk 列计算可得:
(18) θ = min { b i a i k ∣ a i k > 0 } = b l a l k \theta = \min\{\frac{b_i}{a_{ik}}|a_{ik}>0\}=\frac{b_l}{a_{lk}}\tag{18} θ=min{aikbi∣aik>0}=alkbl(18)
其对应的变量 x l \red{x_l} xl 作为换出变量。
元素 a l k a_{lk} alk 决定了从一个基可行解到相邻基可行解的转移去向,称之为主元素。 - 3,迭代变换
用换入变量 x k x_k xk 去替换基变量中的换出变量 x l x_l xl,得到一个新的基 ( P 1 , … , P l − 1 , P k , P l + 1 , … , P m ) (P_1,\dots,P_{l-1},P_k,P_{l+1},\dots,P_m) (P1,…,Pl−1,Pk,Pl+1,…,Pm)。对应这个基可以找到一个新的基可行解,并相应地可以画出一张新的单纯形表。