HOME> 国足世界杯夺冠> 检验数(Reduced Cost)

检验数(Reduced Cost)

在单纯形法中,检验数(有时也叫做“机会成本”或“检验系数”,在英文中通常称为 Reduced Cost)是用来判断 非基变量 是否有可能让目标函数得到进一步改善(也就是判断是否值得“进基”)的一个指标。它在单纯形表中一般对应于“目标函数行”(又称“第 0 行”)里非基变量所在列的系数。

1. 检验数的定义

以最大化问题为例,单纯形表第 0 行(或目标行)里某个非基变量

x

j

x_j

xj​ 的系数,记为

c

ˉ

j

\bar{c}_j

cˉj​,就是这个变量的检验数。它反映了如果将该变量从 0 稍微增大,对目标函数的影响趋势:

c

ˉ

j

>

0

\bar{c}_j > 0

cˉj​>0(在最大化问题中),表示引入(增大)该变量能提高目标值,故可能“进基”。若

c

ˉ

j

0

\bar{c}_j \le 0

cˉj​≤0,表示引入该变量不会提高目标值(甚至会让目标变差),故不值得让它进基。

对于最小化问题,判断标准相反:若检验数(

c

ˉ

j

\bar{c}_j

cˉj​) < 0,就能让目标函数继续下降,值得进基。

简而言之:

最大化问题:检验数 > 0 的非基变量可以带来改进。最小化问题:检验数 < 0 的非基变量可以带来改进。

2. 检验数在单纯形法迭代中的作用

决定进基的非基变量 在每一次迭代中,单纯形法会查看所有非基变量的检验数:

若在最大化问题里存在

c

ˉ

j

>

0

\bar{c}_j > 0

cˉj​>0 的非基变量,则表示还能改进目标函数;通常选其中最“有利”的一个进入基。若所有非基变量的检验数都

0

\le 0

≤0,则说明无法继续改进,当前解即为最优解。 配合出基变量选择 进基变量确定后,需要根据最小比率检验(ratio test)来选出一个基变量“出基”,从而保证新的基可行解仍然满足所有约束。

3. 检验数的几何含义

几何上,单纯形法是在多面体顶点之间移动:

检验数可以理解为:如果我们从当前顶点向着某个非基变量的方向移动,对目标函数的变化率是正(最大化)还是负。当检验数显示继续“前进”能提升(或降低)目标函数时,就意味着多面体在这个方向上还有更优的顶点可达。

4. 检验数的计算

在单纯形法中,检验数(Reduced Cost)本质上是用来衡量“将某个非基变量从 0 调整为正值”对目标函数的边际影响。它既可以通过单纯形表中的“目标行”系数直接读取,也可以用向量-矩阵的形式进行计算。下面分别从这两种视角来说明其计算原理。

1. 在单纯形表(Simplex Tableau)中的计算

在构造单纯形表时,我们会把问题写成如下形式(以最大化问题为例):

初始形式

Maximize

z

=

j

=

1

n

c

j

x

j

subject to

{

A

x

=

b

,

x

0

,

\begin{aligned} \text{Maximize}\quad & z = \sum_{j=1}^n c_j x_j \\ \text{subject to}\quad & \begin{cases} A x = b, \\ x \ge 0, \end{cases} \end{aligned}

Maximizesubject to​z=j=1∑n​cj​xj​{Ax=b,x≥0,​​ 并在表格最底行(或顶部行)记录目标函数行。

引入基与非基

选定一组基变量

x

B

x_B

xB​

(

m

(m

(m 个),非基变量

x

N

x_N

xN​(

n

m

n-m

n−m 个)。在单纯形表中,基变量所在列常被“单位列”化,而非基变量的列则随迭代而更新。 检验数在目标行

在“目标行”中,每个非基变量

x

j

x_j

xj​ 对应一列,其在目标行的系数就是该变量的检验数

c

ˉ

j

\bar{c}_j

cˉj​。通过单纯形表的高斯消去或透过上一轮迭代的更新,就可以读出

c

ˉ

j

\bar{c}_j

cˉj​ 的数值。

在最大化问题里,如果有某个非基变量

x

j

x_j

xj​ 的检验数

c

ˉ

j

>

0

\bar{c}_j > 0

cˉj​>0,意味着把

x

j

x_j

xj​从 0 增大可以提高目标函数;相反,若

c

ˉ

j

0

\bar{c}_j \le 0

cˉj​≤0,就表示它对目标函数无进一步改进或会使目标下降。

2. 从线性代数(向量-矩阵)角度的公式

假设线性规划的标准形式为:

Maximize

z

=

c

T

x

subject to

A

x

=

b

,

x

0

,

\begin{aligned} \text{Maximize}\quad & z = c^T x \\ \text{subject to}\quad & A x = b, \\ & x \ge 0, \end{aligned}

Maximizesubject to​z=cTxAx=b,x≥0,​ 其中:

A

A

A 为

m

×

n

m \times n

m×n矩阵,

c

c

c 为

n

n

n-维目标系数向量,

x

x

x 为

n

n

n-维决策变量向量,

b

b

b 为

m

m

m-维常数向量。

B

B

B 表示基变量对应的列所组成的可逆矩阵(大小为

m

×

m

m \times m

m×m),

N

N

N 表示非基变量对应的列(大小为

m

×

(

n

m

m \times (n-m

m×(n−m))。相应地,将目标系数向量

c

c

c 拆分成

c

B

c_B

cB​(基变量的目标系数)和

c

N

c_N

cN​(非基变量的目标系数)。

基变量的值:

x

B

=

B

1

b

x_B = B^{-1} b

xB​=B−1b检验数(Reduced Cost) 对应于某个非基变量

x

j

x_j

xj​ 的计算公式:

c

ˉ

j

=

c

j

c

B

T

B

1

A

j

\bar{c}_j \;=\; c_j \;-\; c_B^T\,B^{-1}\,A_j

cˉj​=cj​−cBT​B−1Aj​ 其中:

c

j

c_j

cj​ 是非基变量

x

j

x_j

xj​ 在目标函数中的系数,

c

B

c_B

cB​ 是基变量的目标系数向量,

B

1

B^{-1}

B−1 是基矩阵的逆,

A

j

A_j

Aj​ 是矩阵

A

A

A 中对应非基变量

x

j

x_j

xj​ 的那一列。

含义

λ

T

=

c

B

T

B

1

\lambda^T = c_B^T B^{-1}

λT=cBT​B−1 可以视为对偶变量(或对偶价格)。

c

ˉ

j

=

c

j

λ

T

A

j

\bar{c}_j = c_j - \lambda^T A_j

cˉj​=cj​−λTAj​ 则表示:将变量

x

j

x_j

xj​ 从 0 增加一点点,对目标的净影响是多少。在最大化问题中,如果

c

ˉ

j

>

0

\bar{c}_j > 0

cˉj​>0,就能提高目标;若

c

ˉ

j

=

0

\bar{c}_j = 0

cˉj​=0,表示目标对它不敏感;若

c

ˉ

j

<

0

\bar{c}_j < 0

cˉj​<0,增大该变量会让目标变差。

5. 总结

检验数(Reduced Cost):在单纯形表的目标函数行中,用于评估“将某个非基变量由 0 调整为正值”对目标函数的影响。用途:

判断是否能继续改进目标函数;决定哪一个非基变量进基。 判定标准:

判断是否还有改进空间:最大化问题:若存在

c

ˉ

j

>

0

\bar{c}_j > 0

cˉj​>0 的非基变量,表示可进基。最小化问题:若存在

c

ˉ

j

<

0

\bar{c}_j < 0

cˉj​<0 的非基变量,表示可进基。 计算

检验数在单纯形表中的体现:

直接体现在“目标函数行”对应非基变量列的系数上。通过单纯形法的表格运算更新得到。 向量-矩阵公式:

c

ˉ

j

=

c

j

c

B

T

B

1

A

j

\bar{c}_j \;=\; c_j \;-\; c_B^T B^{-1} A_j

cˉj​=cj​−cBT​B−1Aj​ 它反映了 目标系数 与 对偶价格

(

c

B

T

B

1

(c_B^T B^{-1}

(cBT​B−1)的差值。

因此,检验数或Reduced Cost在单纯形法中扮演了“方向判别器”的角色,告诉我们是否还能通过让某个非基变量进入基来继续改进目标函数。