Skip to content

18.1.3 单纯形法

18.1.3.1 单纯形表

单纯形法用于产生可行集的一列极端点, 其对应的目标函数值不断增加. 为了从给定的一个极端点找出一个新的极端点, 我们从对应于给定极端点的规范形出发, 逐步到达对应于新的极端点的规范形. 为了有一个清晰的排列, 以及比较容易理解相应数字的含义, 我们将规范形 (18.9a, 18.9b) 重新表示成单纯形表 (表 18.2(a), 表 18.2(b)).

表中的第 k 行对应于约束

(18.15a)xnm+k+ak,1x1++ak,nmxnm=bk.

/patch/t18.2png

目标函数是

(18.15b)c1x1++cnmxnm=f(x)c0.

从这个单纯形表,就能找出极端点 (xN,xB)=(0,b) . 目标函数在这个极端点上的值是 f(x)=c0 . 把 c0 放到表的右下端有利于进行单纯形方法的计算. 在每一个表中总能找出如下三种情形中的一种:

**a) cj0,j=1,,nm : 这样的表是最优的. 点 (xN,xB)=(0,b) 是极大点. 如果所有 cj 是正的,那么这个顶点是唯一的极大点.

b) 至少有一个 j 使得 cj>0 ,并且 aij0,i=1,,m : 线性规划问题没有解,因为目标函数在可行集上无界; 随着 xj 的增加,它会无穷增加.

c) 对于每个使得 cj>0j ,至少有一个 i 使得 aij>0 : 有可能从极端点 x 移动到邻近的极端点 xf(x)f(x) . 在非退化极端点 x 的情形下, “>” 号总是成立的.

18.1.3.2 过渡到新的单纯形表

1. 非退化情形

如果一个表不是上述最后的情形 (情形 c), 那么新的表就按如下方式确定 (表 18.3). 基变量 xp 和非基变量 xq 之间通过下列计算进行转换:

/patch/18.1.3.2-1.png

apq 称作主元,第 p 行为主行,而第 q 列为主列. 为了选择主元,需要考虑如下两个要求:

a) 应该有 c~0c0 ;

b) 新的表也必须对应于一个可行解,即必须有 b~0 .

于是 (x~N,x~B)=(0,b~) 是一个新的极端点,在此极端点上目标函数取值 f(x~)= c~0 不小于以前的值. 如果主元按如下方式选择,则这些条件满足:

a) 为增加目标函数的值,可以选择对应于 cq>0 的列作为主列;

b) 为得到可行解, 主行必须选择为

(18.17)bpapq=min1imaiq>0{biaiq}.

如果可行集的极端点不是退化的, 则单纯形法在有穷步之后终止 ((情形 a) 或 (情形 b)).

第 1183 页 18.1.2 中的规范形可以写成单纯形表 (表 18.4(a)). 这个表并不是最优的, 因为目标函数在第 3 列中有正系数. 把第 3 列选定为主列 (也可以考虑第 2 列). 对主列的每一正元计算商 ai/aiq (实际上只有一个). 这些商示于最后一列之后. 最小商就确定主行.

/patch/t18.4.png

如果它不是唯一的,则对应于新表的极端点是退化的. 在实施(18.16a) (18.16d) 几个步骤之后,就得到表 18.4(b). 这个表确定极端点(0,2,0,1,0,2,8),对应于图 18.4 中的点 P7 . 由于这个新表仍然不是最优的,将 x3x6 互换 (表 18.4(c)). 第 3 个表中极端点对应于图 18.4 中的点 P6 . 在作附加变换之后,得到最优表 (表 18.4(d)),其极大点为 x=(2,2,2,5,0,0,0) ,对应于点 P5 ,并且目标函数在这里取得最大值 f(x)=18 .

2. 退化情形

如果在单纯形表中无法唯一地选择下一个主元, 则表示新的表有退化极端点. 退化极端点在几何上可以解释为可行解凸多面体的重合顶点. 这样的顶点有几个基. 因此, 在这种情形下可能出现若干步后仍出不来新的顶点, 也可能得到前面已经出现的表格, 从而可能发生无限循环的情形.

在退化的极端点情形下,解决问题的一种可能的办法是对 bi 加上小扰动 εi (选择适当的 εi>0 ),使得扰动后的极端点不再退化. 如果用 εi=0 替换,则从扰动问题的解就可得到退化情形的解.

如果在这种非唯一确定情形下随机选择主列, 则在实际中就可能发生无限循环这种异常情形.

18.1.3.3 初始单纯形表的确定

1. 辅助规划、人工变量

如果在原始约束 (18.1b) 中有等式或带负 bi 的不等式,则从单纯形法找出可行解并不是容易的事情. 为此, 在这种情形下, 我们从辅助规划开始来生成一个可行解,并把它作为原始问题单纯形法的出发点. 系统 Ax=b 的某些方程乘以(-1) 以便满足条件 b0 . 现在 Ax=b 中的 b0 ,其每一式的左端加上人工变量 yk(k=1,,m) ,并考虑辅助规划问题:

(18.18a)OF:g(x,y)=y1ym=max!(18.18b)a1,1x1++a1,nxn+y1=b1,am,1x1++am,nxn++ym=bm,x1,,xn0;y1,,ym0.}

在这个问题中,变量 y1,,ym 是基变量,并且可以着手做第 1 张单纯形表 (表 18.5). 这个表的最后一行包含非基变量之和,这些和是新的辅助目标函数 OF 的系数. 显然,总有 g(x,y)0 . 如果对于此辅助规划问题的某个极大点 (x,y)g(x,y)=0 ,则显然有 y=0 ,从而 xAx=b 的解. 如果 g(x,y)<0 , 则 Ax=b 无解.

表 18.5

x1

...

xn

y1

a1,1

...

a1,n

b1

ym

am,1

...

am,n

bm

OF

c1

...

cm

0

OF

...

j=1nbj=g(0,b)

2. 辅助规划问题的解

我们的目的是从基中消除人工变量. 下面来准备一个表, 此表不光是为了辅助规划问题. 我们通过人工变量的列和辅助目标函数的行来完成初始表. 辅助目标函数现在包含与等式相关的行所对应的系数之和 (示于下面). 如果人工变量变成了一个非基变量,则其列可以忽略,因为它绝不会再次被选作基变量. 极大点 (x,y) 一旦被确定, 则要区分两种情形:

(1) g(x,y)<0 : 系统 Ax=b 无解,线性规划问题没有任何可行解.

(2) g(x,y)=0 : 如果基变量中没有人工变量,则这个表就是原问题的初始表. 否则, 通过单纯形法的附加步骤将基变量中所有人工变量消除.

引入人工变量可能会大大增加问题的规模. 并不是每一个方程都有必要引入人工变量. 如果在引入松弛变量和剩余变量 (参见第 1185 页 18.1.2.1,3. 中的注) 之前约束系统的形式是: A1xb1,A2x=b2,A3xb3 ,其中 b1,b2,b3>0 ,那么仅仅前两个系统需要引入人工变量, 至于第三个系统, 可以选松弛变量作为基变量. 在第 1184 页 18.1.2 的例子中, 仅第一个方程需要人工变量:

g(x,y)=0 之下,相应的表 (表 18.6(b)) 是最优的. 在略去第 2 列之后, 就得到原问题的第 1 张表.

x1

x2

x3

x4

y1

1

1

1

-1

1

:

x5

0

1

0

0

2

:

x6

-1

0

2

0

2

x7

2

-3

2

0

2

OF

2

3

4

0

0

OF*

1

1

1

-1

1

x1

y1

x3

x4

x2

1

1

1

-1

1

x5

-1

-1

-1

1

1

x6

-1

0

2

0

2

x7

5

3

5

-3

5

OF

-1

-3

1

3

-3

OF*

0

-1

0

0

0

18.1.3.4 修正单纯形法

1. 修正单纯形表

假定线性规划问题由如下规范形给出:

(18.19a)OF :f(x)=c1x1++cnmxnm+c0=max!(18.19b) T: α1,1x1++α1,nmxnm+xnm+1=β1,

显然,系数向量 αnm+i(i=1,,m) 是第 i 个单位向量.

为了将其改变成另一个规范形, 从而达到另一个极端点, 只需用相应的基逆矩阵乘方程组 (18.19b). (注意如下事实: 如果 AB 表示一新的基,则向量 x 的坐标在新的基中可以表示成 AB1x . 如果已知新的基逆矩阵,则从最初的表通过简单相乘就可以得到任意列和目标函数.) 单纯形法可以这样修改, 使得在每一步而不用通过新表就能确定基逆. 从每个表中只要计算为找出新的主元所需要的元就够了. 如果变量数远大于约束数 (n>3m) ,那么修改单纯形法的计算量相当小,并有较好的精度. 修改单纯形表的一般形式示于表 18.7.

表 18.7

x1

...

xnm

xnm+1

...

xn

xq

x1B

a1,nm+1

...

a1,n

b1

r1

xmB

am,nm+1

...

am,n

bm

rm

c1

...

cnm

cnm+1

...

cn

c0

cq

表中的符号意义如下:

x1B,,xmB : 现时基变量 (如同在第一步中的 xnm+1,,xn 一样);

c1,,cn : 目标函数的系数 (与基变量相关的系数为零);

b1,,bm : 现时规范形的右端;

c0 : 目标函数在极端点 (x1B,,xmB)=(b1,,bm) 的取值; A=(a1,nm+1a1,nam,nm+1am,n) : 现时基逆, A 的列是对应现时规范形的 xnm+1,,xn 的列; r=(r1,,rm)T : 现时主列.

2. 修正单纯形的步骤

a) 当系数 cj(j=1,,n) 中至少有一个是正的,则相应的单纯形表不是最优的. 当某个 cq>0 时,选择相应的 q 列为主列.

b) 用 A 与原系数矩阵 (18.19b) 的第 q 列相乘,计算出主列 r ,并将此新的向量作为表的最后一个列向量. 第 k 个主行向量由类似于单纯形算法 (18.17) 中的方式确定.

c) 新表通过一系列转换步骤 (18.16a 18.16d ) 算出,这里 aiq 形式上用 ri 代替, 并且标号限于 nm+1jn . 删除列 r~,xq 成为基变量. 对于 j=1,,nm , 结果是 c~j=cj+αjTc~ ,其中 c~=(c~nm+1,,c~n)T ,而 αj 是 (18.19b) 的系数矩阵的第 j 列.

考虑第 1184 页 18.1.2 中例子的规范形. 我们希望把 x4 变成基. 相应的主列 r=α4 放置到表的最后一列 (表 18.8(a))(初始时 A 是单位矩阵).

对于 j=1,3,4 ,我们得到 c~j=cj3α2j:(c1,c3,c4)=(2,4,0) . 这样确定的极端点 x=(0,2,0,1,0,2,8) 对应于第 1184 页图 18.4 中的点 P7 . 下一个主列可以选在 j=3=q .

x1

x3

x4

x2

x5

x6

x7

x4

x2

1

0

0

0

1

-1

x5

0

1

0

0

1

1

x6

0

0

1

0

2

0

x7

0

0

0

1

5

-3

-1

1

3

0

0

0

0

-3

3

x1

x3

x4

x2

x5

x6

x7

x3

x2

1

1

0

0

2

0

x4

0

1

0

0

1

-1

x6

0

0

1

0

2

2

2

x7

0

3

0

1

8

2

8

2

4

-3

0

-3

0

0

-6

4

向量 r

r=(r1,,rm)=Aα3=(1100010000100301)(1125)=(0122)

确定, 并将之放到第二个表 (表 18.8(b)) 的最后一列. 用类似于第 1187 页 18.1.3.2 中所示的方法继续做下去. 如果想回到原先的方法, 则非基变量所对应的初始列构成的矩阵必须乘以 A ,并且只保留这些列.

18.1.3.5 线性规划中的对偶性

1. 对应

对于任意一个线性规划问题 (原始问题), 可以指定另一个线性规划问题 (对偶问题):对偶问题

原始问题

(18.20a)OF:f(x)=c1Tx1+c2Tx2=max!CT:A1,1x1+A1,2x2b1,(18.20b)A2,1x1+A2,2x2=b2,

x10,x2 自由.

对偶问题

(18.21a)OF:g(u)=b1Tu1+b2Tu2=min!CT:A1,1Tu1+A2,1Tu2c1,(18.21b)A1,2Tu1+A2,2Tu2=c2,u10,u2自由.

一个问题的目标函数的系数构成另一个问题约束的右端向量. 每个自由变量对应于一个等式, 而带限制符号的变量则对应于另一个问题的一个不等式.

2. 对偶性定理对偶性定理

a) 如果两个问题都有可行解,即 M,M (这里 MM 分别表示原问题和对偶问题的可行集), 那么

(18.22a)f(x)g(u),xM,uM,

并且两个问题都有最优解.

b) 点 xMuM 是相应问题的最优解,当且仅当

(18.22b)f(x)=g(u).

c) 如果 f(x)M 上没有上界,或 g(u)M 上没有下界,那么 M=M= ,即对偶问题没有可行解.

d) 点 xMuM 是相应问题的最优点,当且仅当

(18.22c)u1T(A1,1x1+A1,2x2b1)=0 和 x1T(A1,1Tu1+A2,1Tu2c1)=0.

使用上面最后两个方程,从对偶问题的非降秩最优解 u ,通过求解如下线性方程组可以找到原问题的最优解 x :

(18.23a)A2,1x1+A2,2x2b2=0,(18.23b)(A1,1x1+A1,2x2b1)i=0 当 ui>0,(18.23c)xi=0 当 (A1,1Tu1+A2,1Tu2c1)i0.

对偶问题也可以用单纯形法进行求解.

3. 对偶问题的应用

在如下情形下, 借助对偶问题求解可能有某些优点:

a) 如果能简单地找出对偶问题的规范形, 则从原问题切换到对偶问题.

b) 如果原问题的约束数量相比变量数大得多, 则可使用修正单纯形法处理对偶问题.

考虑第 1184 页 18.1.2 中例子的原问题.

原问题

OF:f(x)=2x1+3x2+4x3=max!CT:x1x2x31,x22,x1+2x32,2x13x2+2x32,x1,x2,x30.

对偶问题

OF:g(u)=u1+2u2+2u3+2u4=min!CT*:u1u3+2u42,u1+u23u43,u1+2u3+2u44,u1,u2,u3,u40.

如果对偶问题是在引入松弛变量后采用单纯形法进行求解,则得到最优解 u= (0,7,2/3,4/3) ,并且 g(u)=18 . 求解系统 (Axb)i=0 ,这里 ui>0 ,即 x2=2,x1+2x3=2,2x13x2+2x3=2 ,得到原问题的解 x=(2,2,2) ,f(x)=18.

version 1.24.0