单纯形:指0维中的点,1维中的线段,2维中的三角形,3维中的四面体,n维空间中的有n+1个顶点的多面体。
一般线性规划问题具有线性方程组的变量数大于方程个数,这时有不定的解。但可以从线性方程组中找出一个个的单纯形,每一个单纯形可以求得一组解,然后再判断该解使目标函数值是增大还是变小,决定下一步选择的单纯形。进行迭代,直到目标函数实现最大值或最小值为止。
st=>start: 开始
op1=>operation: 确定初始基
cond=>condition: 最优解?
op2=>operation: 基变换、迭代
op3=>operation: 计算max或min
ed=>end: 结束
st->op1->cond
cond(no)->op2->cond
cond(yes)[sd]->op3->ed
A=[Bm×n+Im×m],明显I满足作为一个基的条件,我们一般选为初始基,故基变量系数初始值一般为0。

- XB:基变量
- CB:基变量系数
- n:决策变量个数
- m:基变量个数
- σj:检验系数σj=cj−i=1∑mcn+i⋅aij
- Step1:选
- 选出σ最大的列j作为进基。
- 从列j中选出xij>0且xijbi(xij为0则视为无穷大)最小的行i为离基。
- i、j的交叉点为主元aij。
- Step2:消
- aijrow(i)
- k in row,k=ifor[row(k)−akjrow(i)]
- Step3:换
- 行i,xB更换为进基变量
- 行i,CB更换为进基cj
- Step4:重新计算σ。
- Step5:重复上述操作,直到每列都满足σ≤0。此时xB列的变量即等于b列的值。
maxz=2x1+3x2
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x1+2x2≤804x1≤1604x2≤120x1,x2≥0
解
maxz=2x1+3x2+0x3+0x4+0x5
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x1+2x2+x3=804x1+x4=1604x2+x5=120x1,x2,x3,x4,x5≥0
|
|
|
|
|
|
|
|
|
cj |
2 |
3 |
0 |
0 |
0 |
|
CB |
XB |
x1 |
x2 |
x3 |
x4 |
x5 |
b |
0 |
x3 |
1 |
2 |
1 |
0 |
0 |
80 |
0 |
x4 |
4 |
0 |
0 |
1 |
0 |
160 |
0 |
x5 |
0 |
4 |
0 |
0 |
1 |
120 |
|
σj |
2 |
3 |
0 |
0 |
0 |
|
|
|
|
|
|
|
|
|
CB |
XB |
x1 |
x2 |
x3 |
x4 |
x5 |
|
0 |
x3 |
1 |
0 |
1 |
0 |
−21 |
20 |
0 |
x4 |
4 |
0 |
0 |
1 |
0 |
160 |
3 |
x2 |
0 |
1 |
0 |
0 |
41 |
30 |
|
σj |
2 |
0 |
0 |
0 |
−43 |
|
|
|
|
|
|
|
|
|
CB |
XB |
x1 |
x2 |
x3 |
x4 |
x5 |
|
2 |
x1 |
1 |
0 |
1 |
0 |
−21 |
20 |
0 |
x4 |
0 |
0 |
-4 |
1 |
2 |
80 |
3 |
x2 |
0 |
1 |
0 |
0 |
41 |
30 |
|
σj |
0 |
0 |
-2 |
0 |
41 |
|
|
|
|
|
|
|
|
|
CB |
XB |
x1 |
x2 |
x3 |
x4 |
x5 |
|
2 |
x1 |
1 |
0 |
0 |
41 |
0 |
40 |
0 |
x5 |
0 |
0 |
-2 |
21 |
1 |
40 |
3 |
x2 |
0 |
1 |
21 |
−81 |
0 |
20 |
|
σj |
0 |
0 |
−23 |
−81 |
0 |
|
取最优解时x1=40、x2=20、x5=40
z=2x1+3x2+0x3+0x4+0x5=80+60=140
当化为标准型后,可能无法找到单位矩阵作为初始基。
在引入人工变量前,已是等式,所以人工变量的最终取值必须为0,否则原问题无最优解。
在目标函数中,给人工变量赋一个充分大的系数——M。由于人工变量为基变量,对目标函数来讲是不经济的,所以应尽快地用非人工变量把人工变量从基中替换出来。这个充分大的系数无须赋予一个特定的值。
- 在最大化(Max)问题中,用−M来表示费用系数;
- 在最小化(Min)问题中,用M来表示收益系数。
M是一个充分大的正数。
minω=−3x1+x2+x3
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x1−2x2+x3≤11−4x1+x2+2x3≥32x1−x3=−1x1,x2,x3≥0
解
maxz=3x1−x2−x3+0x4+0x5
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧①:x1−2x2+x3+x4=11②:−4x1+x2+2x3−x5=3③:−2x1+x3=1x1,x2,x3,x4,x5≥0
maxz=3x1−x2−x3+0x4+0x5−Mx6−Mx7
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧①:x1−2x2+x3+x4=11②:−4x1+x2+2x3−x5+x6=3③:−2x1+x3+x7=1x1,x2,x3,x4,x5≥0
- Step3:使用单纯形法解该问题(x6、x7优先当离基)
|
|
|
|
|
|
|
|
|
|
|
cj |
3 |
-1 |
-1 |
0 |
0 |
−M |
−M |
|
CB |
XB |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
b |
0 |
x4 |
1 |
-2 |
1 |
1 |
0 |
0 |
0 |
11 |
−M |
x6 |
-4 |
1 |
2 |
0 |
-1 |
1 |
0 |
3 |
−M |
x7 |
-2 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
|
σj |
3-6M |
-1+M |
-1+3M |
0 |
−M |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
|
CB |
XB |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
b |
0 |
x4 |
3 |
-2 |
0 |
1 |
0 |
0 |
-1 |
10 |
−M |
x6 |
0 |
1 |
0 |
0 |
-1 |
1 |
-2 |
1 |
-1 |
x3 |
-2 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
|
σj |
1 |
-1+M |
0 |
0 |
−M |
0 |
1-3M |
|
|
|
|
|
|
|
|
|
|
|
CB |
XB |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
b |
0 |
x4 |
3 |
0 |
0 |
1 |
-2 |
2 |
-5 |
12 |
-1 |
x2 |
0 |
1 |
0 |
0 |
-1 |
1 |
-2 |
1 |
-1 |
x3 |
-2 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
|
σj |
1 |
0 |
0 |
0 |
-1 |
1-M |
-1-M |
|
|
|
|
|
|
|
|
|
|
|
CB |
XB |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
b |
3 |
x1 |
1 |
0 |
0 |
31 |
−32 |
32 |
−35 |
4 |
-1 |
x2 |
0 |
1 |
0 |
0 |
-1 |
1 |
-2 |
1 |
-1 |
x3 |
0 |
0 |
1 |
32 |
−34 |
34 |
−37 |
9 |
|
σj |
0 |
0 |
0 |
−31 |
−31 |
−M+31 |
−M+32 |
z=2 |
运用计算机计算时,为避免M可能带来的麻烦,把LP问题的求解分为两个阶段来进行。
- 第一阶段:先求解一个目标函数只包含人工变量的人造LP问题,即令极小值目标函数中人工变量的系数取某个正的常数(通常为1),而其他变量的系数为0。
- 第二阶段:从第一阶段得到的基可行解出发,求原问题的最优解。