1. このページの目的
このページでは、 外部計算エンジンを評価関数として用いる最適化 を安全かつ現実的に実装するための指針をまとめます。
対象は次のようなケースです。
- TCAD(Silvaco ATLAS 等)
- Fortran / C / C++ の実行ファイル
- DLL / SO を介した高速計算
- 実験装置の制御・測定
2. 外部エンジン最適化の前提条件
外部エンジンを用いた最適化では、 内部モデルとは全く異なる前提 を受け入れる必要があります。
- 評価は遅い
- 失敗することがある
- ノイズを含む
- 再現性が完全ではない
これらを例外ではなく常態 として扱うことが重要です。
3. 推奨されるファイル分離
外部エンジン連携では、 必ず lib 層を分離 してください。
- optimize_xxx.py:解析シナリオ
- optimize_xxx_mf.py:評価関数抽象化
- optimize_xxx_lib.py:外部 I/O 専用
mf 層に直接ファイル操作や subprocess を書くと、 可読性・保守性が急激に低下します。
4. 外部エンジン実行の基本フロー
optimize_flex では、 外部エンジン実行を次の流れで扱います。
- パラメータ → 入力ファイル生成
- 外部エンジン実行
- ログファイル生成
- 結果抽出・補間
- 評価値計算
これらはすべて 1 回の評価関数呼び出しの内部 で完結します。
5. 失敗時の扱い
外部エンジンは、次の理由で失敗します。
- 収束しない
- 入力が物理的に不正
- ライセンス制限
- ファイル競合
失敗時に最適化を止めてはいけません。
optimize_flex では、
- 例外を捕捉
- 大きなペナルティ値を返す
ことで、探索を継続します。
6. 並列実行と排他制御
外部エンジンは、
- 同時実行できない
- 作業ディレクトリを共有する
ことが多くあります。
そのため、
- ワークディレクトリを評価ごとに分離
- ファイルロックの導入
- 同時評価数の制限
を必ず検討してください。
7. 評価コストを下げる工夫
外部エンジン最適化では、 評価回数を減らすことが最重要です。
- 履歴のキャッシュ
- 粗い条件での事前探索
- 線形パラメータの分離
- サロゲート最適化
これらを組み合わせることで、 実用的な計算時間に収めることができます。
8. サロゲート最適化の導入タイミング
次の条件に当てはまる場合、 tkmlr の導入を強く推奨します。
- 1 回の評価が数十秒以上
- 探索回数が 100 回を超える
- パラメータ数が多い
サロゲートは、 外部エンジンを置き換えるのではなく補助する 役割で使います。
9. よくある失敗例
- mf 層が巨大化する
- 例外をそのまま投げる
- 途中経過を保存しない
- いきなり本番条件で回す
これらはすべて、 後から修正が困難 になります。
10. まとめ
外部計算エンジン最適化は、
- 難しい
- 時間がかかる
- 失敗しやすい
という性質を持ちます。
optimize_flex は、 それらを前提として受け入れる設計 を採用することで、
- 壊れにくい
- 拡張しやすい
- 研究現場で使える
最適化基盤を提供します。
次のページでは、 ユーザー視点での 共通実行フロー(plot / sim / fit / scan) を整理します。