チュートリアル: AENET + minsearch による最小化
本チュートリアルでは、AENET で構築した機械学習ポテンシャルと ODAT-SE の minsearch(Nelder-Mead 法)を組み合わせて、 N2 二量体の最適な N-N 結合距離を求める方法を説明します。
サンプルファイルは sample/aenet_minsearch/ にあります。
前提条件
AENET の
predict.xがインストール済みであること学習済みの ANN ポテンシャルファイル(
N.5t-5t.ann)が準備済みであること (チュートリアル: AENET 学習パイプライン を参照)
ファイル構成
sample/aenet_minsearch/
├── input.toml # ODAT-SE 設定ファイル
├── predict.in # AENET 予測設定
├── template.xsf # 構造テンプレート
└── run_all.sh # 実行スクリプト
input.toml の説明
[base]
dimension = 1
output_dir = "output"
パラメータ空間の次元を 1(N-N 結合距離のみ)に設定します。
[solver]
name = "aenet"
[solver.config]
aenet_exec_file = "predict.x"
aenet_ann_potential = "N.5t-5t.ann"
[solver.param]
string_list = ["value_01"]
ソルバーとして AENET を使用し、predict.x のパスと ANN ポテンシャルファイルを指定します。
string_list はテンプレート内のプレースホルダーです。
[algorithm]
name = "minsearch"
label_list = ["z"]
[algorithm.param]
min_list = [0.5]
max_list = [2.0]
initial_list = [1.25]
[algorithm.minimize]
initial_scale_list = [0.25]
xatol = 0.0001
fatol = 0.0001
maxiter = 100
minsearch アルゴリズムの設定:
パラメータ |
説明 |
|---|---|
|
探索範囲: N-N 距離 0.5〜2.0 Å |
|
初期値: 1.25 Å |
|
初期シンプレックスのスケール: 0.25 Å |
|
パラメータの収束判定閾値: 0.0001 Å |
|
関数値の収束判定閾値: 0.0001 eV/atom |
|
最大反復回数: 100 |
テンプレートファイル
template.xsf は N2 二量体の構造テンプレートです:
ATOMS
N 0.0000000000 0.0000000000 0.0000000000
N 0.0000000000 0.0000000000 value_01
value_01 が minsearch によって最適化される N-N 結合距離です。
実行方法
一括実行スクリプト:
cd sample/aenet_minsearch
sh run_all.sh
または直接実行:
odatse-aenet input.toml
Nelder-Mead 法による最適化は 13 反復(26 回の関数評価)で収束し、約 1 秒で完了します。
出力
計算結果は output/ ディレクトリに生成されます:
output/res.txt: 最適化結果(最適パラメータと目的関数値)output/SimplexData.txt: Nelder-Mead 法のシンプレックスの反復履歴
res.txt には、最適化された N-N 結合距離とそのときのエネルギー(eV/atom)が記録されます。
SimplexData.txt のフォーマット:
# step z fx
各行がシンプレックスの各ステップにおけるパラメータ値と関数値です。
計算結果
Nelder-Mead 法による最適化の結果、最適な N-N 結合距離として約 1.1 Å が得られます。
Nelder-Mead 法による N-N 結合距離の収束過程。上段: N-N 距離、下段: エネルギー(eV/atom)。
最適化結果の確認:
cat output/res.txt