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