# optimize_ATLAS.py 使い方マニュアル  
― 外部計算エンジン（ATLAS）連携型 最適化プログラム ―

---

## 1. はじめに

本マニュアルは、  
`tkoptimize_flex` フレームワークを用いた  
**外部計算エンジン連携型最適化プログラム `optimize_ATLAS.py`**  
の使い方をまとめたものです。

本プログラムは主に、

- Silvaco ATLAS などの TCAD
- 外部 exe / dll / so
- 計算コストが高いブラックボックス評価関数

を用いた **パラメータ同定・モデルフィッティング**を目的としています。

---

## 2. optimize_ATLAS.py の位置づけ

---

### 2.1 フレームワーク内での役割

optimize_ATLAS.py は、

- 最適化シナリオ（mode）を制御
- 外部計算エンジンを評価関数として使用
- optimize_ATLAS_mf.py を介して  
  tkoptimize_flex / tkFit_mxy_flex を起動

する **アプリケーション層**に相当します。

---

### 2.2 他プログラムとの違い

---

| プログラム | 評価関数 | 特徴 |
|---|---|---|
| optimize_mup.py | Python 内部 | 固定次元・物理モデル |
| optimize_peakfit.py | Python 内部 | 可変次元・データ駆動 |
| **optimize_ATLAS.py** | **外部エンジン** | **TCAD / 高コスト計算** |

---

## 3. 必要なファイル構成

---

optimize_ATLAS.py を使用するには、以下が必要です。

---

- optimize_ATLAS.py  
  メインプログラム

- optimize_ATLAS_mf.py  
  外部実行対応 mf

- optimize_ATLAS_lib.py  
  ATLAS 固有 I/O・解析ライブラリ

- *_fit_config.xlsx  
  フィッティングパラメータ定義

- *_arg_config.xlsx  
  起動時引数の既定値

- ATLAS 入力テンプレート  
  （deck / cmd / control ファイル）

- 実測データファイル  
  （xlsx / csv）

---

## 4. 基本的な起動形式

---

python optimize_ATLAS.py [mode] [options]

---

mode によって、処理内容が切り替わります。

---

## 5. Step 1  
## 入力データの確認（plot モード）

---

### 目的

- 実測データが正しく読めるか確認
- Vg, Vd, T の範囲・単位確認

---

### 起動例

---

python optimize_ATLAS.py plot  
--infile idvg_measured.xlsx  
--xlabel Vg  
--ylabel Id  

---

### 確認事項

- データが意図した軸で表示される
- 欠損・異常値がない
- 単位系が ATLAS 設定と一致している

---

## 6. Step 2  
## 最適化用入力データ生成（make_input_data モード）

---

### 目的

- 実測データと ATLAS 計算条件を照合
- 最適化用 infile を生成

---

### 起動例

---

python optimize_ATLAS.py make_input_data  
--infile idvg_measured.xlsx  
--outfile atlas_opt_input.xlsx  

---

### 出力

- 最適化用に整理された入力データ
- 初期 obs / cal 比較用データ

---

## 7. Step 3  
## 外部エンジン単体動作確認（sim モード）

---

### 目的

- 最適化を行わず
- 現在のパラメータで ATLAS を実行
- 出力ログを確認

---

### 起動例

---

python optimize_ATLAS.py sim  
--infile atlas_opt_input.xlsx  
--method simplex  

---

### この段階で確認すること

- ATLAS が正常終了する
- ログファイルが生成される
- Id–Vg カーブが妥当

---

## 8. Step 4  
## 線形パラメータの最適化（lfit モード）

---

### 目的

- 線形パラメータ（prefactor 等）を安定化
- 非線形最適化の準備

---

### 起動例

---

python optimize_ATLAS.py lfit  
--infile atlas_opt_input.xlsx  

---

### 内部処理

- 非線形パラメータ固定
- 線形最小二乗で係数を更新

---

## 9. Step 5  
## 非線形最適化（fit モード）

---

### 目的

- 外部エンジンを評価関数として
- 全パラメータを最適化

---

### 起動例（独自 SIMPLEX）

---

python optimize_ATLAS.py fit  
--infile atlas_opt_input.xlsx  
--method simplex  
--nmaxiter 200  
--tol 1.0e-5  

---

### 多峰性が疑われる場合（GA）

---

python optimize_ATLAS.py fit  
--infile atlas_opt_input.xlsx  
--method ga  

---

### 注意点

- 実行時間が長い
- 履歴（history.xlsx）を必ず確認

---

## 10. Step 6  
## パラメータスキャン・尤度評価（scan モード）

---

### 目的

- パラメータ誤差分布を評価
- 共分散行列に依らない誤差解析

---

### 起動例

---

python optimize_ATLAS.py scan  
--infile atlas_opt_input.xlsx  
--scan_param Nt  
--scan_min 1.0e11  
--scan_max 1.0e13  
--scan_n 20  

---

### 解釈

---

評価関数は、

$$
f(\mathbf{x}) \approx -2 \log \mathcal{L}(\mathbf{x})
$$

と解釈できるため、

$$
\Delta f(x_i)
=
f(x_i) - f_{\min}
$$

を用いて誤差範囲を評価します。

---

## 11. Step 7  
## サロゲート最適化（mlr / so モード）

---

### 目的

- ATLAS 実行回数を削減
- 高次元・高コスト最適化を効率化

---

### 起動例（GPR ベース）

---

python optimize_ATLAS.py fit  
--infile atlas_opt_input.xlsx  
--method so:gpr  

---

### 注意

- 初期サンプル数が重要
- surrogate の信頼範囲を常に確認

---

## 12. 推奨される実行順序

---

1. plot  
   → 実測データ確認  

2. make_input_data  
   → 最適化用入力生成  

3. sim  
   → ATLAS 単体確認  

4. lfit  
   → 線形パラメータ安定化  

5. fit  
   → 非線形最適化  

6. scan  
   → 尤度による誤差評価  

7. so:xxx  
   → 高コスト時の高速化  

---

## 13. 実践的な注意点

---

- 外部エンジンは「失敗する前提」で扱う
- ログは必ず保存
- 実行途中で止められる設定にする
- surrogate を早期に検討する

---

## 14. おわりに

---

optimize_ATLAS.py は、

- 外部エンジン
- ブラックボックス評価関数
- 高計算コスト問題

を **同一の最適化思想で扱うための実用ツール**です。

optimize_mup / optimize_peakfit と併せて用いることで、  
`optimize_flex` フレームワークの適用範囲が大きく広がります。

本マニュアルが、  
外部計算エンジンを用いた最適化作業の  
安全で再現性の高い運用に役立つことを願っています。

---
