RosenbrockをDakotaで最適化したまとめ - materialsintegration/optimization_by_sipmi GitHub Wiki

Dakota1を利用して、Rosenbrock関数2の評価を行い、最適化を行い、最適解を導き出した。そのまとめである。

※1:Dakota とは米国サンディア国立研究所で開発されたオープンソースの最適化システムである。各種最適化、感度解析、パラメー タ同定および信頼性解析に取り組み可能な手法が多数搭載されている。
※2:数学的な最適化において、Rosenbrock 関数は非凸関数であり、Howard H. Rosenbrock によって1960 年に導入され、最適化アル ゴリズムのパフォーマンステスト問題としてよく使われる関数である。

概要

Rosenbrockの最適化の変数として、入力値XとYを変数とし、Rosenbrock関数を目的関数として、最適化の評価を行った。

rosenblock-dakota-flow.png


   graph TD;
    dakota000[Dakota最適化ツール]
    dakota001{判定}
    dakota002[interface:Rosenbrock関数の駆動スクリプト]
    dakota003[response:戻り値を評価]
    dakota004[終了]

    dakota000==>|実行開始|dakota001
    dakota001==>|パラメータ生成|dakota002
    dakota001==>|終了|dakota004
    dakota003==>dakota001
    dakota002==>|postprocess|dakota003

Rosenbrock関数は以下の図のような入力(底辺)と出力(縦軸)を得る。 rosenbrock-graph.png

環境

評価に使用した環境を以下に記す。

  • CentOS7.x
  • Dakota:6.7
  • Python:3.6

Dakotaについて

Dakotaの実行に関して、簡単に説明する。

パラメータファイル

Dakotaの駆動には、まずパラメータファイルが必要である。いくつかのテンプレートをDakotaが用意しているので、それを使用してパラメータファイルを作成する。パラメータファイルは以下の構造を持つ。主な変更点を以下に列挙する。それぞれについて記述する。

  • パラメータファイルの例
  
  environment,
      graphics
      tabular_graphics_data
         tabular_graphics_file = 'tabulargraphics.dat'
  
  method, conmin_frcg 
       id_method ="frcg" 
       max_iterations = 10000
       convergence_tolerance=1e-7
       scaling
    
  variables,
      continuous_design = 2
        cdv_initial_point =  0.0    0.0
        cdv_lower_bounds  = -5.0   -5.0
        cdv_upper_bounds  =  5.0    5.0
        cdv_descriptor    =  'V001' 'V002'  
        cdv_scale_type  'value' 
        cdv_scales  0.01
    
  interface,
       system #asynch evaluation_concurrency = 5
        analysis_driver = 'simulator_script.sh'
        parameters_file = 'params.in'
        results_file = 'results.out'
        dprepro
    
  responses,
      objective_functions = 1
      numerical_gradients
        method_source dakota
        interval_type central
        fd_step_size = 1
      no_hessians
  • method:最適化手法の指定
  • variables:変数の指定
  • interface:目的関数の駆動法の指定
  • response:目的関数からDakotaへ戻される評価値の処理方法の指定

method、手法の詳細

最適化手法は以下のものを実施した。それぞれについて結果を後述する。

  • conmin_fcgr:制約付き最小化共役勾配最適化法
    • max_iterations:10000(1万回まで試行を許可)
    • convergence_tolerance:1e-7(評価の際、小数点以下7桁まで見る)

variables、変数詳細

Rosenbrockの2つの入力を変数として使用する。値は、2変数とも、初期値を1.05、最小値を-5.0、最大値を5.0とした。

interface、目的関数

  • analysis_dirver:実行用のスクリプトを指定する。
    • スクリプトの概要
      • Rosenbrock関数を処理して出力を標準出力へ出力する。

response

  • objective_functions:1を指定する
  • numerical_gradientを指定。
    • method_source:dakota
    • interval_type:central
    • fd_step_size:.01
  • no_hessiansを指定

検証

  • 評価全体
    78回の評価を行い、全体として11秒かかった。
  • 評価結果は以下の通りで、想定通りの最適値に収束している。
    %eval_id interface              x              y         obj_fn 
    1            NO_ID           1.05           1.05       0.278125 
    2            NO_ID    1.048976102    1.050484357   0.2510654971 
    3            NO_ID     1.04488051    1.052421784   0.1568840215 
    4            NO_ID    1.029777524    1.059566277 0.0009633461047 
    5            NO_ID     1.02600584    1.060996905 0.007580120897 
    6            NO_ID     1.02933981    1.059732305 0.0008645055029 
    7            NO_ID    1.029394308    1.059711633 0.0008643733622 
    8            NO_ID    1.004102953     1.05767965   0.2446154354 
    9            NO_ID    1.029141395    1.059691314 0.0008805028857 
    10           NO_ID    1.029324439     1.05970602 0.0008638122711 
    11           NO_ID    1.023877776     1.04950996 0.0007103953393 
    12           NO_ID    1.025451779    1.052456468 0.0007297165374 
    13           NO_ID    1.023169126    1.048183379 0.0007079782462 
    14           NO_ID    1.017666209    1.035338496 0.0003214596375 
    15           NO_ID    1.018367528    1.036975512 0.0003383052748 
    16           NO_ID    1.016769176    1.033244644 0.0003142577126 
    17           NO_ID    1.008303532    1.019039895 0.000627742365 
    18           NO_ID    1.013557452      1.0278556 0.0002148172649 
    19           NO_ID    1.014570315    1.029555111 0.0002163820622 
    20           NO_ID    1.022031326    1.021844581   0.0520300497 
    21           NO_ID    1.013714915    1.027743903 0.0001896858415 
    22           NO_ID    1.013797439    1.027685363 0.0001913670104 
    23           NO_ID    1.011250628    1.022784686 0.0001290369231 
    24           NO_ID    1.011795288    1.023880778 0.0001414111462 
    25           NO_ID     1.00411678     1.00842828 2.01081886e-05 
    26           NO_ID    1.003676867   0.9963374619  0.01217915139 
    27           NO_ID    1.004109437    1.008226472 1.68961013e-05 
    28           NO_ID    1.004109999    1.008241914 1.689461415e-05 
    29           NO_ID   0.9979976763    1.008110397   0.0146717256 
    30           NO_ID    1.004048876    1.008240598 1.799245098e-05 
    31           NO_ID    1.004087987     1.00824144 1.694933085e-05 
    32           NO_ID    1.001053838    1.008176155 0.003682407761 
    33           NO_ID    1.004052708    1.008240681 1.783675208e-05 
    34           NO_ID    1.004088925     1.00824146 1.693918319e-05 
    
  • 試行結果

tabulargraphics.png