材料: Introduction to Operation Research 清华大学出版社
单纯形法的实质(几何)
如图的问题有六个角点可行解(CPF corner-point feasible solution),也就是可行域的六个顶点。 对于含有n个决策变量的LP问题而言,当两个CPF解位于n-1条相同的约束边界上是,他们是相邻的(这里n=2)
最优性检验:对于一个CPF解,如果没有比他更好的相邻CPF解,那么它就是最优解
求解步骤:从原点开始Z=0, 两个相邻解都优于它 -> 移动至较优的CPF解(0,6) ,有相邻解优于它 -> 移动至较优的CPF(2,6) -> 通过最优性检验,结束。
构建单纯形法(代数)
-
通过松弛变量(slack variables)把不等式约束化为等式约束
-
基本解:是一个扩展后的角点解,即加入松弛变量取值后形成的解。解(3,2)的扩展解是 (3,2,1,8,5)
-
自由度:变量个数 - 方程个数 = 5 - 3 = 2, 表示可任选2个变量来赋予任意数值,可根据此求解这3个方程得出其余3个变量的值。单纯形法把任意值设为0, 3个方程对其他3个变量的联力解就是基本解。
如(0,6,4,0,6)这个解中, x 1 x_1 x1、 x 4 x_4 x4就是非基变量, x 2 x_2 x2、 x 3 x_3 x3、 x 5 x_5 x5就是基变量。对可行性的要求是所有变量必须为非负
单纯形法的代数解释如下图右栏:
第一次迭代前,如何判断应该增加
x
1
x_1
x1还是
x
2
x_2
x2?
是根据目标函数中的系数,
x
1
x_1
x1的增长率为3,
x
2
x_2
x2的增长率为5,所以把
x
2
x_2
x2作为迭代1的入基变量。
第一次迭代时,如何判断在何处停止?通过最小比值试算
x
3
=
4
≥
0
x_3 = 4 \ge 0
x3=4≥0 -> 对
x
2
x_2
x2没有上限限制
x
4
=
12
−
2
x
2
≥
0
x_4 = 12 - 2x_2 \ge 0
x4=12−2x2≥0 ->
x
2
≤
6
x_2 \le 6
x2≤6
x
5
=
18
−
2
x
2
≥
0
x_5 = 18 - 2x_2 \ge 0
x5=18−2x2≥0 ->
x
2
≤
9
x_2 \le 9
x2≤9
所以
x
2
x_2
x2只能增加到6,同时
x
4
x_4
x4降为零,
x
4
x_4
x4是当前迭代的出基变量
改造非标准模式的约束(等号或大于等于号) : 大M法、两阶段法
转化为
对偶理论的实质
· 原问题目标函数的系数是对偶问题约束方程的右端项
· 原问题约束方程的右端项是对偶问题目标函数的系数
一个问题 | 另一个问题 |
---|---|
约束 i i i | 变量 i i i |
目标函数 | 约束右端项 |
· 弱对偶性:如果
x
x
x是原问题的一个可行解,
y
y
y是对偶问题的一个可行解,则有
c
x
≤
y
b
cx \le yb
cx≤yb
· 强对偶性:如果
x
∗
x^*
x∗是原问题的一个最优解,
y
∗
y^*
y∗是对偶问题的一个最优解,则有
c
x
∗
=
y
∗
b
cx^* = y^*b
cx∗=y∗b
当两个问题中有一个不是最优解,或者两个都不是最优解,会有
c
x
<
y
b
cx < yb
cx<yb,而当两个都是最优解是,则是等于的关系。在每一步的迭代中,单纯形法找到这个两个问题的一对特殊解,原问题的解是可行的,对偶问题的解是不可行的(最终迭代除外)
· 互补解特性:单纯形法迭代过程中,为原问题生成一个cpf解x, 同时得到对偶问题的互补解y, 并且满足
c
x
=
y
b
cx = yb
cx=yb。如果x不是原问题的最优解,那么y不是对偶问题的可行解(连约束都不满足)
· 最优互补解特性:单纯形法迭代过程中,为原问题生成一个最优解
x
∗
x^*
x∗, 同时得到对偶问题的一个最优互补解
y
∗
y^*
y∗, 满足
c
x
∗
=
y
∗
b
cx^* = y^*b
cx∗=y∗b。
· 对称性:原问题和对偶问题的一切关系必定是对称的,因为对偶问题的对偶问题是原问题
· 对偶定理:
1. 如果一个问题拥有可行解和有界的目标函数(有最优解),那么另一个问题也有可行解和有界的目标函数。弱对偶行和强对偶性都是可用的
2. 如果一个问题拥有可行解但是目标函数无界(没有最优解),那么另一个问题没有可行解
3. 如果一个问题没有可行解,那么另一个问题或者没有可行解,或者有可行解但是目标函数无界。
对偶性的应用
单纯形法可以通过解答对偶问题为原问题找到一个最优解。
约束方程对单纯形法的计算过程的影响要远远大于变量个数的影响,所以如果原问题的变量个数少,约束方程多的话就可以转化成对偶问题求解,可以极大减少计算量;
如果计算出来的 c x − b y cx - by cx−by足够小,也可以接受这个方案而不用再继续计算