🌐 JP | 🇬🇧 EN

第3章: AI最適化アルゴリズム

NIMOの手法を深掘り

📖 読了時間: 25-30分 📊 難易度: 初級-中級 💻 コード例: 6 📝 演習: 2

学習目標

3.1 探索と活用のトレードオフ

具体的なアルゴリズムに入る前に、最適化における根本的な課題を理解しましょう:

graph LR subgraph Exploration[探索 - Exploration] E1[新しい領域を試す] E2[未知を発見] E3[局所解を回避] end subgraph Exploitation[活用 - Exploitation] X1[既知の良い領域に集中] X2[最良解を精緻化] X3[現在の知識を最大化] end Exploration <-->|バランス| Exploitation style Exploration fill:#667eea,color:#fff style Exploitation fill:#11998e,color:#fff

探索 vs 活用

探索(Exploration): 情報が少ない領域をテストし、未探索の場所でより良い解を見つける可能性を追求すること。

活用(Exploitation): すでに良い結果が得られている領域に焦点を当て、最良の解を精緻化すること。

優れた最適化アルゴリズムは、両方の戦略を自動的にバランスさせます。

3.2 ベイズ最適化(PHYSBO)

PHYSBOはNIMOのフラッグシップアルゴリズムで、ベイズ最適化の原理に基づいています。ほとんどの材料最適化問題で推奨される選択肢です。

ベイズ最適化の仕組み

アルゴリズムは3つのステップのプロセスに従います:

  1. 代理モデルを構築: ガウス過程(GP)を使用して、既存のデータに基づいて目的関数をモデル化
  2. 獲得関数を計算: 次の実験が結果を改善する可能性が最も高い場所を計算
  3. 次の候補を選択: 獲得関数を最大化する点を選択
graph TB A[既存データ] --> B[ガウス過程モデル] B --> C[平均と分散を予測] C --> D[獲得関数] D --> E[次の候補を選択] E --> F[実験を実行] F --> A style B fill:#667eea,color:#fff style D fill:#f093fb,color:#fff style E fill:#28a745,color:#fff

NIMOでのPHYSBO

コード例1: 基本的なPHYSBOの使用
import nimo

# 基本的なベイズ最適化
nimo.selection(
    method="PHYSBO",
    input_file="candidates.csv",
    output_file="proposals.csv",
    num_objectives=1,
    num_proposals=1
)
コード例2: 詳細オプション付きPHYSBO
import nimo

# 設定付きベイズ最適化
nimo.selection(
    method="PHYSBO",
    input_file="candidates.csv",
    output_file="proposals.csv",
    num_objectives=1,
    num_proposals=3,
    physbo_score="EI",     # 獲得関数: EI, PI, または TS
    physbo_seed=42         # 再現性のためのランダムシード
)

獲得関数

PHYSBOは3つの獲得関数をサポートしています:

関数 正式名称 戦略 使用場面
EI Expected Improvement バランス型 デフォルトの選択、ほとんどの状況
PI Probability of Improvement 活用重視 最適に近い場合、精緻化が必要な場合
TS Thompson Sampling 探索重視 多峰性関数、並列実験

推奨: Expected Improvement (EI)

ほとんどの材料科学問題では、EIが探索と活用の最良のバランスを提供します。最適化の地形に自然に適応します。

3.3 ランダム探索(RE)

REはシンプルですが不可欠なアルゴリズムです:未テストの候補からランダムに選択します。

コード例3: ランダム探索
import nimo

# 初期データ収集のためのランダム選択
nimo.selection(
    method="RE",
    input_file="candidates.csv",
    output_file="proposals.csv",
    num_objectives=1,
    num_proposals=5,
    re_seed=42  # 再現性のため
)

REを使用するタイミング

典型的なワークフロー

サイクル1: RE(5-10個のランダムサンプルを収集)
サイクル2以降: PHYSBO(データに基づくインテリジェントな選択)

3.4 BLOX: ランダムフォレストアプローチ

BLOXはガウス過程の代わりにランダムフォレストモデルを使用します。これにより、高次元問題で高速に動作します。

コード例4: BLOXの使用
import nimo

# ランダムフォレストベースの最適化
nimo.selection(
    method="BLOX",
    input_file="candidates.csv",
    output_file="proposals.csv",
    num_objectives=1,
    num_proposals=3
)

BLOX vs PHYSBO の比較

観点 PHYSBO BLOX
モデル ガウス過程 ランダムフォレスト
不確実性 よく較正されている 近似的
速度(低次元) 高速 高速
速度(高次元) 低速 高速
最適な用途 ≤20記述子 >20記述子

3.5 相図構築(PDC)

PDCは、異なる相や領域をマッピングする必要がある材料科学問題のために特別に設計されています。

コード例5: PDCの使用
import nimo

# 相図構築
nimo.selection(
    method="PDC",
    input_file="candidates.csv",
    output_file="proposals.csv",
    num_objectives=1,
    num_proposals=3
)

PDCを使用するタイミング

3.6 多目的アルゴリズム

複数の目的を同時に最適化する場合(例:強度を最大化しつつコストを最小化)、これらのアルゴリズムを使用します:

PTR: パレートベースのトンプソンランキング

コード例6: PTRによる多目的最適化
import nimo

# 多目的最適化(2つの目的関数)
nimo.selection(
    method="PTR",
    input_file="candidates.csv",
    output_file="proposals.csv",
    num_objectives=2,  # 2つの特性を最適化
    num_proposals=3
)

パレート最適性

ある解がパレート最適であるとは、他の目的を悪化させずにはどの目的も改善できない状態を指します。多目的アルゴリズムは、すべてのパレート最適解の集合(パレートフロント)を見つけます。

3.7 アルゴリズム選択ガイド

適切なアルゴリズムを選択するための決定木を使用してください:

graph TD A[開始] --> B{最初のサイクル?} B -->|はい| C[REを使用] B -->|いいえ| D{多目的?} D -->|はい| E{3目的以上?} D -->|いいえ| F{20記述子以上?} E -->|はい| G[PTRまたはBOMPを使用] E -->|いいえ| H[PTRを使用] F -->|はい| I[BLOXを使用] F -->|いいえ| J{相マッピング?} J -->|はい| K[PDCを使用] J -->|いいえ| L[PHYSBOを使用] style C fill:#667eea,color:#fff style G fill:#11998e,color:#fff style H fill:#11998e,color:#fff style I fill:#f093fb,color:#fff style K fill:#28a745,color:#fff style L fill:#667eea,color:#fff

クイックリファレンス表

シナリオ 推奨アルゴリズム 理由
最初の実験 RE 初期ランダムデータが必要
一般的な最適化 PHYSBO 最も優れた全体的性能
高次元(>20) BLOX 多くの特徴量で高速
相マッピング PDC 相図用に設計
多目的 PTR パレート最適化
高速探索 SLESA 高速な候補選択

3.8 アルゴリズム固有のパラメータ

各アルゴリズムには調整可能な固有のパラメータがあります:

PHYSBOパラメータ

REパラメータ

BLOXパラメータ

演習

演習1: アルゴリズム選択

各シナリオに対して、最も適切なアルゴリズムを選択してください:

  1. 事前データなしで新しい最適化を開始する(10個の記述子)
  2. 硬度と延性を同時に最適化したい
  3. 三元合金系の相図をマッピングしている
  4. 50個の記述子があり、高速な最適化が必要

演習2: PHYSBOの設定

以下を行うNIMOコードを書いてください:

  1. トンプソンサンプリング獲得関数でPHYSBOを使用
  2. 各サイクルで5つの提案を選択
  3. 再現性のためにランダムシード123を設定

まとめ

免責事項

本コンテンツは教育目的で提供されています。NIMOはNIMSによって開発・保守されています。