单纯形法
思路:从某一基本可行解(初始基本可行解)出发,每次寻找比上一个更“好”的基本可行解,而不比上一个“好”的基本可行解不去计算
要解决以下问题:
- 如何得到一个初始基本可行解
- 如何判别当前基本可行解是否已达到了最优解
- 若当前解不是最优解,如何寻找一个更好的基本可行解
例
m
a
x
z
=
5
x
1
+
2
x
2
max \: z=5x_{1}+2x_{2}
maxz=5x1+2x2
s
.
t
.
30
x
1
+
20
x
2
≤
160
s.t. \: 30x_{1}+20x_{2}≤160
s.t.30x1+20x2≤160
5
x
1
+
x
2
≤
15
\quad 5x_{1}+x_{2}≤15
5x1+x2≤15
x
1
≤
4
\quad x_{1}≤4
x1≤4
x
1
,
x
2
≥
0
x_{1},x_{2}≥0
x1,x2≥0
标准形式:(加入3个松弛变量)
m
a
x
z
=
5
x
1
+
2
x
2
+
0
x
3
+
0
x
4
+
x
5
max \: z=5x_{1}+2x_{2}+0x_{3}+0x_{4}+x_{5}
maxz=5x1+2x2+0x3+0x4+x5
s
.
t
.
30
x
1
+
20
x
2
+
x
3
=
160
s.t. \: 30x_{1}+20x_{2}+x_{3}=160
s.t.30x1+20x2+x3=160
5
x
1
+
x
2
+
x
4
=
15
\quad 5x_{1}+x_{2}+x_{4}=15
5x1+x2+x4=15
x
1
+
x
5
=
4
\quad x_{1}+x_{5}=4
x1+x5=4
x
1
,
x
2
,
x
3
,
x
4
,
x
5
≥
0
x_{1},x_{2},x_{3},x_{4},x_{5}≥0
x1,x2,x3,x4,x5≥0
得到对应的系数矩阵A
B
=
[
30
20
1
0
0
5
1
0
1
0
1
0
0
0
1
]
B=\begin{bmatrix} 30 & 20 & 1 & 0 & 0\\ 5 & 1 & 0 & 1 & 0\\ 1 & 0 & 0 & 0 & 1 \end{bmatrix}
B=⎣⎡30512010100010001⎦⎤
步骤
① 选择初始基矩阵 B(0)和基变量xB(在约束矩阵Am×n中构造m阶单位矩阵)
B
(
0
)
=
[
1
0
0
0
1
0
0
0
1
]
B^{(0)}=\begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix}
B(0)=⎣⎡100010001⎦⎤
x
B
=
[
x
3
x
4
x
5
]
x_{B}=\begin{bmatrix}x_{3}\\x_{4}\\x_{5}\end{bmatrix}
xB=⎣⎡x3x4x5⎦⎤
所以初始基本可行解为
[
x
B
x
N
]
=
[
B
−
1
b
0
]
\begin{bmatrix} x_{B}\\x_{N}\end{bmatrix}=\begin{bmatrix}B^{-1}b\\0\end{bmatrix}
[xBxN]=[B−1b0]
经过计算初始基本可行解为(0,0,160,15,4)T,相应的目标函数值为 max z=0
②判断当前解是否为最优解
- 将基变量用非基变量表示-典式
x 3 = 160 − 30 x 1 − 20 x 2 x_{3}=160-30x_{1}-20x_{2} x3=160−30x1−20x2
x 4 = 15 − 5 x 1 − x 2 x_{4}=15-5x_{1}-x_{2} x4=15−5x1−x2
x 4 = 4 − x 1 x_{4}=4-x_{1} x4=4−x1 - 用非基变量表示目标函数-典式
z = 0 + 5 x 1 + 2 x 2 z=0+5x_{1}+2x_{2} z=0+5x1+2x2
由于x1和x2的系数为正,而x1和x2的值从零开始,所以可以看出当前解不是最优解
对目标函数的典式中非基变量前所有的系数称为检验数
对最大化问题,当所有的检验数≤0时,当前解为最优解
对最小化问题,当所有的检验数≥0时,当前解为最优解
③解的改进
由于x1的系数5比x2大,求max每增加一个单位其贡献更大,所以让x1的取值从零变为正值(从非基变量中选出一个变成非基变量-进基变量)
从原来的基变量中选出一个变成基变量 -离基变量
选出进基变量
根据目标函数选出能使结果更优(max)的贡献更大的变量
选出离基变量
在用非基变量表示基变量的式子中,当x1从零值开始增加直到使x3,x4,x5的取值减少到零时停止,此时第一个变为零的基变量为离基变量
由此我们换出x4 其取值变为0 得到新的基本可行解
x
(
1
)
=
(
3
,
0
,
70
,
0
,
1
)
T
x^{(1)}=(3,0,70,0,1)^{T}
x(1)=(3,0,70,0,1)T
对应的基矩阵为
B
(
1
)
=
(
p
3
,
p
1
,
p
5
)
B^{(1)}=(p_{3},p_{1},p_{5})
B(1)=(p3,p1,p5),基变量是x3,x1,x5非基变量为x2,x4,对应的目标函数值是
z
(
x
(
1
)
)
=
15
>
z
(
x
(
0
)
)
=
0
z(x^{(1)})=15>z(x^{(0)})=0
z(x(1))=15>z(x(0))=0
再次回到第二步判断当前解是否为最优解,重复上面过程
在得到
z
(
x
(
2
)
)
=
20
z(x^{(2)})=20
z(x(2))=20时发现目标函数
z
=
20
−
1
14
x
3
−
4
7
x
4
z=20-\frac{1}{14} x_{3}-\frac{4}{7}x_{4}
z=20−141x3−74x4中非基变量由0增加,只能使z值下降
由此判断当前解为最优解
x
(
2
)
=
(
2
,
5
,
0
,
0
,
2
)
T
x^{(2)}=(2,5,0,0,2)^{T}
x(2)=(2,5,0,0,2)T
相应的值为
z
∗
=
z
(
x
(
2
)
)
=
20
z^{*}=z(x^{(2)})=20
z∗=z(x(2))=20
以上是单纯形法的实际操作过程详解