optimize_mup_mf.py 技術ドキュメント
プログラムの動作
optimize_mup_mf.py は、半導体におけるキャリア移動度 (mobility) の実験データに対して、物理モデル(Piモデルを想定)を用いた多変数非線形フィッティングを実行するためのPythonスクリプトです。このプログラムは、tklib フレームワークの一部として設計されており、特に tklib.tksci.tkoptimize_flex と連携して動作します。
主な機能:
設定ファイルの読み込み: プログラムの実行設定(ファイルパス、フィッティング条件、プロット設定など)を外部ファイルから読み込みます。
フィッティングパラメータの管理: フィッティング対象となるモデルパラメータの初期値、上限・下限、最適化IDなどの情報を設定ファイルから読み込み、管理します。
入力データの読み込み: 実測されたキャリア移動度データ(温度、キャリア濃度、実測移動度)を含むExcelファイルを読み込みます。
モデル評価:
mobility_pi_model.pyモジュールで定義された物理モデルに基づき、与えられたパラメータセットでキャリア移動度を計算します。非線形フィッティング:
tklib.tksci.tkFit_mxyクラスを利用し、scipy.optimizeの各種アルゴリズム(例: Nelder-Mead、Levenberg-Marquardt、least_squares など)を用いて、実測データとモデル予測値の残差を最小化するようにモデルパラメータを最適化します。結果の保存とプロット: 最適化されたパラメータ、フィッティング結果を含むデータファイル、フィッティング履歴、および結果のグラフを生成・保存します。
解決する課題:
このプログラムは、半導体のキャリア移動度が温度やキャリア濃度によってどのように変化するかを、物理モデルに基づいて定量的に記述するモデルを構築することを目的としています。実測データにモデルをフィッティングすることで、材料の特性やデバイスの性能を予測・解析するための信頼性の高いモデルパラメータを得ることができます。
原理
このプログラムは、mobility_pi_model.py で定義された物理モデルと、数値最適化アルゴリズムを組み合わせて機能します。
1. モデル:
具体的な移動度モデルの数式は mobility_pi_model.py に記述されていますが、一般的に半導体のキャリア移動度 \(\mu\) は、異なる散乱メカニズム(格子散乱、イオン化不純物散乱、界面散乱など)による移動度 \(\mu_i\) の組み合わせとして表現されます。これらのメカニズムはMatthiessenの法則に従って合成されることが多く、その逆数の和として表されます。
ここで:
\(\mu_{model}\) はモデルによって予測される全移動度。
\(T\) は温度。
\(N\) はキャリア濃度。
\(\mathbf{p}\) はモデル全体のパラメータベクトル。
\(\mu_i(T, N, \mathbf{p}_i)\) は \(i\) 番目の散乱メカニズムによる移動度で、温度 \(T\)、キャリア濃度 \(N\)、および固有のパラメータ \(\mathbf{p}_i\) に依存します。
2. 最適化アルゴリズム: プログラムは、実測データ \(y_{obs}\) とモデル予測値 \(y_{model}(\mathbf{p})\) の間の誤差を最小化するパラメータベクトル \(\mathbf{p}\) を探索します。この目的は、以下の目的関数 \(S(\mathbf{p})\) を最小化することによって達成されます。
ここで:
\(M\) はデータ点の総数。
\(y_{obs,j}\) は \(j\) 番目のデータ点における実測移動度。
\(y_{model,j}(\mathbf{p})\) は \(j\) 番目のデータ点におけるモデル予測移動度。
\(w_j\) は \(j\) 番目のデータ点に適用される重み(通常は \(1\) または測定誤差の逆数)。
この最小化問題は、tklib.tksci.tkFit_mxy クラスによってラップされた scipy.optimize の様々な非線形最適化アルゴリズム(例: Nelder-Mead、Levenberg-Marquardt、Trust-Region Reflective アルゴリズムをベースとした least_squares など)によって解決されます。使用されるアルゴリズムは、設定ファイル (cfg.method) で指定されます。
必要な非標準ライブラリとインストール方法
このプログラムの実行には、以下のPython非標準ライブラリが必要です。
numpy: 数値計算
scipy: 科学計算、特に最適化と補間
pandas: データ構造とデータ解析ツール、特にExcelファイルの読み書き
matplotlib: グラフ描画
これらのライブラリは pip コマンドでインストールできます。
pip install numpy scipy pandas matplotlib
また、以下のカスタムライブラリとモジュールも必要です。
tklib: このプログラムが依存するフレームワーク。
mobility_pi_model.py: 移動度モデルの具体的な実装を含むモジュール。
tklib および mobility_pi_model.py のインストール/配置方法:
tklib は一般的なPyPIパッケージではない可能性が高いため、以下のいずれかの方法で利用可能にする必要があります。
ローカルでの配置:
tklibのソースコードがディレクトリとして存在する場合、このディレクトリをoptimize_mup_mf.pyと同じ階層、またはPythonの検索パス (PYTHONPATH) に含まれる場所に配置します。pipを使用したインストール(もし利用可能であれば): もしtklibがプライベートなPyPIリポジトリやGitリポジトリで提供されている場合、それぞれの指示に従ってインストールします(例:pip install tklibまたはpip install git+https://example.com/tklib.git)。
mobility_pi_model.py は、optimize_mup_mf.py と同じディレクトリに配置される必要があります。
必要な入力ファイル
このプログラムの実行には、以下の設定ファイルとデータファイルが必要です。
設定ファイル (例:
config.ini): プログラム全体の動作設定、ファイルパス、フィッティング条件などを定義するファイルです。tkParamsクラスがINI形式または類似のテキスト形式を読み込みます。主なセクションとキー:
[Preferences]mode: 実行モード(例:fit)。fplot: フィッティング後にプロットを生成するかどうか(True/False)。
[Files]infile: 入力データファイルのパス(例:data.xlsx)。outfile: 出力データファイルのパス(例:result.xlsx)。historyfile: フィッティング履歴を保存するファイルのパス(例:history.csv)。fitfile_template: 最適化されたフィッティングパラメータを保存するファイル名のテンプレート(例:{filebody}_optimized_params.csv)。{filebody}はinfileのファイル名部分に置き換えられます。
[Condition]method: フィッティングアルゴリズム(例:least_squares,nelder-mead)。tol: 許容誤差。nmaxiter: 最大イテレーション数。
[Data]sample: サンプル名。Tmin,Tmax,Nmin,Nmax: データフィルタリングのための温度およびキャリア濃度の最小・最大値。
config.iniの例:[Preferences] mode = fit fplot = True [Files] infile = data.xlsx outfile = result.xlsx historyfile = history.csv fitfile_template = {filebody}_optimized_params.csv [Condition] method = least_squares tol = 1e-8 nmaxiter = 1000 [Data] sample = MySample Tmin = 250 Tmax = 400
フィッティングパラメータ設定ファイル (例:
fit_params.csv): フィッティング対象となる各パラメータの初期値、最小値、最大値、最適化の可否などを定義するCSVファイルです。主なカラム:
varname: パラメータ名。value: 初期値。min: パラメータの最小値。max: パラメータの最大値。optid: 最適化に使用するかどうかを示すID。linid: 線形フィッティングに使用するかどうかを示すID。pk_scale: スケーリング因子。dx: 数値微分やシンプレックス構築のためのステップサイズ。kmin,kmax,kpenalty: ペナルティ関数の設定。
fit_params.csvの例:varname,value,min,max,optid,linid,pk_scale,dx,kmin,kmax,kpenalty mu_L0,1.0e+03,1.0e+02,1.0e+04,0,0,1.0,0.1,0.0,0.0,0.0 alpha,2.5,1.0,3.0,0,0,1.0,0.01,0.0,0.0,0.0 N_imp,1.0e+16,1.0e+15,1.0e+17,0,0,1.0,0.1,0.0,0.0,0.0
入力データファイル (例:
data.xlsx): 実測されたキャリア移動度データを含むExcelファイルです。必要なカラム:
T (K): 温度(ケルビン)。N (cm-3): キャリア濃度(\(cm^{-3}\))。mu(obs) (cm2/Vs): 実測移動度(\(cm^2/Vs\))。(オプションで
mu(sim)カラムが存在する場合もありますが、フィッティング時は上書きされます。)
data.xlsxの例:T (K)
N (cm-3)
mu(obs) (cm2/Vs)
300
1.0E+16
1250
300
5.0E+16
1100
350
1.0E+16
1000
350
5.0E+16
900
...
...
...
生成される出力ファイル
プログラムの実行後、以下のファイルが生成される可能性があります。
最適化されたフィッティングパラメータファイル (例:
data_optimized_params.csv):config.iniのfitfile_templateで指定された命名規則に従い、最適化されたモデルパラメータとその最終値が保存されるCSVファイルです。出力データファイル (例:
result.xlsx): 入力データdata.xlsxに、フィッティングによって計算されたモデル予測移動度 (mu(sim) (cm2/Vs)) が追加されたExcelファイルです。result.xlsxの例:T (K)
N (cm-3)
mu(obs) (cm2/Vs)
mu(sim) (cm2/Vs)
300
1.0E+16
1250
1245
300
5.0E+16
1100
1105
350
1.0E+16
1000
998
350
5.0E+16
900
902
...
...
...
...
履歴ファイル (例:
history.csv): フィッティングの各イテレーションにおけるパラメータ値、目的関数値、計算時間などの情報が記録されるCSVファイルです。フィッティングの収束挙動の診断に役立ちます。プロットファイル (例:
last_fit.png):config.iniでfplot = Trueが設定されている場合、フィッティング結果と実測データを比較したグラフが画像ファイルとして保存されます。
コマンドラインでの使用例 (Usage)
optimize_mup_mf.py は、tklib.tksci.tkoptimize_flex フレームワークのモジュールとして動作することを意図しています。そのため、通常は tkoptimize_flex のメインスクリプトを介して実行されます。
基本的な実行コマンドは以下の形式になります。
python -m tklib.tksci.tkoptimize_flex <script_name> [options]
ここで:
<script_name>: このスクリプトoptimize_mup_mf.pyを指定します。[options]: 以下の主要なコマンドライン引数を指定します。--config <config_file_path>: プログラム全体の設定ファイル(例:config.ini)のパスを指定します。--fitparam <fit_param_file_path>: フィッティングパラメータ設定ファイル(例:fit_params.csv)のパスを指定します。--infile <input_data_file_path>: 入力データファイル(例:data.xlsx)のパスを指定します。--outfile <output_data_file_path>: 出力データファイル(例:result.xlsx)のパスを指定します。--fplot: フィッティング結果のグラフを生成し、保存するためのフラグです。指定すると有効になります。--mode <mode_name>: 実行モードを指定します(例:fitはフィッティングを実行します)。
コマンドラインでの具体的な使用例
以下のファイルがすべて同じディレクトリに存在すると仮定します。
optimize_mup_mf.pymobility_pi_model.pytklib/(tklibパッケージのルートディレクトリ)config.ini(上記「必要な入力ファイル」で示した例の内容)fit_params.csv(上記「必要な入力ファイル」で示した例の内容)data.xlsx(上記「必要な入力ファイル」で示した例の内容)
実行コマンド例
python -m tklib.tksci.tkoptimize_flex optimize_mup_mf.py \
--config config.ini \
--fitparam fit_params.csv \
--infile data.xlsx \
--outfile result.xlsx \
--fplot \
--mode fit
実行結果の説明
上記のコマンドを実行すると、以下のような処理が行われます。
設定と初期化:
config.iniとfit_params.csvが読み込まれ、プログラムとフィッティングパラメータが初期化されます。data.xlsxが入力データとして読み込まれます。コンソールには、読み込まれた設定ファイルやフィッティングパラメータの初期値が表示されます。
フィッティングの実行:
config.iniで指定されたフィッティングアルゴリズム(この例ではleast_squares)に基づき、data.xlsxの実測移動度データ (mu(obs)) に対してmobility_pi_model.pyで定義されたモデルがフィッティングされます。フィッティング中、コンソールには各イテレーションでの目的関数値やパラメータの更新状況が表示されます。
history.csvにも詳細な履歴が記録されます。
結果の保存:
フィッティングが完了すると、最適化されたパラメータ値は
data_optimized_params.csv(fitfile_templateの設定による)に保存されます。モデルによって計算された移動度 (
mu(sim)) を含むresult.xlsxが生成されます。--fplotフラグが指定されているため、実測データとフィッティング結果を比較したグラフlast_fit.pngが生成されます。
このプロセスを通じて、キャリア移動度の物理モデルパラメータが実測データに最適化され、その結果が複数の形式で出力されます。