参考:https://wenku.baidu.com/view/d6c2ec8502d276a200292ef0.html
一、引入
对于最大值问题:
矩阵形式为:
对于m个约束条件、n个决策变量,选取m个初始基变量 x i x_{i} xi,得到初始基可行解 ( 0 , . . . , 0 , b 1 , b 2 , . . . , b m ) T (0,...,0,b1,b2,...,bm)^T (0,...,0,b1,b2,...,bm)T,以及初始单纯形表。对所得的初始单纯形表,计算 σ j {\sigma}_j σj,其中 σ j = c j − z j \sigma _j = c_j - z_j σj=cj−zj,寻找最大的整数 σ j \sigma _j σj,将该列所对应的变量 x j x_j xj入基,该列最大的数所对应的行 x i x_{i} xi 出基。
二、示例
本文以如下公式为例:
故初始基变量: ( x 4 , x 5 , x 6 ) T (x_4, x_5, x_6)^T (x4,x5,x6)T,因为在约束条件所对应的系数矩阵中, x 4 , x 5 , x 6 x_4, x_5, x_6 x4,x5,x6对应的系数向量线性无关。
故初始基可行解为: ( 0 , 0 , 0 , 10 , 8 , 4 ) (0, 0, 0, 10, 8, 4) (0,0,0,10,8,4)
初始单纯性表:
替换基变量步骤:
1、找出最大的正数检验数 σ j \sigma _j σj,即第2列数字2;
2、找最小正数 b x j = m i n { 10 1 , 4 2 } \frac{b}{x_j} = min\{\frac{10}{1}, \frac{4}{2}\} xjb=min{110,24} 所在行,即基变量 x 6 x_6 x6 出基, x 2 x_2 x2 入基,得到新的基变量 ( x 4 , x 5 , x 2 ) T (x_4, x_5, x_2)^T (x4,x5,x2)T,以及新的可行解: ( 0 , 2 , 0 , 8 , 10 , 0 ) (0, 2, 0, 8, 10, 0) (0,2,0,8,10,0);
3、进行初等行变换,使 x 2 x_2 x2 所在的列变换到 x 6 x_6 x6 所在的列的形式,得到新的单纯形表:
同理: x 3 x_3 x3 进基变量, x 5 x_5 x5 出基变量,得到新的单纯性表:
至此,可以求得最优解: ( 0 , 12 , 5 , 8 , 0 , 0 ) T (0, 12, 5, 8, 0, 0)^T (0,12,5,8,0,0)T,最大值 z = − 19 z=-19 z=−19.
三、检验数
如上文,对于线性规划问题,若满足约束条件组成的可行域有界,则目标函数的最优解必定在可行域的顶点上。
当选取了一定的基变量时,如上文的 ( x 4 , x 5 , x 6 ) T (x_4, x_5, x_6)^T (x4,x5,x6)T , x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3为0,则当前的目标函数值: z 0 = − x 1 + 2 x 2 − x 3 + 0 x 4 + 0 x 5 + 0 x 6 z_0 = - x_1+2x_2-x_3+0x_4+ 0x_5+0x_6 z0=−x1+2x2−x3+0x4+0x5+0x6。
若 x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3中的非基变量值 x i x_i xi 一旦增加,如上,最开始可行解确定好后,增加 x 2 x_2 x2 的值, x 4 , x 5 , x 6 x_4, x_5, x_6 x4,x5,x6的值必定可以减少,而 x 2 x_2 x2 的系数 c 2 = 2 > 0 c_2 = 2>0 c2=2>0 ,显然目标函数值z增加了,故目标函数值 z 0 z_0 z0 不是最优解。
而对于检验数的确定:
设
z
=
c
1
x
1
+
c
2
x
2
+
.
.
.
+
c
n
x
n
z = c_1 x_1 + c_2 x_2 + ... + c_n x_n
z=c1x1+c2x2+...+cnxn,若
(
x
1
,
x
2
,
.
.
.
,
x
m
)
T
(x_1, x_2, ..., x_m)^T
(x1,x2,...,xm)T 为基变量【对应上例题中的初始基变量
(
x
4
,
x
5
,
x
6
)
T
(x_4, x_5, x_6)^T
(x4,x5,x6)T】,则
(
x
m
+
1
,
x
m
+
2
,
.
.
.
,
x
n
)
T
(x_{m+1}, x_{m+2}, ..., x_n)^T
(xm+1,xm+2,...,xn)T 为非基变量【对应上例题中的初始基变量
(
x
1
,
x
2
,
x
3
)
T
(x_1, x_2, x_3)^T
(x1,x2,x3)T】。显然,基变量根据约束条件可以使用非基变量表示出来,本文继续以上例题为例:
x
4
=
10
−
(
x
1
+
x
2
−
2
x
3
)
x
5
=
8
−
(
2
x
1
−
x
2
+
4
x
3
)
x
6
=
4
−
(
−
x
1
+
2
x
2
−
4
x
3
)
x_4 = 10 - (x_1 + x_2 -2x_3) \\ x_5 = 8 -(2x_1 - x_2 + 4x_3) \\ x_6 = 4 - (-x_1 + 2x_2 - 4x_3)
x4=10−(x1+x2−2x3)x5=8−(2x1−x2+4x3)x6=4−(−x1+2x2−4x3)
带入目标函数:
z
=
−
x
1
+
2
x
2
−
x
3
+
0
∗
(
10
−
(
x
1
+
x
2
−
2
x
3
)
)
+
0
∗
(
8
−
(
2
x
1
−
x
2
+
4
x
3
)
)
+
0
∗
(
4
−
(
−
x
1
+
2
x
2
−
4
x
3
)
)
z = - x_1+2x_2-x_3+0 * (10 - (x_1 + x_2 -2x_3))+ 0*(8 -(2x_1 - x_2 + 4x_3)) +0*(4 - (-x_1 + 2x_2 - 4x_3))
z=−x1+2x2−x3+0∗(10−(x1+x2−2x3))+0∗(8−(2x1−x2+4x3))+0∗(4−(−x1+2x2−4x3))
化为一般式:
z
=
(
c
m
+
1
−
(
Σ
i
=
1
m
c
i
∗
c
i
(
m
+
1
)
)
)
x
m
+
1
+
(
c
m
+
2
−
(
Σ
i
=
1
m
c
i
∗
c
i
(
m
+
2
)
)
)
x
m
+
2
+
.
.
.
+
(
c
n
−
(
Σ
i
=
1
m
c
i
∗
c
i
n
)
)
x
n
+
Σ
i
=
1
m
b
i
z = (c_{m+1} - (\Sigma _{i=1} ^m ci*c_{i(m+1)})) x_{m+1} + (c_{m+2}-(\Sigma _{i=1} ^m ci*c_{i(m+2)})) x_{m+2} + ... + (c_n-(\Sigma _{i=1} ^m ci*c_{in})) x_n + \Sigma _{i=1} ^m b_i
z=(cm+1−(Σi=1mci∗ci(m+1)))xm+1+(cm+2−(Σi=1mci∗ci(m+2)))xm+2+...+(cn−(Σi=1mci∗cin))xn+Σi=1mbi
从上式可以看出,对任意非基变量,其消除基变量后的系数若为正数,其数值越大,目标函数
z
z
z 的取值将越大。以此作为检验数。
对于本文初始目标函数:
c
i
=
0.
(
i
=
3
,
4
,
5
)
c_i = 0. (i=3,4,5)
ci=0.(i=3,4,5) ,故初始检验数
σ
j
=
c
j
\sigma_j = c_j
σj=cj 。发现
x
2
x_2
x2的检验数为2,对目标函数的更新变化最大。
以上显然未考虑 x i ( i = 1 , . . . m ) x_i(i=1,...m) xi(i=1,...m) 在约束条件中系数不为1的情况。若将其考虑,则同样可得只含有非基变量的新的目标函数。同理,将检验数最大的非基变量换出,如上,换出 x 2 x_2 x2,那换入哪一个非基变量呢?
如上文例子,若换出 x 2 x_2 x2 ,即用其他变量来表示 x 2 x_2 x2,但是其在约束条件中拥有两个正系数1和2,换出后,需要将系数转移到右边,即使用 b 系 数 \frac{b}{系数} 系数b,此时换出一个 b 系 数 \frac{b}{系数} 系数b 更小的基变量即可。