Передайте объекты Java MATLAB

Обзор

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

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

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

  2. Доступ к функциям MATLAB в приложении Java, включая использование MWJavaObjectRef класс, чтобы создать ссылку на объект Java и передать его сгенерированным методам Java.

  3. Создайте и запустите приложение.

Пакет OptimDemo

OptimDemo пакет находит локальный минимум целевой функции и возвращает минимальное местоположение и значение.

Пакет использует оптимизационную функцию MATLAB fminsearch, и этот пример оптимизирует банановую функцию Розенброка, используемую в MATLAB fminsearch документация.

Класс Оптимизатора выполняет неограниченную нелинейную оптимизацию на целевой функции, реализованной как объект Java. Метод этого класса, doOptim, принимает исходное предположение и объект Java, который реализует целевую функцию и возвращает местоположение и значение локального минимума. Второй метод, displayObj, средство отладки, которое перечисляет характеристики объекта Java.

Эти два метода, doOptim и displayObj, инкапсулируйте функции MATLAB. Код MATLAB для этих двух методов находится в doOptim.m и displayObj.m, который может быть найден в matlabroot\toolbox\javabuilder\Examples\ObjectRefExample\ObjectRefDemoComp.

Файлы

Функции MATLABdoOptim.m
displayObj.m
Местоположение функции MATLABmatlabroot\toolbox\javabuilder\Examples\ObjectRefExample\ObjectRefDemoComp
Участок кода Javamatlabroot\toolbox\javabuilder\Examples\ObjectRefExample\ObjectRefDemoJavaApp
javabuilder.jarmatlabroot\toolbox\javabuilder\jar\win64

Процедура

  1. Скопируйте ObjectRefExample папка, которая поставляется с MATLAB к вашей папке работы:

    copyfile(fullfile(matlabroot,'toolbox','javabuilder','Examples','ObjectRefExample'),'ObjectRefExample')

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

  2. Исследуйте код MATLAB, к которому вы хотите получить доступ из Java. Этот пример использует doOptim.m и displayObj.m.

    function [x,fval] = doOptim(h, x0)
    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. Создайте пакет Java с приложением Library Compiler или compiler.build.javaPackage использование следующей информации:

    Поле Значение
    Имя библиотекиOptimDemo
    ClassName Optimizer
    Файлы, чтобы скомпилироватьdoOptim.m
    displayObj.m

    Например, если вы используете compiler.build.javaPackageВвод:

    buildResults = compiler.build.javaPackage(["doOptim.m","displayObj.m"], ...
    'PackageName','OptimDemo', ...
    'ClassName','Optimizer');

    Для получения дополнительной информации смотрите, что инструкции в Генерируют приложение Java Пакета и Сборки Java.

  4. Запишите исходный код для класса, который реализует объектную функцию, чтобы оптимизировать. Код для этого примера находится в файле BananaFunction.java.

     BananaFunction.java

    Класс реализует банановую функцию Розенброка, описанную в MATLAB fminsearch документация.

  5. Запишите исходный код для приложения, это получает доступ к функциям MATLAB. Код для этого примера находится в файле PerformOptim.java.

     PerformOptim.java

    Программа делает следующее:

    • Инстанцирует объекта BananaFunction класс выше, чтобы быть оптимизированным.

    • Создает MWJavaObjectRef это ссылается на BananaFunction объект, как показано:

      origRef = new MWJavaObjectRef(objectiveFunction);
      .

    • Инстанцирует объекта Optimizer.

    • Вызывает displayObj метод, чтобы проверить, что объект Java передается правильно.

    • Вызывает doOptim метод, который использует fminsearch найти локальный минимум целевой функции.

    • Использует try/catch блокируйтесь, чтобы обработать исключения.

    • Освобождает нативные ресурсы с помощью MWArray методы.

  6. В MATLAB перейдите к ObjectRefDemoJavaApp папка.

  7. Скопируйте сгенерированный OptimDemo.jar пакет в эту папку.

    • Если вы использовали compiler.build.javaPackageВвод:

      copyfile(fullfile('..','ObjectRefDemoComp','OptimDemojavaPackage','OptimDemo.jar'))
    • Если вы использовали Library Compiler, введите:

      copyfile(fullfile('..','ObjectRefDemoComp','OptimDemo','for_testing','OptimDemo.jar'))
  8. Откройте окно командной строки и перейдите к ObjectRefDemoJavaApp папка, где вы скопировали OptimDemo.jar.

  9. Скомпилируйте PerformOptim.java приложение и BananaFunction.java класс помощника с помощью javac.

    • Windows®

      Скомпилировать BananaFunction.javaВвод:

      javac -classpath "matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\OptimDemo.jar BananaFunction.java
      Скомпилировать PerformOptim.javaВвод:
      javac -classpath "matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\OptimDemo.jar PerformOptim.java

    • Unix®

      Скомпилировать BananaFunction.javaВвод:

      javac -classpath "matlabroot/toolbox/javabuilder/jar/javabuilder.jar":./OptimDemo.jar BananaFunction.java
      Скомпилировать PerformOptim.javaВвод:
      javac -classpath "matlabroot/toolbox/javabuilder/jar/javabuilder.jar":./OptimDemo.jar PerformOptim.java

    Замените matlabroot с путем к вашему MATLAB или папке установки MATLAB Runtime. Например, на Windows, путем может быть C:\Program Files\MATLAB\R2021b.

  10. Запустите PerformOptim приложение.

    На Windows введите:

    java -classpath .;"matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\OptimDemo.jar PerformOptim -1.2 1.0

    На Linux®Ввод:

    java -classpath .:"matlabroot/toolbox/javabuilder/jar/javabuilder.jar":.\OptimDemo.jar PerformOptim -1.2 1.0

    Примечание

    Если при запуске приложение на Mac 64-битная платформа, необходимо добавить -d64 отметьте в команде Java.

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

Using x0 =
-1.2000    1.0000
*****************************************************
** Properties of Java object                       **
*****************************************************
 
h =
 
BananaFunction@1766806
 
className =
 
BananaFunction
 
  Name      Size            Bytes  Class             Attributes
 
  h         1x1                    BananaFunction              
 
Methods for class BananaFunction:
 
 BananaFunction    getClass          notifyAll         
equals            hashCode          toString          
evaluateFunction  notify            wait              
 
** Finished DISPLAYOBJ ******************************
*****************************************************
** Performing unconstrained nonlinear optimization **
*****************************************************
 
directEval =
 
   24.2000
 
 wrapperEval =
 
   24.2000
 
 x =
 
    1.0000    1.0000
 
 fval =
 
   8.1777e-10
 
Optimization successful
** Finished DOOPTIM *********************************
Location of minimum: 
1.0000    1.0000
Function value at minimum: 
8.1777e-10

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

|

Похожие темы