4、全局灵敏度分析:Sobol方法、Morris方法、基于方差的灵敏度分析

做复杂曲面优化,最头疼的问题是什么?

我个人觉得,是变量太多。几十个设计参数摆在你面前,哪个该保留,哪个该扔掉?拍脑袋肯定不行。这时候,全局灵敏度分析就是你的手术刀。

局部灵敏度只能看某个点附近的变化,但曲面优化是非线性的,变量之间还会互相拉扯。全局分析就不一样了,它把整个设计空间都扫一遍,告诉你每个变量到底有多大影响力。

4.1 三种方法的定位与选择

先给个全景图。我习惯把这三类方法按「计算成本」和「信息量」排个序:

方法 核心思想 计算成本 适用场景
Morris 方法 一次改变一个变量,看输出变化 低(N×k 次) 初筛,变量很多(>20)时快速定位
Sobol 方法 分解方差,算一阶和总效应 高(N×(k+2) 次) 精确排序,需要交互效应信息
基于方差的方法 广义上的方差分解家族 中到高 对 Sobol 的补充或变体

你想想看,如果一开始就用 Sobol,算一次可能要跑几万次仿真,曲面模型再快也扛不住。我一般先上 Morris,把明显不重要的变量砍掉,再用 Sobol 精筛。

4.2 Morris 方法:快速筛选的利器

Morris 方法说白了就是「一次一个变量,但多跑几条轨迹」。

它的做法是:把每个变量的取值范围分成 p 个水平,然后随机选一个起点,每次只改变一个变量的值,沿着一条轨迹走完所有变量。重复 r 条轨迹,最后算两个指标:

  • μ*(均值):变量对输出的平均影响大小
  • σ(标准差):变量与其他变量的交互效应或非线性程度

关键判断规则:

  • μ* 大 → 该变量重要
  • σ 大 → 该变量有交互效应或非线性
  • μ* 小且 σ 小 → 可以固定,不用优化

我曾经在一个涡轮叶片气膜冷却的优化项目里,初始有 32 个几何参数。用 Morris 跑了一遍,发现其中 18 个的 μ* 值几乎为零。直接砍掉,后续 Sobol 的计算量降了 60%。

实操建议:

水平数 p 取 4~6,轨迹数 r 取 10~20。总仿真次数 = r × (k+1)。k=30 时,跑 20 条轨迹也就 620 次仿真,比 Sobol 的几万次友好太多了。

4.3 Sobol 方法:方差分解的黄金标准

Sobol 方法的核心是方差分解。它把输出 Y 的总方差拆成每个变量单独贡献的部分,以及变量之间交互贡献的部分。

公式长这样(理解意思就行):

V(Y) = Σ V_i + Σ Σ V_ij + ... + V_12...k

其中:
- V_i:变量 i 单独贡献的方差(一阶效应)
- V_ij:变量 i 和 j 交互贡献的方差(二阶效应)
- 以此类推...

然后定义两个关键指标:

  • 一阶灵敏度 S_i = V_i / V(Y) —— 变量 i 单独的影响力
  • 总灵敏度 S_Ti = (V_i + 所有包含 i 的交互项) / V(Y) —— 变量 i 的全部影响力

避坑指南:

我曾经犯过一个错:只看 S_i 就做决策。结果有个变量 S_i 只有 0.05,但 S_Ti 高达 0.6。为什么?因为它跟另一个变量有很强的交互效应。单独看它不重要,但组合起来影响巨大。所以,一定要同时看 S_i 和 S_Ti。

判断规则也很直观:

  • S_Ti 接近 0(比如 < 0.01)→ 可以固定
  • S_i 接近 S_Ti → 该变量主要是线性独立贡献
  • S_Ti 远大于 S_i → 该变量参与了很多交互效应

4.4 基于方差的方法:一个更广的视角

其实 Sobol 方法就是基于方差的方法中最经典的一种。广义上,还包括:

  • FAST 方法:用频率域采样,计算效率比 Sobol 高一些
  • 扩展傅里叶幅度灵敏度测试(EFAST):结合了 FAST 和 Sobol 的优点
  • Delta 方法:基于方差但用密度估计,适合非单调响应

我个人在实际项目中,90% 的情况用 Sobol。只有在模型特别复杂、仿真次数受限时,才会切到 EFAST。

4.5 三种方法的对比与选择策略

维度 Morris Sobol FAST/EFAST
计算成本 低 高 中
交互效应 定性判断 定量分解 定量分解
变量排序精度 粗筛 精确 较精确
适用变量数 20~100 < 20 < 30
输出信息 μ*, σ S_i, S_Ti S_i, S_Ti

我的推荐策略是:

  1. 变量 > 20 个:先用 Morris 筛一遍,砍掉明显不重要的
  2. 变量 10~20 个:直接上 Sobol,但要保证采样量足够(N > 1000)
  3. 变量 < 10 个:Sobol 精细分析,甚至可以算二阶、三阶交互

4.6 知识体系总览

下面这张图把三种方法的关系和选择路径画清楚了:

全局灵敏度分析方法体系 全局灵敏度分析 Morris 方法 Sobol 方法 FAST / EFAST 输出:μ*(均值)、σ(标准差) 适用:变量多(>20),初筛 输出:S_i(一阶)、S_Ti(总) 适用:变量少(<20),精筛 输出:S_i、S_Ti(频率域) 适用:中等变量,非单调 推荐流程:Morris 初筛 → Sobol 精筛 → 确定关键变量 注意:S_Ti 远大于 S_i 时,说明该变量存在强交互效应 不能只看一阶指标做决策

4.7 实操中的几个坑

坑一:采样量不足

Sobol 方法对采样量很敏感。我见过有人用 N=100 去算 10 个变量的 Sobol 指标,结果 S_i 加起来都超过 1.5 了。这明显不对。一般建议 N > 1000,变量多时 N > 5000。

坑二:忽略了模型拟合误差

如果你用代理模型(比如 Kriging)代替真实仿真做灵敏度分析,代理模型的误差会直接污染灵敏度指标。我习惯先做交叉验证,确认 R² > 0.95 再跑 Sobol。

小技巧:

用 Sobol 算出 S_Ti 后,把所有变量的 S_Ti 加起来。如果总和远大于 1,说明有高阶交互效应被忽略了。这时候可以考虑算二阶 Sobol 指标,或者改用更精细的采样策略。

嗯,全局灵敏度分析这块,核心就是「先粗后精,看全指标」。Morris 帮你快速缩小范围,Sobol 帮你精确锁定关键变量。两者配合,复杂曲面的变量筛选就不再是玄学了。