前言
在前文运筹学基础(一)求解线性规划的单纯形法详解
中,我们直观的理解了单纯形法其实是在可行域的顶点上搜索的过程。(这篇文章没有通过列单纯形表来讲述,而是选择了一种更符合直觉的方式,我觉得这对于初学者而言是更好理解的。单纯形表感觉还是有点绕…)
提到单纯形法,就不得不提一下检验数了,前文一带而过了,这篇文章单独拎出来聊一下。因为未来的学习中,很多更高阶的内容还会涉及到检验数的概念。
检验数理解
直观理解
检验数的直观理解就是,减少或增大某个变量的值,会给目标函数值带来多大的影响。
在 m i n i m i z e minimize minimize问题中,如果存在检验数为负的非基变量,则说明仍然存在变量可以进一步增大,从而使得目标函数值减小。
同理,在 m a x i m i z e maximize maximize问题中,如果存在检验数为正的非基变量,则说明仍然存在变量可以进一步增大,从而使得目标函数值增大。
数学证明
为什么上述理解是对的?我们通过简单的数学推导来证明一下。其实挺简单的,请耐心的看完。
假设我们的问题是一个 m i n i m i z e minimize minimize问题:
m i n c T x s . t . A x = b x ≥ 0 min\quad c^Tx\\ s.t.\quad Ax=b\\ x \geq0 mincTxs.t.Ax=bx≥0
我们将
x
x
x表示为基变量(一个基本解的组成部分)和非基变量(不是基本解的组成部分,可以自由改变的):
x
=
[
x
B
,
x
N
]
x = [x_B, x_N]
x=[xB,xN]
其中
x
B
x_B
xB表示基变量,
x
N
x_N
xN表示非基变量。
类似的,我们将成本系数表示为:
c
T
=
[
c
B
T
,
c
N
T
]
c^T = [c_B^T, c_N^T]
cT=[cBT,cNT]
将资源系数表示为:
A
=
[
B
,
N
]
A = [B, N]
A=[B,N]
开始转化:
- 通过
A
x
=
b
Ax=b
Ax=b推导出
x
B
x_B
xB的表示方式:
A x = b B x B + N x N = b B x B = b − N x N B − 1 B x B = B − 1 b − B − 1 N x N x B = B − 1 b − B − 1 N x N Ax = b\\ Bx_B+Nx_N=b\\ Bx_B=b-Nx_N\\ B^{-1}B x_B=B^{-1}b-B^{-1}Nx_N\\ x_B=B^{-1}b-B^{-1}Nx_N\\ Ax=bBxB+NxN=bBxB=b−NxNB−1BxB=B−1b−B−1NxNxB=B−1b−B−1NxN - 将
x
B
x_B
xB带入目标函数:
m i n c T x = c B T x B + c N T x N = c B T ( B − 1 b − B − 1 N x N ) + c N T x N = c B T B − 1 b + ( c N T − c B T B − 1 N ) x N min c^Tx=\\ c_B^Tx_B+c_N^Tx_N=\\ c_B^T(B^{-1}b-B^{-1}Nx_N)+c_N^Tx_N=\\ c_B^TB^{-1}b+(c_N^T-c_B^TB^{-1}N)x_N mincTx=cBTxB+cNTxN=cBT(B−1b−B−1NxN)+cNTxN=cBTB−1b+(cNT−cBTB−1N)xN
非基变量的系数 c N T − c B T B − 1 N c_N^T-c_B^TB^{-1}N cNT−cBTB−1N即为检验数(reduced cost)!
可以看到在 m i n i m i z e minimize minimize问题中,如果检验数为负数,则说明通过增加某一个非基变量的值,还可以进一步的减小目标函数值。