1. optimize_flex とは何か
optimize_flex は、物理モデル・数値モデル・外部計算エンジンを対象とした 研究用途向けの汎用最適化フレームワークです。
最大の特徴は、 「評価関数がどこにあり、どのように計算されるか」を一切問わない という点にあります。
評価関数は次のいずれであっても構いません。
- Python 内部で計算される数式モデル
- ピーク数が不定なデータ分解モデル
- TCAD(ATLAS 等)や Fortran / C プログラム
- 実験装置の制御と測定結果
optimize_flex は、それらをすべて 「単なる y = f(x) の評価」として扱います。
2. なぜ optimize_flex が必要か
研究現場における最適化問題は、教科書的な数値最適化とは大きく異なります。
- 評価関数は遅い
- 評価関数はノイジー
- 勾配は存在しない、または信頼できない
- 途中で計算が失敗することがある
- パラメータ数が途中で変わることもある
多くの汎用最適化ライブラリは、これらの条件を暗黙に排除しています。
optimize_flex は、これらを 「研究では当然起こる前提条件」 として正面から受け止めるために設計されました。
3. optimize_flex の設計思想
3.1 評価関数を信頼しすぎない
optimize_flex では、評価関数はブラックボックスであり、 失敗する可能性があるものとして扱われます。
そのため、
- 例外発生時のペナルティ付与
- 途中停止・再開
- 評価結果のキャッシュ
が最初から組み込まれています。
3.2 最適化アルゴリズムに依存しない
SIMPLEX、GA、Swarm、REMC、SciPy の各種手法、 さらにはサロゲート最適化まで、
すべて同一のインターフェースで切り替え可能 です。
モデル側は「どのアルゴリズムが使われているか」を一切知りません。
3.3 人間が途中で判断できる
optimize_flex は「完全自動」を目指していません。
plot / sim / lfit / fit / scan といった段階的な mode を用意し、
- 初期条件の妥当性確認
- 物理的に不自然な解の排除
- 探索戦略の切り替え
を人間が介入しながら進めることを前提にしています。
4. optimize_flex が得意な問題
- 非線形・非凸・多峰性のある最適化
- 評価に数秒〜数分かかるモデル
- 可変パラメータ数のフィッティング
- TCAD・実験データ同定
- 誤差が正規分布に従わない問題
特に、 「共分散行列では誤差評価が破綻する問題」 に強いことが、大きな特徴です。
5. 尤度に基づく誤差評価
optimize_flex では、最小化している評価関数を
f(x) ≈ −2 log L(x)
と解釈します。
これにより、
- 非対称な誤差
- 裾の重い分布
- 物理的制約による歪み
を、パラメータスキャンによって直接可視化できます。
6. フレームワークの全体像
optimize_flex は次の要素から構成されます。
- optimize_xxx.py(アプリケーション層)
- optimize_xxx_mf.py(モデル吸収層)
- optimize_xxx_lib.py(外部世界との翻訳層)
- tkFit_mxy_flex(最適化アルゴリズム)
- tkoptimize_flex(制御・履歴管理)
- tkmlr(機械学習・サロゲート)
この構造の詳細は、次の 設計とアーキテクチャ で解説します。
7. まとめ
optimize_flex は、
- 数値最適化ライブラリ
- 物理モデリングツール
- 実験データ同定基盤
の境界に位置する、 研究現場のための実用的フレームワーク です。
次のページでは、この思想を支える 具体的な設計とレイヤ構造 について詳しく解説します。