最適化 (Optimization) — CAE用語解説

カテゴリ: 用語集 | 2026-03-28
CAE visualization for optimization - technical simulation diagram

最適化とは

🧑‍🎓

CAEでいう「最適化」って、普通の数学の最適化と何が違うんですか?


🎓

基本の考え方は同じで、目的関数を最小化(または最大化)する設計変数を見つけること。ただしCAEの場合は、1回の関数評価にFEMやCFDの解析が必要で、計算コストが桁違いに大きいんだ。例えば自動車のボディ構造を1回解くのに数時間かかるとしたら、1000回も試行錯誤なんてできないだろう?


🧑‍🎓

なるほど、だから効率的なアルゴリズムが大事なんですね。具体的にはどんな手法を使うんですか?


🎓

大きく分けて2つある。ひとつは勾配法(gradient-based)で、感度(微分情報)を使って効率よく降下方向を探す。もうひとつはメタヒューリスティクスで、遺伝的アルゴリズムや粒子群最適化のように微分を使わず確率的に探索する。前者は速いけど局所解に落ちやすく、後者は大域的に探索できるけど計算回数が多い。


トポロジー最適化・形状最適化・寸法最適化

🧑‍🎓

トポロジー最適化形状最適化って何が違うんですか? あと寸法最適化も聞いたことがあります。


🎓

3つの違いは「どこまで自由にデザインを変えられるか」だ。

自由度はトポロジー>形状>寸法の順に大きい。実務では最初にトポロジー最適化で概形を決めて、次に形状最適化でディテールを詰め、最後に寸法最適化で板厚を微調整する、という三段構えが多いよ。


🧑‍🎓

トポロジー最適化って3Dプリンタとの相性がいいって聞きますけど、本当ですか?


🎓

その通り。トポロジー最適化の結果は生物の骨みたいに有機的な形状になることが多くて、従来の切削や鋳造では製造が難しかった。でもアディティブ・マニュファクチャリング(3Dプリンタ)なら、そういう複雑形状もそのまま造形できる。GE Aviationのジェットエンジン用燃料ノズルは有名な成功例で、20個の部品を1個に統合して重量を25%削減したんだ。


勾配法 vs メタヒューリスティクス

🧑‍🎓

勾配法ってどうやって「どの方向に設計を変えたら良くなるか」を知るんですか?


🎓

感度(sensitivity)を計算するんだ。ざっくり言うと「この板厚を0.1mm増やしたら応力が何MPa減るか」という偏微分を求める。やり方は3つある:

  1. 有限差分法:変数を微小にずらして2回解き、差を取る。簡単だが変数の数だけ解析が必要。
  2. 直接微分法:支配方程式をそのまま微分して感度方程式を作る。変数が少なく応答が多い場合に有利。
  3. 随伴法(Adjoint Method):応答が少なく変数が多い場合に圧倒的に有利。後で詳しく説明するよ。

🧑‍🎓

じゃあメタヒューリスティクスは微分を使わないんですよね。どういう場面で使うんですか?


🎓

主に3つの場面で活躍する。まず目的関数が不連続や離散的な場合。例えばボルト本数(2本 or 4本 or 6本)のような整数変数は微分できない。次に局所解が多数ある多峰性の問題。勾配法だと最寄りの谷に落ちてしまうが、遺伝的アルゴリズムなら集団全体で広く探索できる。最後に解析コードがブラックボックスで感度が取れない場合。商用ソフトでソースコードにアクセスできないときによく使われるね。


🧑‍🎓

実務だと遺伝的アルゴリズム以外にはどんなものが使われてますか?


🎓

粒子群最適化(PSO)、焼きなまし法(Simulated Annealing)、差分進化(Differential Evolution)あたりが定番だね。あと最近はベイズ最適化の人気が高い。サロゲートモデル(代理モデル)で近似してから探索するので、高コストなCFDや衝突解析でも数十回のサンプルで良い解を見つけられる。


随伴法(Adjoint Method)

🧑‍🎓

随伴法が「圧倒的に有利」って言ってましたけど、具体的に何がすごいんですか?


🎓

核心は「設計変数が何百万個あっても、感度計算に必要な追加の連立方程式がたった1回で済む」ということ。普通の有限差分法だと変数が $n$ 個あれば $n$ 回の解析が必要だけど、随伴法なら1回の随伴解析で全変数の感度が一括で得られる。


🧑‍🎓

えっ、100万個の設計変数でも1回で済むんですか? なんでそんなことが可能なんですか?


🎓

ポイントはラグランジュの未定乗数法だ。目的関数 $J$ と支配方程式の残差 $R(\mathbf{u}, \mathbf{x}) = 0$ を組み合わせた拡張関数:

$$\mathcal{L} = J(\mathbf{u}, \mathbf{x}) + \boldsymbol{\lambda}^T R(\mathbf{u}, \mathbf{x})$$

を考える。ここで $\boldsymbol{\lambda}$ が随伴変数だ。$\mathcal{L}$ の $\mathbf{u}$ に関する微分をゼロにする条件から随伴方程式:

$$\left(\frac{\partial R}{\partial \mathbf{u}}\right)^T \boldsymbol{\lambda} = -\left(\frac{\partial J}{\partial \mathbf{u}}\right)^T$$

が導かれる。この随伴方程式を1回解けば、設計変数 $\mathbf{x}$ の各成分に対する感度が:

$$\frac{dJ}{dx_i} = \frac{\partial J}{\partial x_i} + \boldsymbol{\lambda}^T \frac{\partial R}{\partial x_i}$$

で一気に求まる。右辺の計算は行列-ベクトル積だけだから超安い。CFDの形状最適化ではメッシュ上の全ノード座標が設計変数になるので、随伴法がないと事実上不可能なレベルだよ。


🧑‍🎓

OpenFOAMにも随伴ソルバーがありますよね。実際に使うときの注意点は?


🎓

いい質問だね。OpenFOAMのadjointOptimisationFoamは定常RANS随伴に対応していて実用レベルだ。注意点としては:まず元の流れ場(primal)が十分に収束していることが前提。残差が大きいと随伴解もガタガタになる。次に随伴方程式の収束は元の方程式より難しいことが多い。緩和係数を小さめにするのがコツ。あとは乱流モデルの随伴をフリーズ(frozen turbulence)するか厳密に解くかで精度が変わる。計算資源に余裕があれば厳密随伴を使いたいところだ。


多目的最適化

🧑‍🎓

実際の設計って「軽くしたい」と「強度を上げたい」みたいに目的が複数ありますよね。どうやって両立するんですか?


🎓

それが多目的最適化だ。例えば自動車の車体設計なら「質量最小化」と「衝突エネルギー吸収量最大化」は互いに矛盾する。軽くすると吸収量が減るし、吸収量を増やすと重くなる。このトレードオフの境界がパレートフロントで、この曲線上の解はどれも「ある意味で最適」なんだ。


🧑‍🎓

パレートフロント上の解が全部最適なら、最終的にどうやって1つの設計を選ぶんですか?


🎓

数学的にはどれも等価だから、最終的にはエンジニアの判断で決める。よく使われる方法は3つ:

  1. 重み付け法:$\min\ w_1 f_1 + w_2 f_2$ のように重みで優先度を反映する。
  2. 膝点(knee point)選択:トレードオフの効率が最も良い「曲がり角」を選ぶ。少しの質量増で大きく強度が上がるポイントを狙う感じ。
  3. 製造制約フィルタ:パレート解の中から、製造コスト・工程・公差など最適化に組み込めなかった実務的条件で絞る。

実務ではNSGA-IIのような多目的遺伝的アルゴリズムでパレートフロントを一括生成し、そこからチームで議論して選ぶワークフローが主流だね。


🧑‍🎓

NSGA-IIってよく聞きますけど、計算コストはどのくらいかかるんですか?


🎓

集団サイズ×世代数だけ評価が必要になる。例えば集団100×50世代=5000回。1回の解析に1時間かかるなら単純計算で5000時間。現実的にはサロゲートモデルで近似して評価回数を100〜200程度に減らすか、HPCクラスタで並列実行するかだね。modeFRONTIERやHyperStudyのような最適化プラットフォームはこのあたりを自動化してくれる。


数学的定式化

CAEにおける最適化問題は一般に次の形で定式化される:

$$\begin{aligned} \min_{\mathbf{x}} \quad & J(\mathbf{u}(\mathbf{x}), \mathbf{x}) \\ \text{subject to} \quad & g_j(\mathbf{u}(\mathbf{x}), \mathbf{x}) \leq 0, \quad j = 1, \dots, m \\ & h_k(\mathbf{u}(\mathbf{x}), \mathbf{x}) = 0, \quad k = 1, \dots, p \\ & x_i^L \leq x_i \leq x_i^U, \quad i = 1, \dots, n \end{aligned}$$

ここで $\mathbf{x}$ は設計変数ベクトル、$\mathbf{u}(\mathbf{x})$ はFEM/CFDなどの状態変数(変位場・速度場など)、$J$ は目的関数(質量・コンプライアンス・抗力など)、$g_j$ は不等式制約(応力上限・体積率など)、$h_k$ は等式制約、$x_i^L, x_i^U$ は設計変数の上下限である。

トポロジー最適化ではSIMP法(Solid Isotropic Material with Penalization)が代表的で、各要素の擬似密度 $\rho_e \in [0, 1]$ を設計変数とし、ヤング率を:

$$E_e = \rho_e^p \, E_0$$

とペナルティ化する($p$ は通常3)。これにより中間密度(グレースケール)を抑制し、0/1に近い明確な材料配置が得られる。

関連用語

CAE用語の正確な理解は、チーム内のコミュニケーションの基盤です。 — Project NovaSolverは実務者の学習支援も視野に入れています。

最適化の実務で感じる課題を教えてください

Project NovaSolverは、CAEエンジニアが日々直面する課題——セットアップの煩雑さ、計算コスト、結果の解釈——の解決を目指しています。あなたの実務経験が、より良いツール開発の原動力になります。

お問い合わせ(準備中)
この記事の評価
ご回答ありがとうございます!
参考に
なった
もっと
詳しく
誤りを
報告
参考になった
0
もっと詳しく
0
誤りを報告
0
Written by NovaSolver Contributors
Anonymous Engineers & AI — サイトマップ
プロフィールを見る