入力ファイル

ODAT-SE は入力ファイルの形式に TOML を採用しています。 入力ファイルは次の4つのセクションから構成されます。

[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] セクション

AlgorithmSolver を橋渡しする要素である Runner の設定を記述します。 サブセクションとして mapping, limitation, log を持ちます。

  • ignore_error

    形式: bool値 (default: false)

    説明: 順問題ソルバーの実行時に RuntimeError が生じた場合に、値として NaN を返して計算を続行します。false の場合は RuntimeError を送出し、通常はプログラムを終了させます。RuntimeError 以外は捕捉しません。

[runner.mapping] セクション

Algorithm で探索している N 次元のパラメータ x から Solver で使う M 次元のパラメータ y への写像を定義します。 NM となる場合には、 solver セクションにも dimension パラメータを指定してください。

現在はアフィン写像(線形写像+平行移動) y=Ax+b が利用可能です。

  • A

    形式: リストのリスト、あるいは文字列 (default: [])

    説明: N×M の変換行列 A 。空のリストを渡した場合、単位行列とみなされます。

    文字列として与える場合はそのまま行列の要素を空白および改行で区切って並べてください。

  • b

    形式: リスト、あるいは文字列 (default: [])

    説明: M 次元の並進移動ベクトル b 。空のリストを渡した場合、ゼロベクトルとみなされます。

    文字列として与える場合はそのままベクトルの要素を空白区切りで並べてください。

行列の指定方法について、例えば、

A = [[1,1], [0,1]]

A = """
1 1
0 1
"""

はともに

A=(1101)

を表します。

[runner.limitation] セクション

Algorithm で探索している N 次元のパラメータ x に、制約条件を課すことが出来ます。 Algorithm ごとに定義する探索範囲(例:exchangemin_listmax_list ) に加えて課すことが出来ます。 現在は MN 列の行列 AM 次元の縦ベクトル b から定義される Ax+b>0 の制約式が利用可能です。具体的に

A1,1x1+A1,2x2+...+A1,NxN+b1>0A2,1x1+A2,2x2+...+A2,NxN+b2>0...AM,1x1+AM,2x2+...+AM,NxN+bM>0

という制約をかけることができます。 ここで M は制約式の個数(任意)となります。

  • co_a

    形式: リストのリスト、あるいは文字列 (default: [])

    説明: 制約式の行列 A を設定します。

    行数は制約式数 M 、列数は探索変数の数 N である必要があります。

    co_b を同時に定義する必要があります。

  • co_b

    形式: リストのリスト、あるいは文字列 (default: [])

    説明: 制約式の縦ベクトル b を設定します。

    次元数が制約式数 M の縦ベクトルを設定する必要があります。

    co_a を同時に定義する必要があります。

行列の指定方法について、[mapping] セクションと同様で、例えば、

A = [[1,1], [0,1]]

A = """
1 1
0 1
"""

はともに

A=(1101)

を表します。また、

co_b = [[0], [-1]]

co_b = """0 -1"""

co_b = """
0
-1
"""

はともに

b=(01)

を表します。 co_aco_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を使用することで、複数のプロセスを用いて計算を高速化できます。

  • exchangepamcmapper などのアルゴリズムはMPI並列計算による高速化が可能です

  • 並列実行時は、各プロセスがそれぞれ独自の乱数系列を持ちます (seedseed_delta パラメータ参照)

  • チェックポイントファイルは各プロセスごとに作成されます

実行例:

$ mpirun -np 4 odatse input.toml

-np 4 の部分は使用するプロセス数を指定します。使用可能なコア数に応じて調整してください。

環境によっては mpiexec や他のコマンド、またはジョブスケジューラを通してMPIプログラムを実行する場合もあります。特に大規模計算機センターなどでは、システム固有の実行方法があります。詳しくはご利用の環境のマニュアルを参照してください。

注釈

アルゴリズムによって並列化効率は異なります。例えば exchange では、レプリカ数と同じかそれ以下のプロセス数を使用するのが効率的です。