optimize_mup_mf.py 技術ドキュメント

プログラムの動作

optimize_mup_mf.py は、半導体におけるキャリア移動度 (mobility) の実験データに対して、物理モデル(Piモデルを想定)を用いた多変数非線形フィッティングを実行するためのPythonスクリプトです。このプログラムは、tklib フレームワークの一部として設計されており、特に tklib.tksci.tkoptimize_flex と連携して動作します。

主な機能:

  1. 設定ファイルの読み込み: プログラムの実行設定(ファイルパス、フィッティング条件、プロット設定など)を外部ファイルから読み込みます。

  2. フィッティングパラメータの管理: フィッティング対象となるモデルパラメータの初期値、上限・下限、最適化IDなどの情報を設定ファイルから読み込み、管理します。

  3. 入力データの読み込み: 実測されたキャリア移動度データ(温度、キャリア濃度、実測移動度)を含むExcelファイルを読み込みます。

  4. モデル評価: mobility_pi_model.py モジュールで定義された物理モデルに基づき、与えられたパラメータセットでキャリア移動度を計算します。

  5. 非線形フィッティング: tklib.tksci.tkFit_mxy クラスを利用し、scipy.optimize の各種アルゴリズム(例: Nelder-Mead、Levenberg-Marquardt、least_squares など)を用いて、実測データとモデル予測値の残差を最小化するようにモデルパラメータを最適化します。

  6. 結果の保存とプロット: 最適化されたパラメータ、フィッティング結果を含むデータファイル、フィッティング履歴、および結果のグラフを生成・保存します。

解決する課題:

このプログラムは、半導体のキャリア移動度が温度やキャリア濃度によってどのように変化するかを、物理モデルに基づいて定量的に記述するモデルを構築することを目的としています。実測データにモデルをフィッティングすることで、材料の特性やデバイスの性能を予測・解析するための信頼性の高いモデルパラメータを得ることができます。

原理

このプログラムは、mobility_pi_model.py で定義された物理モデルと、数値最適化アルゴリズムを組み合わせて機能します。

1. モデル: 具体的な移動度モデルの数式は mobility_pi_model.py に記述されていますが、一般的に半導体のキャリア移動度 \(\mu\) は、異なる散乱メカニズム(格子散乱、イオン化不純物散乱、界面散乱など)による移動度 \(\mu_i\) の組み合わせとして表現されます。これらのメカニズムはMatthiessenの法則に従って合成されることが多く、その逆数の和として表されます。

\[\frac{1}{\mu_{model}(T, N, \mathbf{p})} = \sum_i \frac{1}{\mu_i(T, N, \mathbf{p}_i)}\]

ここで:

  • \(\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})\) を最小化することによって達成されます。

\[S(\mathbf{p}) = \sum_{j=1}^{M} w_j (y_{obs,j} - y_{model,j}(\mathbf{p}))^2\]

ここで:

  • \(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パッケージではない可能性が高いため、以下のいずれかの方法で利用可能にする必要があります。

  1. ローカルでの配置: tklib のソースコードがディレクトリとして存在する場合、このディレクトリを optimize_mup_mf.py と同じ階層、またはPythonの検索パス (PYTHONPATH) に含まれる場所に配置します。

  2. pip を使用したインストール(もし利用可能であれば): もし tklib がプライベートなPyPIリポジトリやGitリポジトリで提供されている場合、それぞれの指示に従ってインストールします(例: pip install tklib または pip install git+https://example.com/tklib.git)。

mobility_pi_model.py は、optimize_mup_mf.py と同じディレクトリに配置される必要があります。

必要な入力ファイル

このプログラムの実行には、以下の設定ファイルとデータファイルが必要です。

  1. 設定ファイル (例: 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
    
  2. フィッティングパラメータ設定ファイル (例: 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
    
  3. 入力データファイル (例: 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

    ...

    ...

    ...

生成される出力ファイル

プログラムの実行後、以下のファイルが生成される可能性があります。

  1. 最適化されたフィッティングパラメータファイル (例: data_optimized_params.csv): config.inifitfile_template で指定された命名規則に従い、最適化されたモデルパラメータとその最終値が保存されるCSVファイルです。

  2. 出力データファイル (例: 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

    ...

    ...

    ...

    ...

  3. 履歴ファイル (例: history.csv): フィッティングの各イテレーションにおけるパラメータ値、目的関数値、計算時間などの情報が記録されるCSVファイルです。フィッティングの収束挙動の診断に役立ちます。

  4. プロットファイル (例: last_fit.png): config.inifplot = 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.py

  • mobility_pi_model.py

  • tklib/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

実行結果の説明

上記のコマンドを実行すると、以下のような処理が行われます。

  1. 設定と初期化:

    • config.inifit_params.csv が読み込まれ、プログラムとフィッティングパラメータが初期化されます。

    • data.xlsx が入力データとして読み込まれます。

    • コンソールには、読み込まれた設定ファイルやフィッティングパラメータの初期値が表示されます。

  2. フィッティングの実行:

    • config.ini で指定されたフィッティングアルゴリズム(この例では least_squares)に基づき、data.xlsx の実測移動度データ (mu(obs)) に対して mobility_pi_model.py で定義されたモデルがフィッティングされます。

    • フィッティング中、コンソールには各イテレーションでの目的関数値やパラメータの更新状況が表示されます。history.csv にも詳細な履歴が記録されます。

  3. 結果の保存:

    • フィッティングが完了すると、最適化されたパラメータ値は data_optimized_params.csvfitfile_template の設定による)に保存されます。

    • モデルによって計算された移動度 (mu(sim)) を含む result.xlsx が生成されます。

    • --fplot フラグが指定されているため、実測データとフィッティング結果を比較したグラフ last_fit.png が生成されます。

このプロセスを通じて、キャリア移動度の物理モデルパラメータが実測データに最適化され、その結果が複数の形式で出力されます。