遺伝的アルゴリズム(GA) — CAE用語解説

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

遺伝的アルゴリズム(GA)とは

🧑‍🎓

遺伝的アルゴリズム(GA)って、CAEの最適化でよく聞くんですけど、ざっくり何をするアルゴリズムなんですか?


🎓

ざっくり言うと、生物の進化を真似た最適化手法だ。設計案の集団(個体群)を作って、選択・交叉・突然変異という3つの操作で世代を重ね、だんだん良い設計に進化させていく。Hollandが1975年に提唱した古典的手法だけど、CAEでは今でも主力だよ。


🧑‍🎓

なんで「進化」を真似する必要があるんですか? 普通に微分して最適値を求めればいいんじゃないですか?


🎓

いい質問だ。勾配法(微分ベース)は目的関数が滑らかで微分可能なときには効率的だけど、CAEの現場では非線形・不連続・多峰性の問題がゴロゴロある。例えば衝突解析のような問題だと、ちょっとパラメータを変えただけで応答が不連続に変わることがある。GAは勾配情報を一切使わないから、そういう"荒れた"問題でも最適解を探索できるんだ。


基本操作:選択・交叉・突然変異

🧑‍🎓

選択・交叉・突然変異って、具体的にはどんな操作なんですか?


🎓

順番に説明しよう。まず選択(Selection)は、個体群の中から「優秀な親」を選ぶ操作だ。よく使われるのはトーナメント選択で、ランダムにk個体を取り出してその中で最も適合度の高いものを親に選ぶ。ルーレット選択(適合度に比例した確率で選ぶ)も有名だね。


🧑‍🎓

交叉はどうですか? 生物で言えば「子どもを作る」みたいなイメージですか?


🎓

まさにそう。交叉(Crossover)は2つの親個体の遺伝子(設計変数)を組み合わせて子を作る操作だ。実数値GAだとSBX交叉(Simulated Binary Crossover)がよく使われる。CAEの最適化だと設計変数が板厚・材料定数・形状パラメータなどの連続値だから、SBXとの相性がいい。分布指数 $\eta_c$ を大きくすると親に近い子が、小さくすると親から離れた子が生まれやすくなるよ。


🧑‍🎓

突然変異は? 名前からして、ランダムに値を変えるんですよね。


🎓

その通り。突然変異(Mutation)は個体の遺伝子をランダムに擾乱する操作で、局所解への収束を防ぐ役割がある。実数値なら多項式突然変異(Polynomial Mutation)が一般的で、突然変異率は通常 $p_m = 1/n$($n$ は設計変数の数)くらいに設定する。例えば設計変数が20個なら5%程度だ。大きすぎるとランダム探索になって収束しなくなるから注意が必要だよ。


GAの基本的な流れを数式で表すと、世代 $t$ の個体群 $P(t)$ に対して次のサイクルを繰り返す:

$$ P(t) \xrightarrow{\text{Selection}} P'(t) \xrightarrow{\text{Crossover}} P''(t) \xrightarrow{\text{Mutation}} P(t+1) $$

各個体 $\mathbf{x} = (x_1, x_2, \ldots, x_n)$ は設計変数ベクトルであり、適合度関数 $f(\mathbf{x})$ で評価される。

CAE最適化における活用

🧑‍🎓

実際にCAEでGAを使うときって、どんな問題に適用するんですか?


🎓

代表的なのは構造最適化だ。例えば自動車のクラッシュボックスの板厚を最適化して、重量を最小にしつつ衝突エネルギー吸収量の制約を満たすようなケース。FEAソルバー(LS-DYNAなど)を1回走らせるのが「1個体の評価」にあたる。


🧑‍🎓

でもFEAを何百回も走らせるんですよね? 計算コストがとんでもないことになりませんか?


🎓

まさにそこがGAの最大の課題だ。集団サイズ100で50世代回すと5,000回の解析が必要になる。1回の解析に2時間かかるなら、単純計算で10,000時間。だから実務ではサロゲートモデル(代理モデル)を挟んで評価回数を劇的に減らす。実際のFEAは数十〜数百回に抑えて、残りはサロゲートで予測する。これについては後で詳しく話そう。


多目的最適化とNSGA-II

🧑‍🎓

現場だと「軽くしたいけど剛性も確保したい」みたいに、目的が複数あることが多いと思うんですけど、GAでどう扱うんですか?


🎓

それが多目的最適化の出番だ。最も有名なのがNSGA-II(Non-dominated Sorting Genetic Algorithm II、Deb et al., 2002)で、CAEの多目的最適化ではデファクトスタンダードと言っていい。


🧑‍🎓

NSGA-IIの「非支配ソート」って何をやっているんですか?


🎓

2つの目的関数 $f_1, f_2$ を最小化する問題を考えよう。個体Aが個体Bに「支配される」とは、$f_1(B) \leq f_1(A)$ かつ $f_2(B) \leq f_2(A)$ で、少なくとも一方は厳密に小さい場合のこと。誰にも支配されない個体の集合が第1フロント(パレートフロント近似)になる。NSGA-IIはこのフロントを基準に個体をランク付けし、さらに混雑距離(Crowding Distance)で解の多様性を維持する。


NSGA-IIの混雑距離は、目的関数空間における各個体の周囲の「空き具合」を定量化する:

$$ d_i = \sum_{m=1}^{M} \frac{f_m^{(i+1)} - f_m^{(i-1)}}{f_m^{\max} - f_m^{\min}} $$

ここで $M$ は目的関数の数、$f_m^{(i\pm1)}$ は目的関数 $m$ に関してソートしたときの隣接個体の値である。混雑距離が大きい個体ほどパレートフロント上で孤立しており、優先的に次世代に残される。

🧑‍🎓

NSGA-IIの結果って、1つの最適解じゃなくてパレートフロント全体が出てくるんですよね? エンジニアはそこからどう設計を選ぶんですか?


🎓

いいポイントだ。パレートフロント上の解はすべて「どちらの目的も同時に改善できない」最適解だから、最終的な選択はエンジニアの判断になる。例えば「重量は5%増えてもいいけど、最大変位は10mm以下にしたい」みたいな優先度で絞り込む。このプロセスをMCDM(多基準意思決定)と呼ぶこともある。可視化ツールでパレートフロントを眺めて「このへんの解がバランスいいな」と選ぶのが、現場の典型的なワークフローだ。


トポロジー最適化との連携

🧑‍🎓

トポロジー最適化って密度法(SIMP法)のイメージが強いんですけど、GAとどう組み合わせるんですか?


🎓

SIMP法は勾配ベースで単一目的・連続的な密度変数を扱うのが得意だけど、多目的だったり離散的な材料選択(アルミ or CFRP or チタン)を含むと苦しくなる。そういうときにGAの出番だ。各要素の密度や材料をビット列で符号化して、GAで探索する。


🧑‍🎓

例えばどんな実例がありますか?


🎓

自動車ボディのBピラー設計がわかりやすい。重量最小化側面衝突時の侵入量最小化という2目的をNSGA-IIで最適化し、板厚分布とリブ配置を同時に決める。先にSIMP法で大まかなトポロジーの方向性を出し、その後GAでサイズ最適化や材料選択を行う「2段階アプローチ」が実務では多い。アディティブマニュファクチャリング(3Dプリント)の普及で、GAが出す自由な形状を実際に製造できるケースも増えてきたよ。


サロゲートモデルとの併用

🧑‍🎓

さっきサロゲートモデルの話が出ましたけど、具体的にはどういう仕組みですか?


🎓

サロゲートモデルは「安価な代理関数」だ。最もよく使われるのはクリギング(Gaussian Process回帰)RBF(Radial Basis Function)ネットワークだね。最初に少数の実FEAサンプル(DOEで50〜100点くらい)で応答曲面を作り、GAの評価をサロゲートで代替する。有望な解が見つかったら実FEAで検証し、その結果でサロゲートを更新する——このサイクルを回すのがEGO(Efficient Global Optimization)の考え方だ。


🧑‍🎓

サロゲートの精度が悪いと、GAが間違った方向に進化しちゃいませんか?


🎓

そのリスクはある。だからクリギングの場合は予測値だけでなく不確かさ(予測分散)も使って、「予測値が良い領域」と「不確かさが大きい(まだ探索していない)領域」をバランスよく探索するExpected Improvement(EI)という獲得関数を使う。実務では最終候補をかならず実FEAで検証するから、サロゲートの誤差が致命的になることは少ないよ。


関連用語

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

遺伝的アルゴリズム活用の課題を教えてください

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

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