optimize_flex の設計とアーキテクチャ

1. アーキテクチャ設計の基本方針

optimize_flex のアーキテクチャは、単なるコード整理ではなく、 研究現場で実際に起こる混乱を防ぐための設計として構築されています。

設計の中心にある方針は、次の 3 点です。

2. optimize_flex の多層構造

optimize_flex は、明確な責務分離を行った多層構造を持ちます。

この分離により、ある層を変更しても他の層が壊れにくい構造になっています。

3. アプリケーション層(optimize_xxx.py)

アプリケーション層は、最適化そのものではなく、 「研究シナリオの制御」を担当します。

この層には、

は一切書きません。

そのため optimize_mup / optimize_peakfit / optimize_ATLAS は、 見た目が似ていても中身のモデルは全く異なる という状態が成立します。

4. mf 層(optimize_xxx_mf.py)の役割

mf 層は、optimize_flex の中核となる層です。

この層の役割は一言で言えば、

「どんなモデルであっても、最適化可能な形に変換する」

ことです。

4.1 モデルの所在を吸収する

mf 層は、次の違いをすべて内部で吸収します。

tkFit や tkoptimize_flex は、 それらの違いを一切知りません。

4.2 評価関数の正体

mf 層が提供するのは、最終的に次の形です。

f(x) → y_list

その内部で、

といった複雑な処理が行われます。

しかし最適化アルゴリズムから見れば、 それは「1 回の評価」に過ぎません。

5. lib 層(optimize_xxx_lib.py)

lib 層は、mf 層が肥大化するのを防ぐために存在します。

この層には、

といった、 外部世界に強く依存するコード だけを書きます。

その結果、

という構造が成立します。

6. 最適化アルゴリズム層(tkFit_mxy_flex)

tkFit_mxy_flex は、 最適化アルゴリズムそのもの を実装する層です。

これらはすべて、 同一の minimize() インターフェース で呼び出されます。

評価関数が遅い・ノイジー・非連続であっても、 アルゴリズム側はそれを前提として動作します。

7. 最適化制御層(tkoptimize_flex)

tkoptimize_flex は、

を担当します。

この層があることで、

という「研究コードとして重要な性質」が保証されます。

8. 機械学習・サロゲート層(tkmlr)

tkmlr は、optimize_flex における 知的探索を担当する層 です。

外部エンジンのように評価コストが高い場合、

することで、探索効率を大きく向上させます。

重要なのは、 tkmlr は必須ではない という点です。

必要になったときにだけ、 自然に組み込める 設計になっています。

9. 3 種類の optimize_xxx が共存できる理由

optimize_mup、optimize_peakfit、optimize_ATLAS は、

がすべて異なります。

それでも同一フレームワークで動作するのは、

「違いはすべて mf 層以下で吸収されている」

からです。

10. まとめ

optimize_flex のアーキテクチャは、

という特徴を持ちます。

次のページでは、 このアーキテクチャの上で動作する 各個別最適化プログラムの具体像 を解説します。