Rosenbrockをbayes推定とDakotaで最適化したまとめ - materialsintegration/optimization_by_sipmi GitHub Wiki
Python: BayesianOptimizationパッケージ(以下bayes推定とする)を使用して最適化をおこなうが、複数変数だと局所解を求めにくい。他方Dakotaは与える初期値により局所解を求める時間や試行回数が違ってくる。よって、bayes推定により得られた最適解をDakotaの初期値としてあたえ、最適化を試みる。bayes推定自体は実行する毎に解が変わるので、10回ほど実行してみる。
概要
pythonの最適化パッケージの一つであり、最適化手法の一つである、Bayse推定による最適化を行い、 得られた最適解を次段としてDakotaの最適化のための初期値として最適化を行った際の検証をまとめる。
環境
- OS:CentOS7.x
- python:3.6
- py_bayesian_optimization:1.0.1
- dakota:6.7
最適化の対象
Rosenbrock関数の最適化
注意点
Bayes最適化は関数の戻り値を最大にすることを行うので、評価はRosenbrock式をbayes推定用とお最急降下法用の2つを用意した。
def rosenbrock_for_bayes(x, y):
'''
Rosenbrock関数、bayes推定用
'''
return -1.0 * (100 * (y - x ** 2) ** 2 + ( 1 - x) ** 2)
def rosenbrock_for_conmin(x, y):
'''
Rosenbrock関数、最急降下法用
'''
return 100 * (y - x ** 2) ** 2 + ( 1 - x) ** 2
試行について
試行方法について記述する。Python:bayesian optimizationパッケージは実行に係るパラメータ自体少ないが何回かの試行の上、以下の組み合わせで実施した。
- パラメータ
- init_points:10
- n_iter:30
期待されること
- bayes推定は局所的な解を得ることが苦手だが、非常に少ないステップ数で解を求めることができる。
- dakotaは局所解を得るれやすいが、非常に多くのステップ数を必要とする。また初期値の与え方でこれ(ステップ数)が変動する。 以上から、bayes推定による、解を大局解とし、次段のdakotaへこの値を初期値として与え、全体の時間短縮を期待する。
- この他の調査事項
- dakotaのみ(初期値を探索範囲の最小、最大で与えたもの)の時間の調査
- bayes+Dakotaの時間も比べる。
dakotaのみの時間
dakota単体で最適化を行う場合、初期値が必要になる。最適な初期値がわからない場合、適当な値を設定することになるが、以下に、例えば、最小値、最大値、中央値で最適化を行った場合の結果を示す。
| 1 | 2 | 3 | |
|---|---|---|---|
| x初期値 | 5.00 | -5.00 | 0.00 |
| y初期値 | 5.00 | -5.00 | 0.00 |
| 計算回数 | 1750 | 246 | 369.00 |
| 最適解x | 1.0912880578 | 0.9681165434 | 0.9699425538 |
| 最適解y | 1.1915723701 | 0.9371588594 | 0.9407043756 |
| 返却値 | 0.0083774727 | 0.0010173789 | 0.0009041587 |
| 計算時間 | 643.98s | 71.7297s | 134.393s |
期待される値(1, 1)を超えた最大値だと時間がかかる。かたやそれ以下のマイナス、中央値あたりだと手法のくせなのか、時間が短いことがわかる。
結果
結果は以下の通り。良好な最適解を得ることができている。この表では、Dakotaによる各最適化の計算(1から10まで)はそれぞれ、Bayes推定の結果の値が初期値として使用される。
| 回数 | bayes推定の結果(x, y) | Dakota計算時間(s) | akota計算回数 | Dakota最適解(x, y) | Dakota返却値 |
|---|---|---|---|---|---|
| 1 | 1.447, 2.043 | 448.255 | 1065 | 1.0184858745, 1.0374539539 | 0.0003437 |
| 2 | 1.859, 3.514 | 240.241 | 561 | 1.0195850190, 1.0397061796 | 0.0003859 |
| 3 | 1.499, 2.068 | 550.361 | 1296 | 1.0183488064, 1.0371746032 | 0.00033864 |
| 4 | -2.071, 4.217 | 467.675 | 1109 | 0.9983015022, 0.94049461233 | 0.0009107 |
| 5 | 1.935, 3.741 | 514.22 | 1296 | 1.0174701745, 1.0353897535 | 0.0003072 |
| 6 | 1.672, 2.573 | 487.27 | 1163 | 1.0184436133, 1.0373591353 | 0.0003519 |
| 7 | -2.092, 3.047 | 112.54 | 260 | 0.9796960883, 0.95976265756 | 0.00041242 |
| 8 | 0.912, 0.832 | 45.8859 | 99 | 0.96888416883, 0.93865078605 | 0.00096893 |
| 9 | -0.200, -3.859 | 78.8992 | 194 | 0.97865046869, 0.95767810127 | 0.00045642 |
| 10 | 1.730, 2.135 | 258.687 | 687 | 1.0193889493, 1.0393034492 | 0.00039303 |