Morris法(Elementary Effects)
Morris法の理論基礎
スクリーニングという役割
不確かさ解析をしたいんですが、パラメータが20個もあって、Sobol'指数を全部計算すると何万ケースにもなりそうで…。
まさにそのためにあるのがMorris法(Elementary Effects法)だよ。20個のパラメータのうち、応答に本当に効くのはたいてい数個だけ。Morris法は数百回程度の解析で「効く因子」と「効かない因子」を仕分けるスクリーニング手法で、本格的な分散ベース感度分析(Sobol'法)や最適化の前段として使う。効かない因子を先に落とせば、後段の計算コストが桁で減るんだ。
Elementary Effectの定義
入力 \( \mathbf{x} = (x_1, \dots, x_k) \) を単位超立方体に正規化し、第 \( i \) 因子だけを刻み \( \Delta \) 動かしたときの応答変化率を第 \( i \) 因子のElementary Effect(EE)と定義します。
$$ EE_i = \frac{f(x_1, \dots, x_i + \Delta, \dots, x_k) - f(\mathbf{x})}{\Delta} $$
これは1点での偏微分の差分近似ですが、Morris法の要点は入力空間のあちこちでEEを繰り返し測り、その統計量で大域的な感度を測ることにあります。1点の勾配(局所感度)では見えない非線形性や交互作用の存在が、EEのばらつきとして現れます。
3つの統計量 μ・μ*・σ の読み方
\( r \) 個の反復で得たEEのサンプルから、因子ごとに次を計算します。
| 統計量 | 定義 | 意味 |
|---|---|---|
| \( \mu_i \) | \( EE_i \) の平均 | 符号付きの平均的影響。正負のEEが打ち消し合うと過小評価になる |
| \( \mu_i^* \) | \( |EE_i| \) の平均(Campolongoの改良) | 影響度ランキングの主指標。打ち消しの問題がない |
| \( \sigma_i \) | \( EE_i \) の標準偏差 | 大きいほど非線形性または他因子との交互作用が強い |
結果は \( \mu^* \)-\( \sigma \) 平面にプロットして読みます。原点近く=影響なし(固定してよい)、横軸寄り=線形で効く、対角線より上=非線形・交互作用込みで効く、という仕分けが一目でできます。\( \mu^* \) と \( \mu \) の乖離が大きい因子は符号が入れ替わる非単調な効き方をしている、という追加情報も読めます。
サンプリング設計と計算手順
軌道設計と計算回数
EEを効率よく集めるため、Morris法は軌道(trajectory)と呼ばれる一筆書きのサンプル列を使います。ランダムな始点から出発し、\( k \) 個の因子を1つずつ順に \( \Delta \) 動かして \( k+1 \) 点を得る——この1本の軌道で全因子のEEが1個ずつ手に入ります。軌道を \( r \) 本引けば、総解析回数は
$$ N = r\,(k+1) $$
です。因子数 \( k=20 \)、軌道数 \( r=15 \) なら315回。Sobol'指数の直接計算が典型的に \( N=(k+2)\times 10^3 \) 回オーダーを要するのと比べ、2桁少ない計算量で済みます。入力は各次元 \( p \) 水準(偶数、定番は \( p=4 \))のグリッドに離散化し、刻みは \( \Delta = p/(2(p-1)) \)(\( p=4 \) で 2/3)を使うのが標準です。
軌道数の選び方と収束の確認
実務の出発点は \( r = 10\sim20 \) です。ただし「ランキングが安定したか」の確認までがワンセットで、方法は単純です:軌道数を半分に間引いた場合と全数の場合で \( \mu^* \) の順位相関を取り、上位因子の順位が入れ替わらないことを確認します。ブートストラップで \( \mu^* \) の信頼区間を出し、区間が重なる因子同士は「同格」として扱うのが誠実な報告の仕方です。上位グループと下位グループの分離だけが目的なら、細かい順位の入れ替わりは気にする必要はありません。
CAE特有の前処理——範囲設定と正規化
ヤング率はGPa、板厚はmm、熱伝達率はW/m²K…単位がバラバラですけど、そのまま比べていいんですか?
そのままではダメだね。全因子を「各自の変動範囲で0〜1に正規化」してからEEを計算する。だから結果は範囲設定に依存する——ヤング率を±3%で振るか±30%で振るかでランキングは変わりうる。範囲は測定データ・規格・文献から根拠を持って決めて、報告書に必ず明記すること。範囲の根拠が感度分析の品質そのものだよ。
また、応答が複数ある場合(最大応力と1次固有振動数など)は因子ランキングが応答ごとに異なるのが普通です。応答ごとにMorris解析を行い、「どの応答に対しても効かない因子」だけを固定するのが安全側の運用です。
実務適用の手順
標準ワークフロー
- 因子と範囲の定義 — 材料定数・板厚・境界剛性・荷重・摩擦係数など。範囲の根拠(規格値・実測ばらつき・工程能力)を記録
- 軌道サンプルの生成 — SALib等で \( r(k+1) \) 点の入力行列を作成
- 解析の自動実行 — 入力行列の各行をCAEモデルに流し込むパラメトリックラン。入力テンプレート置換→ジョブ投入→応答抽出をスクリプト化
- EE統計量の計算と μ*-σ プロット — 因子の仕分け(重要/非線形・交互作用あり/無視可)
- 収束確認 — 軌道間引きとブートストラップでランキングの安定性を確認
- 後段への引き継ぎ — 上位因子のみでSobol'解析・ロバスト最適化・キャリブレーションへ
解析失敗ケースの扱い
CAEでMorris法を回すと、範囲の端で「メッシュ生成失敗」「非収束」が必ず混ざります。失敗ケースを黙って除外するとEEが偏るため、扱いを決めておきます。①失敗が特定因子の端に集中するなら範囲を物理的に見直す(その端が非現実的な組合せの可能性)、②散発的ならその軌道ごと捨てて軌道を追加、③失敗自体が興味対象(成立限界)なら応答を「成立/不成立」の指標に変えて解析する、の3択です。失敗率と処理方針を報告書に明記することが再現性の要件です。
結果の報告の仕方
μ*-σ 散布図(因子ラベル付き)、上位因子の μ* 棒グラフ(ブートストラップ信頼区間付き)、固定した因子とその根拠の一覧表——この3点が揃っていれば、後工程の担当者が判断を検証できます。「感度分析の結果、板厚と接合部剛性が支配的」とだけ書いて図表を残さない報告は、V&Vの観点では検証不能であり避けるべきです。
実装ツールとCAE連携
主要ツールの対応状況
| ツール | Morris法の実装 | 特徴 |
|---|---|---|
| SALib(Python) | morrisモジュール(軌道生成+解析) | 無償・軽量。CAEスクリプト連携の定番 |
| OpenTURNS | Morris実験計画クラス | UQ全般(分布推定〜信頼性解析)と一体で使える |
| Dakota | psuade_moat法 | 解析コード連携の枠組み(interface)が充実。HPC向け |
| UQLab(MATLAB) | 感度分析モジュール | Kriging等メタモデルとの接続が容易 |
| optiSLang / modeFRONTIER 等 | DOE・感度機能として搭載 | 商用CAEソルバーとのGUI連携・ジョブ管理込み |
SALibでの最小実装例
CAEソルバー呼び出しを 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"]) # μ* と σ
ジョブ自動化の実際
数百ランの自動化では、①入力ファイルのテンプレート置換(パラメータ名をプレースホルダ化)、②ジョブの並列投入と完了監視、③結果ファイルからの応答値抽出、④失敗ランのフラグ記録、の4点をスクリプトにします。1ランでも手作業が挟まると315回は現実に回せません。「全ランを無人で回せること」自体がMorris法導入の実質的な前提条件です。
先端研究の動向
サンプリング設計の改良
古典的なランダム軌道に対し、軌道同士の距離を最大化して空間を均等に覆う改良(Campolongoの軌道選抜)、1点から放射状に各因子を振るradial design、ラテン超方格と組み合わせた設計などが提案されています。radial designはSobol'総効果指数の推定と部品を共有できるため、スクリーニングから分散ベース解析への移行がシームレスになる利点があります。
グループスクリーニングと高次元化
因子が数十〜数百に及ぶ場合、物理的に関連する因子をグループ化して「グループ単位のEE」を測る拡張が有効です。まずグループで粗く仕分け、生き残ったグループ内だけを個別に解析する二段構えで、解析回数を因子数に対してほぼ対数的に抑えられます。材料モデルの多数の硬化パラメータ、多数の溶接点剛性など、CAEの高次元問題と相性の良いアプローチです。
メタモデル・総効果指数との関係
\( \mu^* \) はSobol'総効果指数の安価な代理指標として振る舞うことが知られており、「Morrisで次元削減→残った因子でKrigingサロゲート構築→サロゲート上でSobol'指数を厳密に推定」というパイプラインが現在の実務的ベストプラクティスです。スクリーニングの段階で因子を落としすぎると後段のサロゲート精度検証で矛盾(説明できない残差)として現れるため、境界上の因子は落とさず残すのが安全側の運用です。
トラブル対応
症状別の原因と対策
| 症状 | 考えられる原因 | 対策 |
|---|---|---|
| 実行のたびにランキングが変わる | 軌道数不足、上位因子が実力伯仲 | rを倍増して順位相関を確認。信頼区間で「同格」を明示 |
| 全因子のμ*が同程度に小さい | 範囲設定が狭すぎる、応答の選択ミス | 範囲の根拠を再確認。応答を無次元化・目的量に変更 |
| μ*は小さいのにσだけ大きい因子がある | 正負のEEが打ち消す非単調な効き方 | 固定せずに残す。μとμ*の乖離を確認し、その因子の1次元スイープで形を見る |
| 特定因子を動かすと解析が頻繁に落ちる | 範囲端が非物理的(負の隙間、極端な剛性比) | 範囲を物理限界内に修正。失敗率と処理方針を記録 |
| 応答のばらつきが数値ノイズに埋もれる | メッシュ再生成・収束判定のゆらぎがEEを汚染 | メッシュ固定(モーフィング)、収束基準を1桁厳格化、Δを大きめに設定 |
| 離散パラメータ(要素タイプ等)を扱いたい | Morris法は連続因子前提 | 水準別に層別解析するか、離散因子は全組合せ×連続因子Morrisに分解 |
よくある誤用——「感度」の過大解釈
μ*が一番大きかった因子を「最重要パラメータ」として報告してもいいですよね?
2つ条件付きでね。第一に、Morris法のランキングは設定した範囲に対する相対評価だから、「±10%の変動範囲では板厚が支配的」のように範囲込みで報告すること。第二に、μ*は定量的な寄与率(分散の何%)ではないから、寄与率を言いたければ上位因子でSobol'指数を計算し直すこと。スクリーニングは「捨てる判断」を高速化する道具であって、「効き方の定量化」は次の段階の仕事——この線引きを守れば、Morris法はUQワークフロー全体で最も費用対効果の高い一手になるよ。
関連手法はスパース多項式カオス展開、Krigingサロゲート、ベイズキャリブレーションを参照してください。
関連トピック
なった
詳しく
報告