目的
- 运筹学的难度真是比较大,纵使老师课件讲得已经很清楚,但是涉及的步骤繁琐程度还是大大超出想象。
- 主要做一个不针对理论,只针对操作的讲解。
- 面向的主要是考试和小测。
单纯形法
使用原因
- 结局线性规划的普通作图法无法解决高维问题。
步骤1
所有的线性规划问题,我们都需要将问题转化为标准形式
- 使得不等式或等式的右边都是非负数,右边我们称之为RHS(right hand side)
- 所有的变量都要求是非负数
a. 案例: 2 x 1 − 3 x 2 ≤ − 8 2x_1-3x_2\leq -8 2x1−3x2≤−8应该改成 − 2 x 1 + 3 x 2 ≥ 8 -2x_1+3x_2\geq 8 −2x1+3x2≥8
b. 当左边小于右边的时候,例: 2 x 1 + x 2 ≤ 100 2x_1+x_2\leq 100 2x1+x2≤100,应该引入一个**松弛(slack)**变量,将它变为 2 x 1 + x 2 + s 1 = 100 2x_1+x_2+s_1=100 2x1+x2+s1=100
c. 左边大于右边的时候同理,减去即可。
基变量和非基变量
- 假设我们把一个带m约束的LP转换成标准形式。假设标准形式包含n个变量(标记为 x 1 , x 2 , . . . , n x_1,x_2,...,_n x1,x2,...,n),LP的标准形式为 m a x ( o r m i n ) z = c 1 x 1 + c 2 x 2 + . . . + c n x n s.t. a 11 x 1 + a 12 x 2 + . . . + a 1 n x n = b 1 . . . . . . . . . . a m 1 x 1 + a m 2 x 2 + . . . + a m n x n = b m max(or min)\space z = c_1x_1+c_2x_2+...+c_nx_n\\\operatorname{s.t.}\space \space a_{11}x_1+a_{12}x_2+...+a_{1n}x_n = b_1\\..........\\a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n = b_m max(ormin) z=c1x1+c2x2+...+cnxns.t. a11x1+a12x2+...+a1nxn=b1..........am1x1+am2x2+...+amnxn=bm
- 我们定义参数集为
A
=
[
a
11
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
a
m
n
]
A= \left[ \begin{matrix} a_{11} & ... & ... & ... & ...\\ ... & ... & ... & ... & ... \\ ... & ... & ... & ... & ... \\ ... & ... & ... & ... & a_{mn} \end{matrix} \right]
A=⎣⎢⎢⎡a11......................................................amn⎦⎥⎥⎤
X = [ x 1 x 2 . . . . . . x n ] B = [ b 1 b 2 . . . . . . b n ] X= \left[ \begin{matrix} x_1\\x_2\\...\\...\\x_n \end{matrix} \right] B= \left[ \begin{matrix} b_1\\b_2\\...\\...\\b_n \end{matrix} \right] X=⎣⎢⎢⎢⎢⎡x1x2......xn⎦⎥⎥⎥⎥⎤B=⎣⎢⎢⎢⎢⎡b1b2......bn⎦⎥⎥⎥⎥⎤ - 这个系统的约束可以被描述为
A
x
=
b
Ax = b
Ax=b。在通过单纯形算法处理之前,我们必须定义线性系统的基础解决方案。考虑一个等式系统有n个变量和m条等式且
n
≥
m
n\geq m
n≥m。一个系统的基础结局方案可以通过下列方法获得:
a. 隔行消去 n m nm nm变量,这些变量被称为 非基础变量(NBV)。
b. 剩下解决系统的m个变量。这些变量即为 基础变量(BV)
c. 得到的变量向量称为 基本解(包含基本变量和非基本变量)
重要案例
- Dakota家具公司生产书桌、餐桌和椅子。每种家居的生产都需要木材和两种熟练劳动:抛光和木工。制作每种家居所需资源如下表所示:
资源 | 书桌 | 餐桌 | 椅子 |
---|---|---|---|
木材 | 8 | 6 | 1 |
抛光时间 | 4 | 2 | 1.5 |
木工时间 | 2 | 1.5 | 0.5 |
- 目前可用的木材为48立方英尺、抛光时间为20个小时、木工时间为8个小时。书桌的售价为60美元,餐桌为30美元,椅子为20美元。Dakota公司认为书桌和椅子的需求量非常大,而餐桌最多只能卖出5张。由于已经购买了可用的资源,所以Dakota公司希望使收入最大化。定义的决策变量是: x 1 = 书 桌 的 产 量 x 2 = 餐 桌 的 产 量 x 3 = 椅 子 的 产 量 x_1 = 书桌的产量\\x_2=餐桌的产量\\x_3=椅子的产量 x1=书桌的产量x2=餐桌的产量x3=椅子的产量
- 则列方程的目标式子为 max z = 60 x 1 + 30 x 2 + 20 x 3 \max{ z }= 60x_1+30x_2+20x_3 maxz=60x1+30x2+20x3
x 1 x_1 x1 | x 2 x_2 x2 | x 3 x_3 x3 | 符号 | RHS |
---|---|---|---|---|
8 | 6 | 1 | ≤ \leq ≤ | 48 |
4 | 2 | 1.5 | ≤ \leq ≤ | 20 |
2 | 1.5 | 0.5 | ≤ \leq ≤ | 8 |
0 | 1 | 0 | ≤ \leq ≤ | 5 |
- 他们都大于0我就省略了
- 这里当符号是 = 或者 ≥ \geq ≥的问题会在大M法中讨论
转化为单纯形法的标准形式
行号 | Z | x 1 x_1 x1 | x 2 x_2 x2 | x 3 x_3 x3 | s_1 | s_2 | s_3 | s_4 | 符号 | RHS | 基变量 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | -60 | -30 | -20 | 0 | 0 | 0 | 0 | ≤ \leq ≤ | 0 | z = 0 z= 0 z=0 |
1 | 0 | 8 | 6 | 1 | 1 | 0 | 0 | 0 | ≤ \leq ≤ | 48 | s 1 = 48 s_1= 48 s1=48 |
2 | 0 | 4 | 2 | 1.5 | 0 | 1 | 0 | 0 | ≤ \leq ≤ | 20 | s 2 = 20 s_2= 20 s2=20 |
3 | 0 | 2 | 1.5 | 0.5 | 0 | 0 | 1 | 0 | ≤ \leq ≤ | 8 | s 3 = 8 s_3= 8 s3=8 |
4 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | ≤ \leq ≤ | 5 | s 4 = 5 s_4= 5 s4=5 |
开始迭代!!
第一步:看表格是否已经达到最优情况
- 判断是否达到最优情况的方法就是看Z所在行的所有非人工变量( s 1 s_1 s1~ s 4 s_4 s4为人工变量)的参数是否都为非负。
- 我们判断参数为 − 60 , − 30 , − 20 -60, -30, -20 −60,−30,−20 ,未达到优化条件。
第二步: 找非负最小参数,遍历每行,找到 R H S x 1 \frac{RHS}{x_1} x1RHS最小的
- 于是我们会形成一个这样的表格。
- 我们发现第三行符合要求。
第三步:开始换元,把其他行的 x 1 x_1 x1全部换成0,然后第三行的 x 1 x_1 x1消为1
第一步:表格是否达到最优情况
- x 3 x_3 x3仍然为负数,不满足最优。
第二步: 找非负最小参数,遍历每行,找到 R H S x 3 \frac{RHS}{x_3} x3RHS最小的
- 我们发现第二行符合要求
第三步:开始换元,把其他行的 x 3 x_3 x3全部换成0,然后第三行的 x 3 x_3 x3消为1
- 现在问题就解决而来,得出了结果
结果
- 结果要关注最后两列。
- 我们可以看到 s 1 = 24 , x 3 = 8 , x 1 = 2 , s 4 = 5 , Z = 280 s_1=24,x_3=8,x_1=2,s_4=5, Z = 280 s1=24,x3=8,x1=2,s4=5,Z=280
- 当求最小的时候,我们就求最大的-Z就好了 。
可选最优解
- 当我们把上面餐桌的售价改为35时,会导致我们优化到中间,出现这样子的表格。
- 根据定义,所有基变量在第0行都必须有0系数(否则它们就不是基变量)。但是在我们的最优表中,有一个非基变量 x 2 x_2 x2在第0行的系数同样也是0。
- 这就说明我们可以把
x
2
x_2
x2代换到其他等式,我们会获得这样的表格。
- 根据定理,两个最优点的连线同样也是最优的,两点之间上的点可以用这个表达式。
x
λ
=
λ
x
+
(
1
−
λ
)
x
′
,
∃
0
≤
λ
≤
1
x_{\lambda}=\lambda x+(1-\lambda)x^{'}, \exist \space 0\leq \lambda \leq 1
xλ=λx+(1−λ)x′,∃ 0≤λ≤1
无界解(没有界的解法)
- 基本判断条件是两个
- 第0行还有负数的的非人工变量
- 然而下面你已经找不到可以替换的ratio了
大M法
- 我们上面提到,我们只讨论了 ≤ \leq ≤。
- 当遇到了 ≥ \geq ≥或者 = = =的时候我们应该怎么操作呢?
第一步:先进行标准化
- 按照上面讲的进行标准化。
第二步:将约束条件转化为标准形式
- 小于等于则加入松弛变量 s i s_i si
- 大于等于则加入剩余变量
e
i
e_i
ei
第三步:如果是=或者 ≥ \geq ≥,则加入人工变量 a i a_i ai
第四步:将 M a i Ma_i Mai放入目标函数
- 如果是最大化,则 − M a i -Ma_i −Mai
- 如果是最小化,则
+
M
a
i
+Ma_i
+Mai
第五步:把目标函数里的人工变量全部消除
- 把下面加入的 a i a_i ai反代回目标函数。
- 目标函数不能有 a i a_i ai
- 要把目标函数的M全部移到RHS