Morris方法(Elementary Effects)

分类: 分析 | 综合版 2026-04-06
CAE visualization for morris screening theory - technical simulation diagram
Morris法(Elementary Effects)

Morris方法的理论基础

筛选(Screening)的角色

🙋

我想做不确定度分析,可参数有二十个,把Sobol'指数全算一遍好像要几万次计算……


🎓

Morris方法(Elementary Effects法)正是为此而生。二十个参数里,真正左右响应的通常只有那么几个。Morris能用几百次计算就把"起作用的因子"和"不起作用的因子"分拣出来,作为正式的方差型灵敏度分析(Sobol'法)或优化之前的筛选环节。先把无效因子剔除,后续的计算成本能降一个数量级以上。

基本效应(Elementary Effect)的定义

把输入 \( \mathbf{x} = (x_1, \dots, x_k) \) 归一化到单位超立方体,只把第 \( i \) 个因子移动步长 \( \Delta \),响应的变化率就是该因子的基本效应(EE):

$$ EE_i = \frac{f(x_1, \dots, x_i + \Delta, \dots, x_k) - f(\mathbf{x})}{\Delta} $$

这本质上是某一点处偏导数的差分近似,但Morris方法的精髓在于在输入空间的各处反复测量EE,用其统计量来度量全局灵敏度。单点梯度(局部灵敏度)看不见的非线性与交互作用,会以EE的离散度形式显现出来。

三个统计量 μ·μ*·σ 的读法

由 \( r \) 次重复得到的EE样本,按因子计算:

统计量定义含义
\( \mu_i \)\( EE_i \) 的均值带符号的平均影响;正负EE会相互抵消导致低估
\( \mu_i^* \)\( |EE_i| \) 的均值(Campolongo改进)影响度排序的主指标,不受抵消影响
\( \sigma_i \)\( EE_i \) 的标准差越大表示非线性或与其他因子的交互越强

结果画在 \( \mu^* \)–\( \sigma \) 平面上解读:靠近原点=无影响(可固定);贴近横轴=线性起效;位于对角线上方=带非线性/交互地起效。\( \mu^* \) 与 \( \mu \) 差距大的因子,说明其作用方向会翻转(非单调),这是额外的信息。

抽样设计与计算流程

轨迹设计与计算次数

高效收集EE靠的是轨迹(trajectory)——一笔画式的样本序列:从随机起点出发,把 \( k \) 个因子逐一移动 \( \Delta \),得到 \( k+1 \) 个点;一条轨迹为每个因子各贡献一个EE。取 \( r \) 条轨迹,总计算次数为

$$ N = r\,(k+1) $$

因子数 \( k=20 \)、轨迹数 \( r=15 \) 时是315次。Sobol'指数的直接计算典型需要 \( N=(k+2)\times 10^3 \) 量级——Morris少两个数量级。输入按每维 \( p \) 个水平(取偶数,惯例 \( p=4 \))离散化,步长用 \( \Delta = p/(2(p-1)) \)(\( p=4 \) 时为2/3)。

轨迹数的选择与稳定性确认

实务起点是 \( r = 10\sim20 \),但"排序是否稳定"的确认必须配套:把轨迹抽一半与全量比较 \( \mu^* \) 的秩相关,确认前几名不换位。用bootstrap给 \( \mu^* \) 配置信区间,区间重叠的因子如实报告为"同级"。若目的只是分出重要组与可忽略组,组内的名次微调无需在意。

CAE特有的前处理——范围设定与归一化

🙋

杨氏模量是GPa、板厚是毫米、换热系数是W/m²K……单位五花八门,直接比较真的可以吗?


🎓

直接比不行。所有因子都要"按各自的变动范围归一化到0~1"之后再算EE。所以结果依赖于范围设定——杨氏模量按±3%还是±30%扫,排序可能完全不同。范围要依据实测数据、标准或文献来定,并且必须写进报告。范围的依据,就是灵敏度分析本身的质量。

响应有多个时(最大应力和一阶固有频率等),各响应的因子排序不同是常态。应按响应分别做Morris分析,只固定"对所有响应都不起作用"的因子——这是保守侧的运用原则。

实务应用流程

标准工作流

  1. 定义因子与范围——材料常数、板厚、边界刚度、荷载、摩擦系数等;记录范围依据(标准值、实测散布、过程能力)
  2. 生成轨迹样本——用SALib等生成 \( r(k+1) \) 行的输入矩阵
  3. 自动执行分析——逐行代入CAE模型的参数化运行:模板替换→提交作业→提取响应,全部脚本化
  4. 计算EE统计量并绘制μ*–σ图——完成因子分拣(重要/非线性·交互/可忽略)
  5. 稳定性确认——轨迹抽稀与bootstrap检验排序稳定性
  6. 移交下游——只带着头部因子进入Sobol'分析、稳健优化或参数标定

失败算例的处理

在CAE中跑Morris,范围边缘必然混入"网格生成失败""不收敛"。默默剔除失败点会使EE产生偏倚,所以要事先定好方针:①失败集中在某因子的端部→从物理上重审范围(那个角落可能是非现实组合);②零星失败→整条轨迹作废并补新轨迹;③失败本身就是关注点(可行边界)→把响应改为"可行/不可行"指标来分析。把失败率和处理方针写进报告是可复现性的要求。

结果的报告方式

三件套让筛选结果可审计:带因子标签的μ*–σ散点图、头部因子的μ*柱状图(带bootstrap置信区间)、被固定因子及其依据一览表。只写一句"灵敏度分析表明板厚与连接刚度起主导作用"而不留图表的报告,从V&V角度看是无法验证的,应当避免。

实现工具与CAE集成

主要工具的支持情况

工具Morris实现特点
SALib(Python)morris模块(轨迹生成+分析)免费轻量,脚本化CAE联动的首选
OpenTURNSMorris实验设计类与全套UQ(分布估计~可靠性)一体化
Dakotapsuade_moat方法求解器接口框架成熟,适合HPC
UQLab(MATLAB)灵敏度分析模块与Kriging等元模型衔接方便
optiSLang / modeFRONTIER 等作为DOE·灵敏度功能内置与商用CAE的GUI联动·作业管理齐备

SALib最小实现示例

run_fem 换成你的求解器调用,骨架即可直接用于实务:

import numpy as np
from SALib.sample import morris as morris_sample
from SALib.analyze import morris as morris_analyze

problem = {
    "num_vars": 3,
    "names": ["E", "thickness", "k_support"],
    "bounds": [[190e9, 210e9], [1.8e-3, 2.2e-3], [1e6, 1e8]],
}
X = morris_sample.sample(problem, N=15, num_levels=4)  # 15条轨迹 -> 15*(3+1)=60次
Y = np.array([run_fem(x) for x in X])                  # 逐行调用CAE
Si = morris_analyze.analyze(problem, X, Y, num_levels=4)
print(Si["mu_star"], Si["sigma"])

作业自动化的实际要点

几百次运行的自动化要脚本化四件事:①输入文件模板化(参数占位符替换),②作业并行提交与完成监控,③从结果文件提取响应值,④失败标记记录。只要中间夹着一步手工操作,315次就永远跑不完——"整个环路可以无人值守地跑完"本身,就是引入Morris方法的实际前提

前沿研究动态

抽样设计的改进

相对经典的随机轨迹,已有多种改进:最大化轨迹间距离、均匀覆盖空间的Campolongo轨迹选择;从同一基点向各因子放射扰动的radial design;与拉丁超立方结合的设计等。radial design与Sobol'总效应指数的估计量共享构件,使"筛选→方差型分析"的过渡可以无缝衔接。

分组筛选与高维问题

因子多达几十到几百个时,把物理相关的因子编组、先测"组级EE"再对幸存组逐个分析的两段式做法非常有效,计算次数对因子数近似对数增长。材料模型的大量硬化参数、成百上千个焊点刚度——这类CAE高维问题与它相性极佳。

与元模型·总效应指数的关系

已知 \( \mu^* \) 可充当Sobol'总效应指数的廉价代理,由此形成当前的实务最佳流水线:Morris降维→幸存因子上构建Kriging代理→在代理上严格估计Sobol'指数。筛选阶段砍得太狠,会在后续代理模型的验证中以"解释不了的残差"形式暴露出来,因此边界线上的因子要保留——这是安全侧的运用。

故障排查

按症状的原因与对策

症状可能原因对策
每次运行排序都变轨迹数不足;头部因子实力接近轨迹数翻倍并查秩相关;用置信区间标明"同级"
所有因子的μ*都差不多小范围设得太窄;响应选择不当重审范围依据;响应做无量纲化或换成目标量
某因子μ*小而σ很大正负EE相互抵消的非单调作用不要固定它;对比μ与μ*,再做一维扫描看形状
移动某因子就频繁崩溃范围端部非物理(负间隙、极端比值)把范围限制在物理界限内;记录失败率与处理方针
响应的波动淹没在数值噪声里网格重生成·收敛判据的抖动污染EE固定网格(morphing)、收紧收敛判据、加大Δ
想处理离散参数(单元类型等)Morris以连续因子为前提按水平分层分析,或"离散因子全组合×连续因子Morris"分解

常见误用——对"灵敏度"的过度解读

🙋

把μ*最大的因子报告为"最重要参数",可以吗?


🎓

可以,但有两个附加条件。第一,Morris的排序是相对于你所设范围的评价,要连范围一起报告,比如"在±10%变动范围内板厚起主导作用"。第二,μ*不是定量的方差贡献率;想说"占方差的百分之几",就得对头部因子再算Sobol'指数。筛选是加速"舍弃决策"的工具,"作用方式的定量化"是下一阶段的事——守住这条界线,Morris就是整个UQ流程里性价比最高的一步。

相关文章:稀疏PCE与LARKriging代理模型贝叶斯标定

相关模拟器

通过本领域的交互式模拟器直观感受理论

模拟器一览

相关领域

结构分析流体分析热分析
评价本文
感谢您的反馈!

帮助
想了解
更多
报告
错误
有帮助
0
想了解更多
0
报告错误
0
Written by NovaSolver Contributors
Anonymous Engineers & AI — 网站地图
查看简介