入力ファイル¶
ODAT-SE は入力ファイルの形式に TOML を採用しています。 入力ファイルは次の4つのセクションから構成されます。
base
ODAT-SE 全体のパラメータを指定します。
solver
Solver
のパラメータを指定します。
algorithm
Algorithm
のパラメータを指定します。
runner
Runner
のパラメータを指定します。
[base
] セクション¶
dimension
形式: 整数型
説明: 探索空間の次元(探索するパラメータの数)
root_dir
形式: string型 (default: プログラム実行時のディレクトリ)
- 説明: プログラムを実行する一番上のディレクトリ。
入力ファイルなどのパスはすべて
root_dir
を起点とします。
output_dir
形式: string型 (default: プログラム実行時のディレクトリ)
説明: プログラムの実行結果を出力するディレクトリ名
[solver
] セクション¶
name
でソルバーの種類を決定します。各パラメータはソルバーごとに定義されています。
name
形式: string型
説明: ソルバーの名前。以下のソルバーが用意されています。
analytical
: 解析関数を与えるソルバー (主にテストに利用)
以下は別モジュールとして配布される2次元物質構造解析向けソルバーです。
sim-trhepd-rheed
: 反射高速(陽)電子回折(RHEED, TRHEPD)の強度計算をするためのソルバーsxrd
: 表面X線回折(SXRD)解析のためのソルバーleed
: 低速電子線回折(LEED)解析のためのソルバー
dimension
形式: 整数型 (default:
base.dimension
)説明: ソルバーが受け取る入力パラメータの数。
各種ソルバーの詳細および入出力ファイルは 順問題ソルバー を参照してください。
[algorithm
] セクション¶
name
でアルゴリズムの種類を決定します。各パラメータはアルゴリズムごとに定義されています。
name
形式: string型
説明: アルゴリズムの名前。以下のアルゴリズムが用意されています。
minsearch
: Nelder-Mead法による最小値探索mapper
: グリッド探索exchange
: レプリカ交換モンテカルロ法pamc
: ポピュレーションアニーリングモンテカルロ法bayes
: ベイズ最適化
seed
形式: 整数値
- 説明: 初期値のランダム生成やモンテカルロ更新などで用いる擬似乱数生成器の種を指定します。
各MPIプロセスに対して、
seed + mpi_rank * seed_delta
の値が実際の種として用いられます。 省略した場合は Numpy の規定の方法 で初期化されます。
seed_delta
形式: 整数値 (default: 314159)
- 説明: 疑似乱数生成器の種について、MPI プロセスごとの値を計算する際に用いられます。
詳しくは
seed
を参照してください。
checkpoint
形式: bool値 (default: false)
説明: 実行中および終了時の状態を定期的にファイルに出力します。実行が中断した場合に、チェックポイントから実行を再開できます。
checkpoint_steps
形式: 整数値 (default: 16,777,216)
説明: 次のチェックポイントまでの繰り返し回数を指定します。繰り返し回数は、mapper の場合はグリッド点の数、bayes の場合は探索点の評価回数、モンテカルロ法(exchange, pamc) の場合は local update の回数です。 デフォルト値は十分大きな数が設定されています。チェックポイント機能を有効にするには、
checkpoint_steps
またはcheckpoint_interval
の少なくとも一方を設定する必要があります。checkpoint_interval
形式: 実数値 (default: 31,104,000)
説明: 次のチェックポイントまでの経過時間を指定します。単位は秒です。 デフォルト値は十分大きな数(360日)が設定されています。チェックポイント機能を有効にするには、
checkpoint_steps
またはcheckpoint_interval
の少なくとも一方を設定する必要があります。checkpoint_file
形式: 文字列 (default:
"status.pickle"
)説明: 実行中の状態を書き出すファイル名を指定します。ファイルはプロセスごとの出力ディレクトリに書き出されます。過去3世代分のファイルが .1, .2, .3 の suffix を付けて保存されます。
各種アルゴリズムの詳細および入出力ファイルは 探索アルゴリズム を参照してください。
[runner
] セクション¶
Algorithm
と Solver
を橋渡しする要素である Runner
の設定を記述します。
サブセクションとして mapping
, limitation
, log
を持ちます。
ignore_error
形式: bool値 (default: false)
説明: 順問題ソルバーの実行時に RuntimeError が生じた場合に、値として NaN を返して計算を続行します。false の場合は RuntimeError を送出し、通常はプログラムを終了させます。RuntimeError 以外は捕捉しません。
[runner.mapping
] セクション¶
Algorithm
で探索している Solver
で使う solver
セクションにも dimension
パラメータを指定してください。
現在はアフィン写像(線形写像+平行移動)
A
形式: リストのリスト、あるいは文字列 (default: [])
- 説明:
の変換行列 。空のリストを渡した場合、単位行列とみなされます。 文字列として与える場合はそのまま行列の要素を空白および改行で区切って並べてください。
- 説明:
b
形式: リスト、あるいは文字列 (default: [])
- 説明:
次元の並進移動ベクトル 。空のリストを渡した場合、ゼロベクトルとみなされます。 文字列として与える場合はそのままベクトルの要素を空白区切りで並べてください。
- 説明:
行列の指定方法について、例えば、
A = [[1,1], [0,1]]
と
A = """
1 1
0 1
"""
はともに
を表します。
[runner.limitation
] セクション¶
Algorithm
で探索している Algorithm
ごとに定義する探索範囲(例:exchange
の min_list
や max_list
) に加えて課すことが出来ます。
現在は
という制約をかけることができます。
ここで
co_a
形式: リストのリスト、あるいは文字列 (default: [])
説明: 制約式の行列
を設定します。行数は制約式数
、列数は探索変数の数 である必要があります。co_b
を同時に定義する必要があります。co_b
形式: リストのリスト、あるいは文字列 (default: [])
説明: 制約式の縦ベクトル
を設定します。次元数が制約式数
の縦ベクトルを設定する必要があります。co_a
を同時に定義する必要があります。
行列の指定方法について、[mapping
] セクションと同様で、例えば、
A = [[1,1], [0,1]]
と
A = """
1 1
0 1
"""
はともに
を表します。また、
co_b = [[0], [-1]]
と
co_b = """0 -1"""
と
co_b = """
0
-1
"""
はともに
を表します。
co_a
と co_b
のどちらも定義しない場合、制約式を課さずに探索します。
[runner.log
] セクション¶
solver 呼び出しのlogging に関する設定です。
filename
形式: 文字列 (default: "runner.log")
説明: ログファイルの名前。
interval
形式: 整数 (default: 0)
説明: solver を interval 回呼ぶ毎にログが書き出されます。0以下の場合、ログ書き出しは行われません。
write_result
形式: 真偽値 (default: false)
説明: solver からの出力を記録するかどうかを指定します。
write_input
形式: 真偽値 (default: false)
説明: solver への入力を記録するかどうかを指定します。
MPI並列計算¶
ODAT-SEは、MPIを用いた並列計算をサポートしています。MPIを使用することで、複数のプロセスを用いて計算を高速化できます。
exchange
、pamc
、mapper
などのアルゴリズムはMPI並列計算による高速化が可能です並列実行時は、各プロセスがそれぞれ独自の乱数系列を持ちます (
seed
とseed_delta
パラメータ参照)チェックポイントファイルは各プロセスごとに作成されます
実行例:
$ mpirun -np 4 odatse input.toml
-np 4
の部分は使用するプロセス数を指定します。使用可能なコア数に応じて調整してください。
環境によっては mpiexec
や他のコマンド、またはジョブスケジューラを通してMPIプログラムを実行する場合もあります。特に大規模計算機センターなどでは、システム固有の実行方法があります。詳しくはご利用の環境のマニュアルを参照してください。
注釈
アルゴリズムによって並列化効率は異なります。例えば exchange
では、レプリカ数と同じかそれ以下のプロセス数を使用するのが効率的です。