Main Content

目的関数との MATLAB 最適化ルーチンの統合

概要

この例では、目的関数の局所的最小値を検出する .NET アプリケーションを MATLAB® 最適化関数 fminsearchMWObjectArray クラスを使用して作成する方法を示します。

この例では、以下の手順を実行します。

  • MATLAB Compiler SDK™ 製品を使用してアセンブリ (OptimizeComp) を作成します。このアセンブリは、.NET オブジェクトとして実装される目的関数に MATLAB 最適化ルーチンを適用します。

  • C# アプリケーション (OptimizeApp.cs) または Visual Basic® アプリケーション (OptimizeApp.vb) のどちらかでコンポーネントにアクセスします。

  • C# (BananaFunction.cs) または Visual Basic (BananaFunction.vb) を使用して、MWObjectArray クラスを使用して .NET オブジェクトへの参照を作成し、そのオブジェクトをコンポーネントに渡します。

  • Visual Studio® .NET 開発環境を使用してアプリケーションをビルドして実行します。

OptimizeComp アプリケーション

OptimizeComp アプリケーションは、目的関数の局所的最小値を検出し、最小値の位置と値を返します。このコンポーネントでは MATLAB 最適化関数 fminsearch を使用しています。この例では、fminsearch のドキュメンテーションで使用している Rosenbrock のバナナ関数を最適化します。

クラス OptimizeComp.OptimizeClass は、.NET オブジェクトとして実装される目的関数で制約なし非線形最適化を実行します。このクラスのメソッド doOptim は、目的関数を実装する初期値 (NET オブジェクト) を受け入れ、局所的最小値の位置と値を返します。

2 つ目のメソッド displayObj は、.NET オブジェクトの特性をリストするデバッグ ツールです。doOptimdisplayObj の 2 つのメソッドで MATLAB 関数をカプセル化します。

ファイル

MATLAB 関数doOptim.m
displayObj.m
MATLAB 関数の場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeComp
C# コードの場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeCSApp\BananaFunction.cs
Visual Basic コードの場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeVBApp\BananaFunction.vb
MWArray API リファレンスの場所matlabroot\help\dotnetbuilder\MWArrayAPI

手順

  1. MATLAB に付属している以下のフォルダーを作業フォルダーにコピーします。
    matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample

    MATLAB コマンド プロンプトで、作業フォルダー内の新しい OptimizeExample\OptimizeComp サブフォルダーに移動します。

  2. アクセスする MATLAB コードを調べます。この例では、doOptim.mdisplayObj.m を使用します。

    function [x,fval] = doOptim(h, x0)
    mWrapper = @(x) h.evaluateFunction(x);
    
    directEval = h.evaluateFunction(x0)
    wrapperEval = mWrapper(x0)
    
    [x,fval] = fminsearch(mWrapper,x0)
    function className = displayObj(h)
    
    h
    className = class(h)
    whos('h')
    methods(h)

  3. 次の情報を使用して、ライブラリ コンパイラ アプリまたは compiler.build.dotNETAssembly によって .NET コンポーネントをビルドします。

    フィールド
    ライブラリ名OptimizeComp
    クラス名OptimizeComp.OptimizeClass
    コンパイル対象ファイルdoOptim.m
    displayObj.m

    たとえば、compiler.build.dotNETAssembly を使用している場合は、以下を入力します。

    buildResults = compiler.build.dotNETAssembly(["doOptim.m","displayObj.m"], ...
    'AssemblyName','OptimizeComp', ...
    'ClassName','OptimizeComp.OptimizeClass');

    詳細については、.NET アセンブリの生成と .NET アプリケーションのビルドの手順を参照してください。

  4. コンポーネントにアクセスするために C# または Visual Basic のどちらを使用するのかを決定します。

    • C#

      C# を使用する場合は、最適化するオブジェクト関数を実装するクラスのソース コードを記述します。

      この例のサンプル アプリケーションは OptimizeExample\OptimizeCSApp\BananaFunction.cs にあります。

       BananaFunction.cs

    • Visual Basic

      Visual Basic を使用する場合は、最適化するオブジェクト関数を実装するクラスのソース コードを記述します。

      この例のサンプル アプリケーションは OptimizeExample\OptimizeVBApp\BananaFunction.vb にあります。

       BananaFunction.vb

    BananaFunction クラスは、fminsearch のドキュメンテーションで説明している Rosenbrock のバナナ関数を実装します。

  5. Visual Studio を使用して、ご使用のアプリケーション言語に対応した .NET プロジェクト ファイルを開きます。

    • C#

      C# を使用する場合は、OptimizeCSApp フォルダーにこの例の Visual Studio .NET プロジェクト ファイルが含まれています。Windows® エクスプローラーOptimizeCSApp.csproj をダブルクリックして、Visual Studio .NET でプロジェクトを開きます。[OptimizeCSApp.csproj] を右クリックし、[MATLAB の外部で開く] を選択して、デスクトップから開くこともできます。

    • Visual Basic

      Visual Basic を使用する場合は、OptimizeVBApp フォルダーにこの例の Visual Studio .NET プロジェクト ファイルが含まれています。Windows エクスプローラーOptimizeVBApp.vbproj をダブルクリックして、Visual Studio .NET でプロジェクトを開きます。[OptimizeVBApp.vbproj] を右クリックし、[MATLAB の外部で開く] を選択して、デスクトップから開くこともできます。

  6. アセンブリ ファイル OptimizeComp.dll への参照を追加します。

  7. MWArray API への参照を追加します。

    MATLAB がシステムにインストールされている場合matlabroot\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll
    MATLAB Runtime がシステムにインストールされている場合<MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll

  8. Visual Studio .NET で OptimizeApp アプリケーションをビルドして実行します。

プログラムにより、次の出力が表示されます。

Using initial points= -1.2000 1


*****************************************************
**            Properties of .NET Object            **
*****************************************************

h =

  MathWorks.Examples.Optimize.BananaFunction handle 
             with no properties.
  Package: MathWorks.Examples.Optimize




className =

MathWorks.Examples.Optimize.BananaFunction


  Name  Size   Bytes  Class  Attributes

  h      1x1    60  MathWorks.Examples.Optimize.BananaFunction



Methods for class MathWorks.Examples.Optimize.BananaFunction:

BananaFunction    addlistener       findprop          lt
Equals            delete            ge                ne
GetHashCode       eq                gt                notify
GetType           evaluateFunction  isvalid
ToString          findobj           le


**************** Finished displayObj ****************


*****************************************************
** Performing unconstrained nonlinear optimization **
*****************************************************

directEval =

   24.2000



wrapperEval =

   24.2000



x =

    1.0000    1.0000



fval =

  8.1777e-010


***************** Finished doOptim ******************


Location of minimum: 1.0000    1.0000
Function value at minimum: 8.1777e-010

参考

| |

関連する例

詳細