グリッド型探索

ここでは、グリッド型探索を行い 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_listmax_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関数の関数値を表す等高線の上に、各グリッド点で評価した関数値がカラーマップとしてプロットされます。

../_images/res_mapper.png

グリッド型探索における2次元パラメータ空間上での関数値のカラーマップ。