线性规划与单纯形法
概念、建模、标准型
-
使用KKT解决线性规划问题
- 对于整数规划问题需要在解完之后再进行讨论
-
线性规划模型的标准型
目标函数: max z = c 1 x 1 + c 2 x 2 + ⋯ + c n x n 约束方程: { 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 x 1 , x 2 , ⋯ , x n ≥ 0 \begin{array}{ll} \text{目标函数:} & \max z = c_1x_1+c_2x_2+\cdots+c_nx_n\\ \text{约束方程:} & \left\{ \begin{array}{lcl} a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n &=& b_1\\ &\vdots&\\ a_{m1}x_1+a_{m2}x_2+\cdots+a_{mn}x_n &=& b_m\\ x_1,~x_2,~\cdots,x_n&\ge& 0 \end{array}\right. \end{array} 目标函数:约束方程:maxz=c1x1+c2x2+⋯+cnxn⎩⎪⎪⎪⎨⎪⎪⎪⎧a11x1+a12x2+⋯+a1nxnam1x1+am2x2+⋯+amnxnx1, x2, ⋯,xn=⋮=≥b1bm0-
目标函数统一求最大值, min z ⇒ 令 z ′ = − z ,求 max z ′ \min z\Rightarrow \text{令}z'=-z\text{,求}\max z' minz⇒令z′=−z,求maxz′
-
注意需要引入新的变量将不等号变成等号,对于 ≤ \le ≤,加上一个松弛变量,对于 ≥ \ge ≥,减去一个剩余变量
-
对于 x ≤ 0 x\le 0 x≤0的情况,令 x ′ = − x x'=-x x′=−x然后代换即可
-
对于 x = 0 x=0 x=0的情况,直接归入 x ≥ 0 x\ge 0 x≥0即可
-
对于 x ∈ R x\in R x∈R的情况,令 x = x ′ − x ′ ′ x=x'-x'' x=x′−x′′即可
-
-
思路:数学建模 → \rightarrow →化标准型 → \rightarrow →利用各种方法求解(单纯形法) → \rightarrow →对解进行讨论
-
参数意义:(最早来自生产生活)
- x i x_i xi:决策变量
- c i c_i ci:价值系数
- b i b_i bi:限额系数
- a i j a_{ij} aij:技术系数
-
图解法:适用于二维,可行域、可行解
-
图解法局限性 → \rightarrow →单纯形法,核心思想
- 解出所有约束方程的交点(一部分是可行域的顶点,另一部分不是),且交点个数是有限的
- 把n个交点的坐标代入目标函数得出最值
- 局限性:当交点数目过多时,枚举的计算量太大
标准型、基、基解、基可行解、可行基
-
标准化:维数升高将弱约束转化为强约束,方便之后的求解
例:
max z = 2 x 1 + 3 x 2 , s . t . { x 1 + 2 x 2 ≤ 8 4 x 1 ≤ 16 4 x 2 ≤ 12 x 1 , x 2 ≥ 0 \max z=2x_1+3x_2 , ~s.t. \left\{\begin{array}{c} x_1+2x_2\le 8\\ 4x_1\le 16\\ 4x_2\le 12\\ x_1,x_2\ge 0 \end{array}\right. maxz=2x1+3x2, s.t.⎩⎪⎪⎨⎪⎪⎧x1+2x2≤84x1≤164x2≤12x1,x2≥0⇒ 化为标准型:引入3个松弛变量 x 3 , x 4 , x 5 max z = 2 x 1 + 3 x 2 , s . t . { x 1 + 2 x 2 + x 3 = 8 4 x 1 + x 4 = 16 4 x 2 + x 5 = 12 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0 \Rightarrow \text{化为标准型:引入3个松弛变量}x_3,~x_4,~x_5\\ \max z=2x_1+3x_2 , ~s.t. \left\{\begin{array}{c} x_1+2x_2+x_3=8\\ 4x_1+x_4= 16\\ 4x_2+x_5= 12\\ x_1,x_2,x_3,x_4,x_5\ge 0 \end{array}\right. ⇒化为标准型:引入3个松弛变量x3, x4, x5maxz=2x1+3x2, s.t.⎩⎪⎪⎨⎪⎪⎧x1+2x2+x3=84x1+x4=164x2+x5=12x1,x2,x3,x4,x5≥0
-
矩阵形式: max z = C x , A X = b X ≥ 0 \begin{array}{rcl}\max z&=&\boldsymbol{Cx},~\\ \boldsymbol{AX}&=&\boldsymbol{b}\\ \boldsymbol{X}&\ge& 0\end{array} maxzAXX==≥Cx, b0,其中 C = ( c 1 , ⋯ , c n ) \boldsymbol{C}=(c_1,\cdots,c_n) C=(c1,⋯,cn), A m × n = ( P 1 , ⋯ , P n ) \boldsymbol{A}_{m\times n}=(P_1,\cdots,P_n) Am×n=(P1,⋯,Pn)
- 可行解:能使 A X = b \boldsymbol{AX}=\boldsymbol{b} AX=b成立的所有 X = ( x 1 , x 2 , ⋯ , x n ) T \boldsymbol{X}=(x_1,x_2,\cdots,x_n)^T X=(x1,x2,⋯,xn)T
- 最优解:使得目标函数取值最大的可行解
- 基解:假设
r
(
A
)
=
m
r(\boldsymbol{A})=m
r(A)=m,取
A
\boldsymbol{A}
A的一个极大无关组
B
m
×
m
\boldsymbol{B}_{m\times m}
Bm×m(可能有很多个,最多为
C
n
m
C_n^m
Cnm个),则
B
\boldsymbol{B}
B的
m
m
m个列向量是一组基,不妨取其为
A
\boldsymbol{A}
A的前
m
m
m列,即
B
=
(
P
1
,
⋯
,
P
m
)
\boldsymbol{B}=(P_1,\cdots,P_m)
B=(P1,⋯,Pm),对应的变量
X
B
=
(
x
1
,
⋯
,
x
m
)
T
\boldsymbol{X_B}=(x_1,\cdots,x_m)^T
XB=(x1,⋯,xm)T称为基变量;其余变量
X
N
=
(
x
m
+
1
,
⋯
,
x
n
)
T
\boldsymbol{X_N}=(x_{m+1},\cdots,x_n)^T
XN=(xm+1,⋯,xn)T称为非基变量。令所有的非基变量为0,则
X
=
(
x
1
,
x
2
,
⋯
,
x
m
,
0
,
⋯
,
0
)
T
\boldsymbol{X}=(x_1,x_2,\cdots,x_m,0,\cdots,0)^T
X=(x1,x2,⋯,xm,0,⋯,0)T为基本解。
对于每一个极大无关组,这个解是唯一的,对应几何意义为强束条件下的所有交点 - 基可行解:基解可正可负,负解则不满足约束条件,而满足约束条件的基解为基可行解。基可行解既是约束方程的交点,又是可行域的顶点(一定是基解的子集)
- 可行基:基可行解对应的基为可行基
- 注意:基解也可能不是可行解!
单纯形法
-
求基解的步骤:
A = [ 1 2 1 0 0 4 0 0 1 0 0 4 0 0 1 ] , X = [ x 1 x 2 x 3 x 4 x 5 ] , b = [ 8 16 12 ] \boldsymbol{A}=\left[\begin{array}{ccccc}1 & 2&1&0&0\\4&0&0&1&0\\0&4&0&0&1\end{array}\right],~\boldsymbol{X}=\left[\begin{array}{c}x_1\\x_2\\x_3\\x_4\\x_5\end{array}\right],~\boldsymbol{b}=\left[\begin{array}{c}8\\16\\12\end{array}\right] A=⎣⎡140204100010001⎦⎤, X=⎣⎢⎢⎢⎢⎡x1x2x3x4x5⎦⎥⎥⎥⎥⎤, b=⎣⎡81612⎦⎤
令 x 3 , x 4 , x 5 x_3,x_4,x_5 x3,x4,x5为基, x 1 , x 2 x_1,x_2 x1,x2非基,则有[ 1 0 0 0 1 0 0 0 1 ] [ x 3 x 4 x 5 ] = [ 8 16 12 ] − [ 1 2 4 0 0 4 ] [ x 1 x 2 ] \left[\begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\end{array}\right]\left[\begin{array}{c}x_3\\x_4\\x_5\end{array}\right]=\left[\begin{array}{c}8\\16\\12\end{array}\right]-\left[\begin{array}{cc}1&2\\4&0\\0&4\end{array}\right]\left[\begin{array}{c}x_1\\x_2\end{array}\right] ⎣⎡100010001⎦⎤⎣⎡x3x4x5⎦⎤=⎣⎡81612⎦⎤−⎣⎡140204⎦⎤[x1x2]
令 x 1 = x 2 = 0 x_1=x_2=0 x1=x2=0,得[ x 3 x 4 x 5 ] = [ 1 0 0 0 1 0 0 0 1 ] − 1 [ 8 16 12 ] = [ 8 16 12 ] \left[\begin{array}{c}x_3\\x_4\\x_5\end{array}\right]=\left[\begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\end{array}\right]^{-1}\left[\begin{array}{c}8\\16\\12\end{array}\right]=\left[\begin{array}{c}8\\16\\12\end{array}\right] ⎣⎡x3x4x5⎦⎤=⎣⎡100010001⎦⎤−1⎣⎡81612⎦⎤=⎣⎡81612⎦⎤
求出一个基解 X = ( 0 , 0 , 8 , 16 , 12 ) T \boldsymbol{X}=(0,0,8,16,12)^T X=(0,0,8,16,12)T -
单纯形法思想:
- 引入松弛变量和剩余变量,将问题化为标准型
- 找出一组基(选择 m m m列,越简单越好,最好是单位阵),求出初始基可行解
- 重新表示目标函数,并选择价值系数较高的作为下一次进基变量
- 选择系数限额系数与待进基变量比值较小的作为退基变量
- 选好新的进基变量和退基变量之后,重新表示约束方程,计算新的结果
- 重复3-5步骤,直到找到最优基可行解
单纯形表的应用
- 初始可行基 B ( 0 ) = ( P 3 , P 4 , P 5 ) B^{(0)}=(P_3,P_4,P_5) B(0)=(P3,P4,P5),基变量为 x 3 , x 4 , x 5 x_3,x_4,x_5 x3,x4,x5,非基变量为 x 1 , x 2 x_1,x_2 x1,x2
- 计算 B − 1 b B^{-1}b B−1b和 σ i \sigma_i σi,判优:如果存在 σ i > 0 \sigma_i>0 σi>0,则当前解不是最优解
- 检验是否为无界解:在 σ i > 0 \sigma_i>0 σi>0对应的 P i P_i Pi中,如果所有元素均非正,则该问题无解
- 进行换基操作,选择较大 σ \sigma σ对应的变量为进基变量
- 计算出 θ \theta θ,并选择最小比值对应的变量为出基变量(排除负数和无穷的情况)
- 使用初等行变换,将待进基变量对应的列变换为出基变量的形式
- 重复上述操作,直到所有的 σ \sigma σ都小于等于0,此时的解则为最优解
-
e.g. 对于 max z = 2 x 1 + 3 x 2 + 0 x 3 + 0 x 4 + 0 x 5 , s . t . { x 1 + 2 x 2 + x 3 = 8 4 x 1 + x 4 = 16 4 x 2 + x 5 = 12 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0 \max z=2x_1+3x_2+0x_3+0x_4+0x_5 , ~s.t.\left\{\begin{array}{c}x_1+2x_2+x_3=8\\4x_1+x_4= 16\\4x_2+x_5= 12\\x_1,x_2,x_3,x_4,x_5\ge 0\end{array}\right. maxz=2x1+3x2+0x3+0x4+0x5, s.t.⎩⎪⎪⎨⎪⎪⎧x1+2x2+x3=84x1+x4=164x2+x5=12x1,x2,x3,x4,x5≥0
- 最后得出最优解 x = ( 4 , 2 , 0 , 0 , 4 ) T x=(4,2,0,0,4)^T x=(4,2,0,0,4)T,最优值为 2 × 4 + 0 × 4 + 3 × 2 = 14 2\times 4+0\times 4+3\times 2=14 2×4+0×4+3×2=14
关于检验数和退化的讨论
- 对于检验数,若表达式为 σ i = z i − c i \sigma_i=z_i-c_i σi=zi−ci,则只需满足大于等于0即为最优解
- 若原问题是求最小值 min z \min z minz,则只需检验数满足大于等于0即为最优解(判优时观察是否有小于0的 σ \sigma σ并选择最小的)
- 两个检验数算出来相等:随便取一个作为进基即可
- θ \theta θ计算出来相同且同时为最小值的时候,发生了退化现象(当 b i = 0 b_i=0 bi=0的时候有可能出现)。如果出现退化,则选择下标最小的进行替换(作为退基)
人工变量法之“大M法”
-
使用场合:当化为标准型之后无法找到一个单位矩阵的时候需要使用人工变量法
-
e.g. 对于 max z = 5 x 1 + 3 x 2 + 2 x 3 + 4 x 4 , s . t . { 5 x 1 + x 2 + x 3 + 8 x 4 = 10 2 x 1 + 4 x 2 + 3 x 3 + 2 x 4 = 10 x i ≥ 0 \max z=5x_1+3x_2+2x_3+4x_4 , ~s.t. \left\{\begin{array}{c} 5x_1+x_2+x_3+8x_4=10\\ 2x_1+4x_2+3x_3+2x_4=10\\ x_i\ge 0 \end{array}\right. maxz=5x1+3x2+2x3+4x4, s.t.⎩⎨⎧5x1+x2+x3+8x4=102x1+4x2+3x3+2x4=10xi≥0
-
观察原始 A = [ 5 1 1 8 2 4 3 2 ] A=\left[\begin{array}{cccc}5&1&1&8\\2&4&3&2\end{array}\right] A=[52141382],发现没有 [ 1 0 0 1 ] \left[\begin{array}{cc}1&0\\0&1\end{array}\right] [1001],因此需要人为创造(如果矩阵中已经有某个单位向量,则只需要引入剩下的即可)
-
A ′ = [ 5 1 1 8 1 0 2 4 3 2 0 1 ] , s . t . { 5 x 1 + x 2 + x 3 + 8 x 4 + x 5 = 10 2 x 1 + 4 x 2 + 3 x 3 + 2 x 4 + x 6 = 10 x i ≥ 0 A'=\left[\begin{array}{cccccc}5&1&1&8&1&0\\2&4&3&2&0&1\end{array}\right],s.t.\left\{\begin{array}{c} 5x_1+x_2+x_3+8x_4+x_5=10\\ 2x_1+4x_2+3x_3+2x_4+x_6=10\\ x_i\ge 0 \end{array}\right. A′=[521413821001],s.t.⎩⎨⎧5x1+x2+x3+8x4+x5=102x1+4x2+3x3+2x4+x6=10xi≥0
-
处理目标函数: max z = 5 x 1 + 3 x 2 + 2 x 3 + 4 x 4 − M x 5 − M x 6 \max z=5x_1+3x_2+2x_3+4x_4-Mx_5-Mx_6 maxz=5x1+3x2+2x3+4x4−Mx5−Mx6( M M M为惩罚因子, → ∞ \to\infty →∞)
(若目标函数形式是最小值,则为 min z = 5 x 1 + 3 x 2 + 2 x 3 + 4 x 4 + M x 5 + M x 6 \min z=5x_1+3x_2+2x_3+4x_4+Mx_5+Mx_6 minz=5x1+3x2+2x3+4x4+Mx5+Mx6)
-
用单纯形法求解(区别:使用大M法时,一旦人工变量出基了,就一定不会再进基,响应的变量不需要再计算,普通单纯形法出基之后仍然有可能再次进基,包括松弛变量和剩余变量)
-
若终表中,基中无人工变量,则原问题有解;若基中仍然有人工变量,则原问题无解
-
人工变量法之“两阶段法”
- 大M法和两阶段法的不同之处在于对目标函数的不同处理方法
- e.g. 对于
min
z
=
−
3
x
1
+
x
2
+
x
3
,
s
.
t
.
{
x
1
−
2
x
2
+
x
3
≤
11
−
4
x
1
+
x
2
+
2
x
3
≥
3
−
2
x
1
+
x
3
=
1
x
i
≥
0
\min z=-3x_1+x_2+x_3, ~s.t. \left\{\begin{array}{c} x_1-2x_2+x_3\le 11\\ -4x_1+x_2+2x_3\ge 3\\ -2x_1+x_3=1\\ x_i\ge 0 \end{array}\right.
minz=−3x1+x2+x3, s.t.⎩⎪⎪⎨⎪⎪⎧x1−2x2+x3≤11−4x1+x2+2x3≥3−2x1+x3=1xi≥0
- 化标准型: min z = − 3 x 1 + x 2 + x 3 , s . t . { x 1 − 2 x 2 + x 3 + x 4 = 11 − 4 x 1 + x 2 + 2 x 3 − x 5 = 3 − 2 x 1 + x 3 = 1 x i ≥ 0 \min z=-3x_1+x_2+x_3, ~s.t. \left\{\begin{array}{c} x_1-2x_2+x_3+x_4= 11\\ -4x_1+x_2+2x_3-x_5=3\\ -2x_1+x_3=1\\ x_i\ge 0 \end{array}\right. minz=−3x1+x2+x3, s.t.⎩⎪⎪⎨⎪⎪⎧x1−2x2+x3+x4=11−4x1+x2+2x3−x5=3−2x1+x3=1xi≥0
- 引入人工变量 x 6 , x 7 x_6,x_7 x6,x7,使得 A ′ = [ 1 − 2 1 1 0 0 0 − 4 1 2 0 − 1 1 0 − 2 0 1 0 0 0 1 ] A'=\left[\begin{array}{cccccc}1&-2&1&1&0&0&0\\-4&1&2&0&-1&1&0\\-2&0&1&0&0&0&1\end{array}\right] A′=⎣⎡1−4−2−2101211000−10010001⎦⎤
- 第一阶段:新的目标函数 min w = 0 x 1 + ⋯ + 0 x 5 + x 6 + x 7 \min w=0x_1+\cdots+0x_5+x_6+x_7 minw=0x1+⋯+0x5+x6+x7(只有人工变量的价值系数为1)
- 判断是否有解:如果 min w = 0 \min w=0 minw=0,则原问题有解,进入第二阶段;否则原问题无解
- 第二阶段:观察第一阶段的终表的基中还有没有人工变量,有则进入下一步;没有则到最后一步
- 若第一阶段的终表的基中有人工变量:看人工变量所在的这些行的
B
−
1
A
B^{-1}A
B−1A中的系数是不是全为0
- 全为0:划去这些系数全为0的人工变量所在的行及其所在的列,回到5的判断
- 不全为0:强迫一个不是人工变量的 x i x_i xi进基,回到5的判断
- 若第一阶段的终表的基中没有人工变量:在终表中,划去人工变量所在的列,形成一个新的表,使用原问题的 c i c_i ci代替当前这个新表中的价值系数,以此为开端,继续用单纯形表进行运算
- 若第一阶段的终表的基中有人工变量:看人工变量所在的这些行的
B
−
1
A
B^{-1}A
B−1A中的系数是不是全为0
- 解的几种情况在单纯形表上的体现(以
max
z
\max z
maxz为例)
- 唯一最优解:终表上所有的非基检验数都小于0
- 多重最优解:终表上存在非基检验数等于0
- 无界解:存在正检验数相应的系数列中的所有系数均非正(这种情况下 θ i \theta_i θi均为负或无穷)
- 无解:只会出现在需要使用且已使用人工变量法时
- 大M法:最优基中有人工变量则无解
算
- 大M法:最优基中有人工变量则无解
- 解的几种情况在单纯形表上的体现(以
max
z
\max z
maxz为例)
- 唯一最优解:终表上所有的非基检验数都小于0
- 多重最优解:终表上存在非基检验数等于0
- 无界解:存在正检验数相应的系数列中的所有系数均非正(这种情况下 θ i \theta_i θi均为负或无穷)
- 无解:只会出现在需要使用且已使用人工变量法时
- 大M法:最优基中有人工变量则无解
- 两阶段法:第一阶段中 min w ≠ 0 \min w\neq 0 minw=0则无解