グリッド型探索¶
ここでは、グリッド型探索を行い Himmelblau関数の最小化問題を解析する方法について説明します。
グリッド型探索はMPI並列化に対応しています。具体的な計算手順は minsearch
の場合と同様です。
探索グリッドはパラメータを元にプログラム内部で生成します。
サンプルファイルの場所¶
サンプルファイルは sample/analytical/mapper
にあります。
フォルダには以下のファイルが格納されています。
input.toml
メインプログラムの入力ファイル
plot_colormap_2d.py
計算結果を可視化するためのプログラム
do.sh
本チュートリアルを一括計算するために準備されたスクリプト
入力ファイルの説明¶
メインプログラム用の入力ファイル input.toml
について説明します。記述方法の詳細については「入力ファイル」の項を参照してください。
[base]
dimension = 2
output_dir = "output"
[solver]
name = "analytical"
function_name = "himmelblau"
[runner]
[runner.log]
interval = 20
[algorithm]
name = "mapper"
seed = 12345
[algorithm.param]
max_list = [6.0, 6.0]
min_list = [-6.0, -6.0]
num_list = [31, 31]
[base]
, [solver]
, [runner]
のセクションについては Nelder-Mead法による探索(minsearch
)の場合と同じです。
[algorithm]
セクションでは、使用するアルゴリスムとその設定を行います。
name
は使用するアルゴリズムの名前です。このチュートリアルでは、グリッド探索による解析を行うので、mapper
を指定します。
[algorithm.param]
セクションで探索するパラメータのグリッドを指定します。
min_list
とmax_list
はそれぞれ探索範囲の最小値と最大値を指定します。num_list
はパラメータの各方向へのグリッド点の個数を指定します。
ここではデフォルト値を用いるため省略しましたが、その他のパラメータについて詳細は「入力ファイル」の章を参照してください。
計算の実行¶
最初にサンプルファイルが置いてあるフォルダへ移動します。(以下、ODAT-SEパッケージをダウンロードしたディレクトリの直下にいることを仮定します。)
$ cd sample/analytical/mapper
メインプログラムを実行します。計算時間は通常のPCで数秒程度で終わります。
$ mpiexec -np 4 python3 ../../../src/odatse_main.py input.toml | tee log.txt
ここではプロセス数4のMPI並列を用いた計算を行っています。
実行すると output
ディレクトリとその下に各ランクのフォルダが作成され、ランクごとの計算結果が出力されます。
同時に、以下の様な出力が標準出力に書き出されます。
Make ColorMap
Iteration : 1/240
Iteration : 2/240
Iteration : 3/240
Iteration : 4/240
Iteration : 5/240
Iteration : 6/240
Iteration : 7/240
...
x1
, x2
に各メッシュでの候補パラメータと、その時の関数値が出力されます。
最終的にグリッド上の全ての点で計算された関数値が output/ColorMap.txt
に出力されます。
今回の場合は、
-6.000000 -6.000000 890.000000
-5.600000 -6.000000 753.769600
-5.200000 -6.000000 667.241600
-4.800000 -6.000000 622.121600
-4.400000 -6.000000 610.729600
-4.000000 -6.000000 626.000000
-3.600000 -6.000000 661.481600
-3.200000 -6.000000 711.337600
-2.800000 -6.000000 770.345600
...
のような結果が得られ、
1列目、2列目に x1
, x2
の値、3列目に関数値が記載されます。
計算結果の可視化¶
ColorMap.txt
を図示することで、関数の値が小さいパラメータがどこにあるかを推定することができます。そのような 2次元パラメータ空間のプロットを作成するプログラムが plot_colormap_2d.py
に用意されています。
$ python3 plot_colormap_2d.py
上記を実行すると ColorMapFig.png
が作成され、Himmelblau関数の関数値を表す等高線の上に、各グリッド点で評価した関数値がカラーマップとしてプロットされます。