Интегрируйте стандартные программы оптимизации MATLAB с целевыми функциями

Обзор

Этот пример показывает вам, как создать приложение.NET, которое находит локальный минимум целевой функции с помощью MATLAB® оптимизационная функция fminsearch и MWObjectArray класс.

В этом примере вы выполняете следующие шаги:

  • Используйте продукт MATLAB Compiler SDK™, чтобы создать блок (OptimizeComp). Этот блок применяет стандартные программы оптимизации MATLAB к целевым функциям, реализованным, когда.NET возражает.

  • Доступ к компоненту в любом приложение C# (OptimizeApp.cs) или Visual Basic® приложение (OptimizeApp.vb).

  • Используйте MWObjectArray класс, чтобы создать ссылку на объект.NET, использующий C# (BananaFunction.cs) или Visual Basic (BananaFunction.vb), и передача, которые возражают против компонента.

  • Создайте и запустите приложение с помощью Visual Studio® Среда разработки.NET.

Приложение OptimizeComp

OptimizeComp приложение находит локальный минимум целевой функции и возвращает минимальное местоположение и значение. Компонент использует оптимизационную функцию MATLAB fminsearch. Этот пример оптимизирует банановую функцию Розенброка, используемую в fminsearch документация.

Класс OptimizeComp.OptimizeClass выполняет неограниченную нелинейную оптимизацию на целевой функции, реализованной как объект.NET. Метод этого класса, doOptim, принимает начальное значение (СЕТЕВОЙ объект), который реализует целевую функцию и возвращает местоположение и значение локального минимума.

Второй метод, displayObj, средство отладки, которое перечисляет характеристики объекта.NET. Эти два метода doOptim и displayObj инкапсулируйте функции MATLAB.

Файлы

Функции MATLABdoOptim.m
displayObj.m
Местоположение функции MATLABmatlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeComp
Участок кода C#matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeCSApp\BananaFunction.cs
Участок кода Visual Basicmatlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeVBApp\BananaFunction.vb
Местоположение ссылки API MWArraymatlabroot\help\dotnetbuilder\MWArrayAPI

Процедура

  1. Скопируйте следующую папку, которая поставляется с MATLAB к вашей папке работы:
    matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample

    В командной строке MATLAB перейдите к новому OptimizeExample\OptimizeComp подпапка в вашей папке работы.

  2. Исследуйте код MATLAB, к которому вы хотите получить доступ. Этот пример использует doOptim.m и displayObj.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. Создайте компонент.NET с приложением Library Compiler или compiler.build.dotNETAssembly использование следующей информации:

    Поле Значение
    Имя библиотекиOptimizeComp
    ClassName 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 документация.

  5. Откройте файл проекта.NET, который соответствует вашему языку приложения с помощью Visual Studio.

    • C

      Если вы используете C#, OptimizeCSApp папка содержит файл проекта Visual Studio.NET для этого примера. Откройте проект в Visual Studio.NET путем двойного клика по OptimizeCSApp.csproj в Windows® Проводник. Можно также открыть его с рабочего стола путем щелчка правой кнопкой по OptimizeCSApp.csproj и выбора Open Outside MATLAB.

    • Visual Basic

      Если вы используете Visual Basic, OptimizeVBApp папка содержит файл проекта Visual Studio.NET для этого примера. Откройте проект в Visual Studio.NET путем двойного клика по OptimizeVBApp.vbproj в Windows Explorer. Можно также открыть его с рабочего стола путем щелчка правой кнопкой по OptimizeVBApp.vbproj и выбора Open Outside 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. Создайте и запустите OptimizeApp приложение в Visual Studio.NET.

Программа отображает следующий вывод:

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

Смотрите также

| |

Связанные примеры

Больше о