🌐 JP | 🇬🇧 EN

第1章: NIMOとは?

実験自動化の新時代

📖 読了時間: 15-20分 📊 難易度: 初級 💻 コード例: 4 📝 演習: 2

学習目標

1.1 材料探索の課題

材料科学研究は根本的な課題に直面しています:探索空間が膨大であるということです。5つの元素を含む新しい合金の開発を考えてみましょう。各元素が100種類の異なる組成レベルを持てる場合、可能な組み合わせの総数は:

$$N = 100^5 = 10^{10} \text{ (100億通り)}$$

各実験にわずか1時間かかるとしても、すべての組み合わせをテストするには100万年以上必要です!これは組み合わせ爆発問題として知られています。

組み合わせ爆発(Combinatorial Explosion)

変数の数が増加するにつれて、可能な組み合わせが急速に増大すること。材料科学では、これにより網羅的な探索が事実上不可能になります。

従来のアプローチとその限界

アプローチ 方法 限界
ランダム探索 ランダムな組成をテスト 非効率、最適領域を見逃す可能性
グリッド探索 系統的なグリッド値をテスト 次元が増えるとスケールしにくい
専門家の直感 研究者の経験に依存 バイアスあり、人間の知識に限定
試行錯誤 順次手動実験 遅い、系統的な最適化なし

1.2 閉ループ自動化とは?

閉ループ自動化は、AIアルゴリズムと実験システム間にインテリジェントなフィードバックサイクルを作成することで、これらの課題に対処します。重要な洞察は:すべてをテストする代わりに、AIに最も有望な候補へと導いてもらうということです。

graph TB A[1. 探索空間を定義] --> B[2. AIが実験を提案] B --> C[3. ロボットが実験を実行] C --> D[4. 結果を分析] D --> E{最適解発見?} E -->|いいえ| B E -->|はい| F[完了!] style A fill:#f8f9fa style B fill:#667eea,color:#fff style C fill:#11998e,color:#fff style D fill:#f093fb,color:#fff style F fill:#28a745,color:#fff

このアプローチにはいくつかの利点があります:

1.3 NIMOの紹介

NIMO(旧称: NIMS-OS: NIMS Orchestration System)は、日本の国立研究開発法人物質・材料研究機構(NIMS)によって開発されたPythonライブラリです。閉ループ材料探索を実装するための完全なフレームワークを提供します。

NIMOで何ができる?

  • 11種類のAIアルゴリズムを使用して最適な実験候補を選択
  • 3種類のロボット実験システムとインターフェース
  • リアルタイムで最適化の進捗を追跡・可視化
  • 単目的と多目的の両方の最適化に対応

NIMOのモジュラーアーキテクチャ

graph LR subgraph AI[AIモジュール] A1[PHYSBO
ベイズ最適化] A2[BLOX
ランダムフォレスト] A3[PDC
相図構築] A4[RE
ランダム] end subgraph Robot[ロボットモジュール] R1[STAN
標準] R2[NAREE
電気化学] R3[COMBAT
カスタム] end subgraph Viz[可視化] V1[履歴プロット] V2[分布図] V3[相図] end AI --> Core[NIMOコア] Robot --> Core Core --> Viz style Core fill:#667eea,color:#fff

1.4 NIMOのインストール

NIMOはpipで簡単にインストールできます:

pipでのインストール
# PyPIからNIMOをインストール(推奨)
pip install nimo

# インストールの確認
python -c "import nimo; print('NIMOが正常にインストールされました!')"

必要条件

  • Python >= 3.6
  • numpy < 2(重要なバージョン制約)
  • physbo >= 2.0
  • scikit-learn, scipy, matplotlib

開発やカスタム修正の場合は、ソースからインストールできます:

ソースからのインストール
# リポジトリをクローン
git clone https://github.com/NIMS-DA/nimo

# ディレクトリに移動
cd nimo

# 開発モードでインストール
pip install -e .

1.5 最初のNIMOコード

NIMOが動作していることを確認するために、利用可能なモジュールを調べてみましょう:

コード例1: NIMOモジュールの探索
import nimo

# 利用可能な選択メソッドを確認
print("NIMOは以下の最適化手法を提供します:")
methods = ["RE", "PHYSBO", "BLOX", "PDC", "SLESA", "PTR", "BOMP", "ES", "COMBI", "RSVM"]
for method in methods:
    print(f"  - {method}")

# 可視化ツールを確認
print("\n可視化ツール:")
print("  - nimo.visualization.plot_history")
print("  - nimo.visualization.plot_distribution")
print("  - nimo.visualization.plot_phase_diagram")

出力:

NIMOは以下の最適化手法を提供します:
  - RE
  - PHYSBO
  - BLOX
  - PDC
  - SLESA
  - PTR
  - BOMP
  - ES
  - COMBI
  - RSVM

可視化ツール:
  - nimo.visualization.plot_history
  - nimo.visualization.plot_distribution
  - nimo.visualization.plot_phase_diagram

1.6 簡単な例:ランダム選択

簡単なランダム選択でNIMOの動作を見てみましょう:

コード例2: NIMOによるランダム選択
import nimo
import pandas as pd

# シンプルな候補ファイルを作成
# 形式: 記述子列 + 目的関数列(未テストはNaN)
candidates_data = {
    'x1': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
    'x2': [1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1],
    'objective': [float('nan')] * 10  # すべて未テスト
}
df = pd.DataFrame(candidates_data)
df.to_csv('candidates.csv', index=False)

# NIMOを使用してランダムに3つの候補を選択
nimo.selection(
    method="RE",           # Random Exploration(ランダム探索)
    input_file="candidates.csv",
    output_file="proposals.csv",
    num_objectives=1,
    num_proposals=3,
    re_seed=42             # 再現性のため
)

# 提案を確認
proposals = pd.read_csv('proposals.csv')
print("実験用に選択された候補:")
print(proposals)

出力:

実験用に選択された候補:
    x1   x2  objective
0  0.7  0.4        NaN
1  0.2  0.9        NaN
2  0.5  0.6        NaN

演習

演習1: インストール確認

システムにNIMOをインストールし、以下のコードを実行してすべてが動作することを確認してください:

import nimo
import physbo
import numpy as np
print(f"NIMO準備完了!NumPyバージョン: {np.__version__}")

エラーが発生した場合は、numpyのバージョンが2.0未満であることを確認してください。

演習2: 独自の候補を作成

20行、3つの記述子列(x1, x2, x3)を持つ候補CSVファイルを作成してください。NIMOのランダム選択を使用して5つの候補を選んでください。

まとめ

免責事項

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