交換モンテカルロ法 exchange
¶
exchange
はレプリカ交換モンテカルロ法を用いてパラメータ探索を行う Algorithm
です。
前準備¶
あらかじめ mpi4py をインストールしておく必要があります。:
python3 -m pip install mpi4py
入力パラメータ¶
サブセクション param
と exchange
を持ちます。
[param
] セクション¶
探索空間を定義します。
mesh_path
キーが存在する場合は離散空間を、そうでない場合は連続空間を探索します。
連続空間
initial_list
形式: 実数型のリスト。長さはdimensionの値と一致させます。
説明: パラメータの初期値。 定義しなかった場合は一様ランダムに初期化されます。
unit_list
形式: 実数型のリスト。長さはdimensionの値と一致させます。
- 説明: 各パラメータの単位。
探索アルゴリズム中では、各パラメータをそれぞれこれらの値で割ることで、 簡易的な無次元化・正規化を行います。 定義しなかった場合にはすべての次元で 1.0 となります。
min_list
形式: 実数型のリスト。長さはdimensionの値と一致させます。
- 説明: パラメータが取りうる最小値。
モンテカルロ探索中にこの値を下回るパラメータが出現した場合、 ソルバーは評価されずに、値が無限大だとみなされます。
max_list
形式: 実数型のリスト。長さはdimensionの値と一致させます。
- 説明: パラメータが取りうる最大値。
モンテカルロ探索中にこの値を上回るパラメータが出現した場合、 ソルバーは評価されずに、値が無限大だとみなされます。
離散空間
mesh_path
形式: ファイルパス
説明: メッシュ定義ファイル。
neighborlist_path
形式: ファイルパス
説明: 近傍リスト定義ファイル。
[exchange
] セクション¶
numsteps
形式: 整数値。
説明: モンテカルロ更新を行う回数。
numsteps_exchange
形式: 整数値。
説明: 「温度」のレプリカ交換を行う頻度。この回数だけモンテカルロ更新を行ったらレプリカ交換を実行します。
Tmin
形式: 実数値。
説明: 「温度」(
)の最小値。Tmax
形式: 実数値。
説明: 「温度」(
)の最大値。bmin
形式: 実数値。
説明: 「逆温度」(
)の最小値。 温度と逆温度はどちらか片方だけを指定する必要があります。bmax
形式: 実数値。
説明: 「逆温度」(
)の最大値。 温度と逆温度はどちらか片方だけを指定する必要があります。Tlogspace
形式: 真偽値。 (default: true)
- 説明: 「温度」を各レプリカに割り当てる際に、対数空間で等分割するか否かを指定します。
true のときは対数空間で等分割します。
nreplica_per_proc
形式: 整数。 (default: 1)
説明: ひとつのMPI プロセスが担当するレプリカの数。
アルゴリズム補助ファイル¶
メッシュ定義ファイル¶
本ファイルで探索するグリッド空間を定義します。 1列目にメッシュのインデックス(実際には使用されません)、 2列目以降は探索空間の座標を指定します。
以下、サンプルを記載します。
1 6.000000 6.000000
2 6.000000 5.750000
3 6.000000 5.500000
4 6.000000 5.250000
5 6.000000 5.000000
6 6.000000 4.750000
7 6.000000 4.500000
8 6.000000 4.250000
9 6.000000 4.000000
...
近傍リスト定義ファイル¶
離散空間をモンテカルロ法で探索する場合、各点
1列目に始点の番号
近傍リスト定義ファイルをメッシュ定義ファイルから生成するツール py2dmat_neighborlist
が提供されています。
詳細は 関連ツール を参照してください。
0 1 2 3
1 0 2 3 4
2 0 1 3 4 5
3 0 1 2 4 5 6 7
4 1 2 3 5 6 7 8
5 2 3 4 7 8 9
...
出力ファイル¶
RANK/trial.txt
¶
各レプリカについて、モンテカルロサンプリングで提案されたパラメータと、対応する目的関数の値です。 1列目にステップ数、2列目にプロセス内のwalker 番号、3列目にレプリカの温度、4列目に目的関数の値、5列目以降にパラメータが記載されます。
# step walker T fx z1 z2
0 0 0.004999999999999999 0.07830821484593968 3.682008067401509 3.9502750191292586
1 0 0.004999999999999999 0.0758494287185766 2.811346329442423 3.691101784194861
2 0 0.004999999999999999 0.08566823949124412 3.606664760390988 3.2093903670436497
3 0 0.004999999999999999 0.06273922648753057 4.330900869594549 4.311333132184154
RANK/result.txt
¶
各レプリカについて、モンテカルロサンプリングで生成されたパラメータと、対応する目的関数の値です。
trial.txt
と同一の書式です。
# step walker T fx z1 z2
0 0 0.004999999999999999 0.07830821484593968 3.682008067401509 3.9502750191292586
1 0 0.004999999999999999 0.07830821484593968 3.682008067401509 3.9502750191292586
2 0 0.004999999999999999 0.07830821484593968 3.682008067401509 3.9502750191292586
3 0 0.004999999999999999 0.06273922648753057 4.330900869594549 4.311333132184154
best_result.txt
¶
サンプリングされた全データのうち、目的関数の値が最小となったパラメータと、対応する目的関数の値です。
nprocs = 4
rank = 2
step = 65
fx = 0.008233957976993406
z1 = 4.221129370933539
z2 = 5.139591716517661
result_T#.txt
¶
サンプリング結果を温度ごとにまとめ直したものです。
#
は温度点の番号です。
ファイルの1 列目はステップ数、2列目は全体での walker 番号、3列目は目的関数の値、 4列目以降は探索パラメータの値です。
# T = 1.0
0 15 28.70157662892569 3.3139009347685118 -4.20946994566609
1 15 28.70157662892569 3.3139009347685118 -4.20946994566609
2 15 28.70157662892569 3.3139009347685118 -4.20946994566609
3 15 28.98676409223712 3.7442621319489637 -3.868754990884034
アルゴリズム解説¶
マルコフ連鎖モンテカルロ法¶
モンテカルロ法(モンテカルロサンプリング)では、パラメータ空間中を動き回る walker
となるように
を課すことがほとんどです。 両辺で
提案確率
で候補点 を生成します提案確率
としては を中心とした一様分布やガウス関数などの扱いやすいものを利用します
提案された候補点
を採択確率 で受け入れ、 とします - 受け入れなかった場合は とします
採択確率
とします。
この定義が詳細釣り合い条件を満たすことは、詳細釣り合いの式に代入することで簡単に確かめられます。
特に、重みとしてボルツマン因子を、
提案確率として対称なもの
という更に簡単な形になります。
現在地点の近くからランダムに次の座標の候補を選び、目的関数
の値を調べる ならば(山を下る方向ならば)移動する ならば採択確率 で移動する1-3 を適当な回数繰り返す
得られた時系列のうち、目的関数の値が一番小さいものを最適解とします。
3 番のプロセスのおかげで、
レプリカ交換モンテカルロ法¶
モンテカルロ法による最適化では、温度
この問題を解決する方法として、温度 minsearch
をするのがおすすめです。
脚注