1. なぜ共通フローが必要か
optimize_flex では、最適化を 1 回のコマンドで完結させることを推奨していません。
理由は明確です。
- モデルが間違っている可能性がある
- 初期値が物理的に不適切なことがある
- 評価関数が壊れていることがある
そのため optimize_flex では、 解析を段階的に進める共通フロー を採用しています。
2. 全体フローの概要
すべての optimize_xxx プログラムは、 概ね次の流れで使用します。
- plot:データ・モデルの確認
- sim:評価関数の単体検証
- lfit:線形パラメータの安定化
- fit:非線形最適化
- scan:誤差評価・妥当性確認
この順番には意味があります。
3. plot ― データと前提条件の確認
plot モードは、 最も重要なステップ です。
ここでは、
- 入力データの形状
- 外れ値・欠損値
- 単位・スケール
を確認します。
この段階で違和感があれば、最適化を始めてはいけません。
4. sim ― 評価関数の単体検証
sim モードでは、
- 初期パラメータ
- 代表的なパラメータ
を用いて、 評価関数が正しく動作するか を確認します。
特に外部エンジン最適化では、
- 入力ファイル生成
- 実行
- ログ解析
がすべてここで検証されます。
5. lfit ― 線形パラメータの安定化
多くの問題では、
- 強度
- 係数
- オフセット
といったパラメータが 線形に分離可能 です。
lfit モードでは、
- 非線形パラメータを固定
- 線形最小二乗を解く
ことで、 最適化全体の安定性を高めます。
lfit を飛ばす理由がない限り、必ず実行してください。
6. fit ― 非線形最適化
fit モードでは、
- SIMPLEX
- GA / Swarm
- SciPy minimize
などのアルゴリズムを用いて 非線形パラメータを最適化します。
ここで重要なのは、
- 一度で最良解を求めようとしない
- 途中経過を必ず確認する
ことです。
7. scan ― 誤差評価と妥当性確認
scan モードは、 最適化の「最後」ではありません。
ここでは、
- 各パラメータを固定
- 他を再最適化
することで、
- 誤差分布の形
- 相関の強さ
- 境界制約の影響
を可視化します。
scan の結果を見て、
- モデルを見直す
- パラメータ範囲を変更する
ことは、自然な作業です。
8. よくある間違った使い方
- いきなり fit を実行する
- plot / sim を省略する
- scan を誤差棒計算と誤解する
これらはすべて、 不安定・再現不能な結果 につながります。
9. optimize_xxx 間での共通性
この共通フローは、
- optimize_mup
- optimize_peakfit
- optimize_ATLAS
すべてに共通します。
モデルの性質が異なっても、 解析者の思考プロセスは同じ です。
10. まとめ
optimize_flex における最適化は、
- 自動処理ではなく
- 段階的な仮説検証プロセス
です。
この共通フローを守ることで、
- 結果の信頼性
- 再現性
- 理解可能性
が大きく向上します。
次のページでは、 このフローの中で使われる 誤差評価(尤度スキャン)の考え方 を詳しく解説します。