まずはユーザーマニュアルに従ってRosenblock関数の最小値の計算問題でテスト。
Rosenblock関数は、最適化問題のテストとしてよく出てくる。
目的関数:f(x1,x2)=100*(x2-x1^2)^2+(1-x1)^2
設計変数:x1,x2
制約条件:|x1|≦2,|x2|≦2
※最大値:f(-2,-2)=3609, 最小値:f(1,1)=0
dakotaのtutorialの実行(.inファイルをコピーして実行)
cp /usr/local/dakota-6.0.0.Linux.x86_64/examples/users/rosen_grad_opt.in .
dakota -i rosen_grad_opt.in -o rosen_grad_opt.out > rosen_grad_opt.stdout⇒ リスタートファイルdakota.rst、出力ファイルrosen_grad_opt.outなどが作成される
結果の確認は、rosen_grad_opt.outの最後の方に出力される
<<<<< Function evaluation summary: 137 total (137 new, 0 duplicate)
<<<<< Best parameters =
9.9341884597e-01 x1
9.8744342609e-01 x2
<<<<< Best objective function =
7.4943502239e-05
<<<<< Best data captured at function evaluation 136
rosen_grad_opt.inファイルの中身
6.0からstrategyブロックが無くなって、environmentというブロックに変わった。ブロックの中身はほぼ同じのよう。
# Dakota Input File: rosen_grad_opt.in
# Usage:
# dakota -i rosen_grad_opt.in -o rosen_grad_opt.out > rosen_grad_opt.stdout
environment・・・全体環境(単一目的関数最適化、パレート最適化等)
graphics
tabular_graphics_data
tabular_graphics_file = 'rosen_grad_opt.dat'
method・・・最適化手法の選択、反復・収束条件など
max_iterations = 100
convergence_tolerance = 1e-4
conmin_frcg・・・最適化アルゴリズムの指定
model・・・近似モデル(single="近似なし")
single
variables・・・設計変数および変数範囲(初期値・制約条件)
continuous_design = 2
initial_point -1.2 1.0
lower_bounds -2.0 -2.0
upper_bounds 2.0 2.0
descriptors 'x1' "x2"
interface・・・外部インターフェース(ここで外部プログラムの起動スクリプトなどを指定)
analysis_driver = 'rosenbrock'
direct
responses・・・目的関数の設定
objective_functions = 1
# analytic_gradients
numerical_gradients
method_source dakota
interval_type forward
fd_gradient_step_size = 1.e-5
no_hessians