HS-1040: 内部Rosenbrock関数の最小化
プリファレンスファイル(.mvw)を使ってHyperStudyでCompose/OMLまたはPython関数を登録し、登録された関数をスタディ内の出力応答評価に使用する方法について学習します。
Rosenbrock関数がPythonまたはOMLスクリプトとして定義され、HyperStudy内に登録されます。
本例は、x および y とラベル付けされた2つの入力変数を定義します。最適化の目的は、 f(x,y)= 100*(y-x^2)^2 + (1-x)^2 を最小にすることです。x と y の範囲は[-2 ; -2]、開始ポイントは[-1 ; -1]に設定されます。
Rosenbrock関数の定義
このステップでは、ComposeまたはPythonでRosenbrockを定義します。
-
ComposeでRosenbrock関数を定義
ヒント: ComposeでOML関数と共にRegister Function …フィーチャーを用いる際、後続のプリファレンスファイルステップを回避します。関数名をハイライト表示させ、右クリックしてコンテキストメニューのこのフィーチャーにアクセスします。
-
PythonでRosenbrock関数を定義
プリファレンスファイルへの関数の追加
このステップでは、OML/pythonファイルをプリファレンスファイルに追加します。
-
OML関数をプリファレンスファイルへ追加
-
Python関数をプリファレンスファイルへ追加
スタディのセットアップの実行
- HyperStudyを開始します。
-
プリファレンスファイルを設定します。
- メニューバーから をクリックします。
- HyperStudy - Set Preference File(プリファレンスファイルの設定)ダイアログで、rosenbrock_prefs.mvwファイルを開きます。
-
以下の方法で新規スタディを開始します:
- メニューバーから、 をクリックします。
- リボン上で
をクリックします。
- Add Study(スタディの追加)ダイアログでスタディの名前を入力し、スタディの場所を選んでOKをクリックします。
- Define Models(モデルの定義)ステップに進みます。
-
Internal Mathモデルを追加します。
- Add Model(モデルを追加)をクリックします。
- Add(追加)ダイアログでHyperStudyを選択し、OKをクリックします。
- Define Input Variables(入力変数の定義)ステップに進みます。
-
入力変数を追加します。
- Add Input Variable(入力変数の追加)を二度クリックします。
- 作業領域で、入力変数XおよびYをラベル付けします。
- 入力変数の下限値、初期値、上限値を、図 1内に示す数値に変更します。
図 1.
ベースランの実行
- Test Models(モデルをテスト)ステップに進みます。
-
Run Definition(計算実行)をクリックします。
スタディのDirectory(ディレクトリ)内に、approaches/setup_1-def/ディレクトリが作成されます。approaches/setup_1-def/run__00001/m_1には、ベースランの結果である入力ファイルが含まれます。
出力応答の作成と評価
- Define Output Responses(出力応答の定義)パネルに進みます。
- Add Output Response(出力応答を追加)をクリックします。
-
Response 1のExpression(式)列で、
をクリックします。
- Expression Builder(式ビルダー)で、Functions(関数)タブをクリックします。
- 関数のリストからros_evalを選択します。
-
Insert Varname(変数名の挿入)をクリックします。
関数 ros_eval() がEvaluate Expression(式)の評価欄に現れます。
- Input Variables(入力変数)タブをクリックします。
- 作業領域で、入力変数XおよびYを選択します。
-
Insert Varname(変数名の挿入)をクリックします。
図 2.
入力変数がExpression(式)欄にros_eval(var_1, var_2)として現れます。図 3.
- OKをクリックします。
-
Evaluate(評価)をクリックします。
式ros_eval(var_1, var_2)が404に変わります。
最適化の実行
-
Optimization(最適化)を追加します。
- Explorer(エクスプローラ)内で右クリックし、コンテキストメニューからAdd(追加)を選択します。
- Add(追加)ダイアログでOptimization(最適化)を選択します。
- Definition from(定義元)に、Setup(セットアップ)を選択しOKをクリックします。
- ステップに進みます。
- Objectives/Constraints - Goals(目的 / 制約条件 - 目標)タブをクリックします。
-
Response 1に目的関数を追加します。
- Add Goal(目標を追加)をクリックします。
- Type (タイプ)列に、Minimizeを選択します。
図 4.
- ステップに進みます。
-
ワークエリア内でModes(モード)をAdaptive Response Surface Method (逐次更新型応答曲面法)(ARSM)にセットします。
注: 問題の定式化に有効な手法のみが使用可能です。
- Apply(適用)をクリックします。
- Evaluate(評価)ステップに進みます。
- Evaluate Tasks(計算実行)をクリックします。
- オプション:
Iteration Plot(反復計算プロット)タブをクリックし、最適化の進捗を確認します。
反復計算履歴は、目的関数値の大きな減少を示しています。Rosenbrock関数は、真の最適の領域での平坦さのため、いかなる最適化エンジンにおいても探し出すのが困難であるグローバルの最小値を有しており、ARSMは (x,y)=(1,1)における理論解を見つけていません。
図 5.