非线性规划中的Sensitivity Analysis(灵敏度分析)
非线性规划中的灵敏度分析是研究优化问题的最优解(包括最优目标函数值和最优决策变量)如何随问题参数的变化而变化的理论。下面我将循序渐进地讲解这个概念。
第一步:理解基本问题与核心目标
首先,想象你已经解决了一个非线性规划问题:
Minimize f(x; p)
Subject to g_i(x; p) ≤ 0, i = 1, ..., m
h_j(x; p) = 0, j = 1, ..., p
这里,x 是决策变量,而 p 是问题参数。例如:
- 在成本最小化问题中,p 可能是原材料价格。
- 在生产计划中,p 可能是资源可用量或产品需求。
当你得到最优解 x*(p0) 和最优值 f*(p0) 对应于某个特定参数值 p0 后,自然会问:如果参数 p 在 p0 附近发生微小扰动,最优解和最优值会如何变化?灵敏度分析就是为了量化这种变化。其核心目标是计算导数,例如 df*/dp 和 dx*/dp,从而了解决策对参数扰动的敏感程度。
第二步:奠定理论基础——KKT条件与隐函数定理
要进行灵敏度分析,需要两个主要理论工具:
- 一阶最优性条件(KKT条件):在最优解 x* 处,假设满足一定的约束规格(如线性独立约束规格LICQ),则存在拉格朗日乘子 λ* (对应于不等式约束) 和 ν* (对应于等式约束),使得以下KKT条件成立:
- 平稳性:∇_x L(x*, λ*, ν*; p) = 0,其中拉格朗日函数 L = f + Σ λ_i g_i + Σ ν_j h_j
- 原始可行:g_i(x*; p) ≤ 0, h_j(x*; p) = 0
- 对偶可行:λ_i ≥ 0
- 互补松弛:λ_i g_i(x*; p) = 0
- 隐函数定理:KKT条件本质上定义了一个方程组。如果我们在最优解 (x*, λ*, ν*) 处评估这个方程组,并且该点的导数矩阵(KKT矩阵)是非奇异的,那么根据隐函数定理,我们可以将 x*, λ*, ν* 在局部视为参数 p 的可微函数。这为计算导数提供了可能性。
第三步:计算灵敏度公式——核心推导
假设在最优点处,积极约束集(即 g_i = 0 的约束)不变,且二阶充分条件成立。我们对KKT条件关于参数 p 求全微分:
d/dp [∇_x L] = ∇_xx² L * (dx*/dp) + ∇_xp² L + Σ (dλ_i/dp) ∇_x g_i + Σ (dν_j/dp) ∇_x h_j = 0
d/dp [g_i] = ∇_x g_i^T (dx*/dp) + ∂g_i/∂p = 0 (对积极不等式约束 i ∈ A)
d/dp [h_j] = ∇_x h_j^T (dx*/dp) + ∂h_j/∂p = 0 (对所有等式约束)
这形成了一个关于导数向量 (dx*/dp, dλ*/dp, dν*/dp) 的线性方程组。写成矩阵形式,就是所谓的“KKT灵敏度方程组”:
[ ∇_xx² L ∇g_A ∇h ] [ dx*/dp ] = [ -∇_xp² L ]
[ ∇g_A^T 0 0 ] [ dλ_A*/dp] = [ -∂g_A/∂p ]
[ ∇h^T 0 0 ] [ dν*/dp ] = [ -∂h/∂p ]
解这个线性系统,即可得到最优决策变量和乘子关于参数的导数。
第四步:计算最优值函数的灵敏度——包络定理
一个极其重要的结果是关于最优目标函数值 f* 的灵敏度。包络定理给出了一个简洁优美的公式:
df*/dp = ∂L/∂p | _(x*, λ*, ν*)
即,最优值关于参数的导数,等于在最优解处拉格朗日函数对该参数的偏导数。
- 其直观解释是:当参数 p 发生微小变化时,最优值的变化由两部分组成:(1) 参数直接对目标函数的影响;(2) 参数通过改变可行域,间接导致 x 变化,进而影响目标函数。但根据一阶最优条件,在最优解点,x 的微小调整对 f 的边际影响为零(被约束的边际影响所平衡),因此只剩下参数直接影响项,即 ∂L/∂p。
- 特别地,拉格朗日乘子 λ* 和 ν* 本身就有重要的灵敏度意义:它们表示对应约束右端项发生单位变化时,最优值 f* 的近似变化率。例如,如果约束是 g_i(x) ≤ b_i,则 λ_i* ≈ ∂f*/∂b_i,即资源的“影子价格”。
第五步:处理复杂情况与扩展
基本的灵敏度分析基于较强的局部光滑性和积极集不变性的假设。现实中需要处理更复杂的情况:
- 积极集变化:当参数变化足够大时,约束的积极/非积极状态可能改变(例如,一个新的约束变积极,或一个原来积极的约束变成非积极)。此时,最优解可能发生“拐折”,导数不再存在,需要进行分段线性分析或使用方向导数。
- 非唯一乘子:如果约束规格不满足(如线性相关),拉格朗日乘子不唯一,则最优值函数的导数可能是一个集合(次微分或方向导数集)。
- 数值方法:在实际问题中,通常不直接推导解析导数,而是在求解原问题后,利用求解器返回的最终基、乘子等信息,或通过求解上述KKT灵敏度方程组,来高效计算灵敏度信息。
总结
非线性规划中的灵敏度分析,是从建立参数化模型、利用KKT条件和隐函数定理建立局部可微性、推导并计算导数的线性系统,到最终应用包络定理解释乘子经济意义的一套完整理论。它架起了静态最优解与动态参数变化之间的桥梁,是进行方案后评估、鲁棒性分析和决策支持的关键工具。