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 |
我的推荐策略是:
- 变量 > 20 个:先用 Morris 筛一遍,砍掉明显不重要的
- 变量 10~20 个:直接上 Sobol,但要保证采样量足够(N > 1000)
- 变量 < 10 个:Sobol 精细分析,甚至可以算二阶、三阶交互
4.6 知识体系总览
下面这张图把三种方法的关系和选择路径画清楚了:
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 帮你精确锁定关键变量。两者配合,复杂曲面的变量筛选就不再是玄学了。