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関数を定義
    1. Composeを開始します。
    2. メニューバーバーからFile(ファイル) > New (新規) > OML Fileをクリックします。
    3. エディタで、下記のOMLコマンドを入力します:
      function f = ros_eval(x,y)
      f = 100.0*(y-x^2)^2 + (1-x)^2
    4. メニューバーで、File(ファイル) > Save As(名前を付けて保存)をクリックします。
    5. Save Asダイアログで作業ディレクトリに進み、rosenbrock_function.omlとしてファイルを保存します。
    6. メニューバーからFile(ファイル) > Exit(終了)をクリックしてComposeを閉じます。
    ヒント: ComposeでOML関数と共にRegister Function …フィーチャーを用いる際、後続のプリファレンスファイルステップを回避します。関数名をハイライト表示させ、右クリックしてコンテキストメニューのこのフィーチャーにアクセスします。
  • PythonでRosenbrock関数を定義
    1. 任意のエディタで、下記のPythonコマンドを入力します:
      def ros_eval(x, y):
          return 100*(y-x*x)*(y-x*x) + (1-x)*(1-x)
    2. メニューバーで、File(ファイル) > Save As(名前を付けて保存)をクリックします。
    3. Save As(名前を付けて保存)ダイアログで作業ディレクトリに進み、rosenbrock_function.pyとしてファイルを保存します。

プリファレンスファイルへの関数の追加

このステップでは、OML/pythonファイルをプリファレンスファイルに追加します。

  • OML関数をプリファレンスファイルへ追加
    1. テキストエディタで、下記のOML登録関数を入力します:
      *Id("HyperGraph v11.0")
          *BeginDefaults()
              *BeginPlotDefaults()
                  *SetOMLRootDir("C:/Program Files/Altair/2019/Compose2019")
                  *RegisterOMLFunction("ros_eval",”<path>/rosenbrock_function.oml",2)
              *EndPlotDefaults()
          *EndDefaults()
    2. <path>を、ファイルの実際の場所に置き換えます。
    3. *SetOMLRootDirステートメントを、適切な場所を指すように修正します。
    4. ファイルをrosenbrock_prefs.mvwという名称のプリファレンスファイルとして保存します。
    5. テキストエディタを閉じます。
  • Python関数をプリファレンスファイルへ追加
    1. テキストエディタで、下記のPython登録関数を入力します:
      *Id("HyperStudy v14.0")
          *BeginDefaults()
              *BeginPlotDefaults()
                  *RegisterPythonFunction("ros_eval","<path>/rosenbrock_function.py",2)
              *EndPlotDefaults()
          *EndDefaults()
    2. <path>を、.pyファイルの実際の場所に置き換えます。
    3. ファイルをrosenbrock_prefs.mvwという名称のプリファレンスファイルとして保存します。
    4. テキストエディタを閉じます。

スタディのセットアップの実行

  1. HyperStudyを開始します。
  2. プリファレンスファイルを設定します。
    1. メニューバーからFile(ファイル) > Use Preferences File(プリファレンスファイルを使用)をクリックします。
    2. HyperStudy - Set Preference File(プリファレンスファイルの設定)ダイアログで、rosenbrock_prefs.mvwファイルを開きます。
  3. 以下の方法で新規スタディを開始します:
    • メニューバーから、File(ファイル) > New(新規)をクリックします。
    • リボン上でをクリックします。
  4. Add Study(スタディの追加)ダイアログでスタディの名前を入力し、スタディの場所を選んでOKをクリックします。
  5. Define Models(モデルの定義)ステップに進みます。
  6. Internal Mathモデルを追加します。
    1. Add Model(モデルを追加)をクリックします。
    2. Add(追加)ダイアログでHyperStudyを選択し、OKをクリックします。
  7. Define Input Variables(入力変数の定義)ステップに進みます。
  8. 入力変数を追加します。
    1. Add Input Variable(入力変数の追加)を二度クリックします。
    2. 作業領域で、入力変数XおよびYをラベル付けします。
    3. 入力変数の下限値、初期値、上限値を、図 1内に示す数値に変更します。
    1.


ベースランの実行

  1. Test Models(モデルをテスト)ステップに進みます。
  2. Run Definition(計算実行)をクリックします。
    スタディのDirectory(ディレクトリ)内に、approaches/setup_1-def/ディレクトリが作成されます。approaches/setup_1-def/run__00001/m_1には、ベースランの結果である入力ファイルが含まれます。

出力応答の作成と評価

  1. Define Output Responses(出力応答の定義)パネルに進みます。
  2. Add Output Response(出力応答を追加)をクリックします。
  3. Response 1のExpression(式)列で、をクリックします。
  4. Expression Builder(式ビルダー)で、Functions(関数)タブをクリックします。
  5. 関数のリストからros_evalを選択します。
  6. Insert Varname(変数名の挿入)をクリックします。
    関数 ros_eval() がEvaluate Expression(式)の評価欄に現れます。
  7. Input Variables(入力変数)タブをクリックします。
  8. 作業領域で、入力変数XおよびYを選択します。
  9. Insert Varname(変数名の挿入)をクリックします。
    2.


    入力変数がExpression(式)欄にros_eval(var_1, var_2)として現れます。
    3.


  10. OKをクリックします。
  11. Evaluate(評価)をクリックします。
    式ros_eval(var_1, var_2)が404に変わります。

最適化の実行

  1. Optimization(最適化)を追加します。
    1. Explorer(エクスプローラ)内で右クリックし、コンテキストメニューからAdd(追加)を選択します。
    2. Add(追加)ダイアログでOptimization(最適化)を選択します。
    3. Definition from(定義元)に、Setup(セットアップ)を選択しOKをクリックします。
  2. Optimization(最適化) > Definition(定義) > Define Output Responses(出力応答の定義)ステップに進みます。
  3. Objectives/Constraints - Goals(目的 / 制約条件 - 目標)タブをクリックします。
  4. Response 1に目的関数を追加します。
    1. Add Goal(目標を追加)をクリックします。
    2. Type (タイプ)列に、Minimizeを選択します。
    4.


  5. Optimization(最適化) > Specifications(スタディ仕様)ステップに進みます。
  6. ワークエリア内でModes(モード)をAdaptive Response Surface Method (逐次更新型応答曲面法)(ARSM)にセットします。
    注: 問題の定式化に有効な手法のみが使用可能です。
  7. Apply(適用)をクリックします。
  8. Evaluate(評価)ステップに進みます。
  9. Evaluate Tasks(計算実行)をクリックします。
  10. オプション: Iteration Plot(反復計算プロット)タブをクリックし、最適化の進捗を確認します。
    反復計算履歴は、目的関数値の大きな減少を示しています。Rosenbrock関数は、真の最適の領域での平坦さのため、いかなる最適化エンジンにおいても探し出すのが困難であるグローバルの最小値を有しており、ARSMは (x,y)=(1,1)における理論解を見つけていません。
    5.