Создание оптимизации из собственного алгоритма

Обзор процесса

Функция оптимизации CAGE позволяет вам использовать свои собственные алгоритмы оптимизации в качестве альтернатив библиотечным подпрограммам fmincon, NBI, ga и patternsearch.

Используя пример, этот пример иллюстрирует, как взять существующий алгоритм оптимизации и реализовать его как оптимизационную функцию для использования в оптимизации CAGE.

Проблемой, которая будет решена, является обработанная проблема в качестве примера:

Максимизируйте крутящий момент (TQ) по свободным переменным (SPK, AFR) по заданному набору (N, L'points'. Эти точки заданы в наборе данных New_Dataset, который может быть найден на сеансе CAGE optimworkedexample.cag и может быть импортирован в панель значений фиксированной переменной в представлении Optimization.

Модель крутящего момента, которая будет использоваться, является этим в /mbctraining/Holliday.mat.

Этапы процесса:

  1. Начните со своего собственного алгоритма. Мы будем использовать fminunc от продукта Optimization Toolbox™ как пример.

  2. Создайте оптимизационную функцию CAGE.

  3. Задайте атрибуты своей оптимизации в оптимизационной функции CAGE.

  4. Добавьте свой алгоритм в оптимизационную функцию CAGE.

  5. Укажите свою завершенную оптимизационную функцию с CAGE.

  6. Проверьте оптимизацию.

Шаги этого учебного вывода вы через серию примеров, иллюстрирующих, как создать код, чтобы включить ваш собственный алгоритм в оптимизацию в CAGE.

Прежде чем вы начнете, необходимо создать рабочую папку.

  1. Создайте новую папку (например, C:\Optimization_Work). Мы рекомендуем, чтобы вы поместили эту папку вне своего MATLAB® папки, чтобы не вмешиваться в файлы тулбокса.

  2. Скопируйте следующие шесть файлов с mbctraining папки в вашу новую рабочую папку:

    currtutoptim.m
    mbcOStemplate.m
    mbcOStutoptimfunc_s1.m
    mbcOStutoptimfunc.m
    optimtut.mat
    optimtuteg.mat
    
  3. Убедитесь, что ваша новая рабочая папка находится на пути MATLAB; или измените Current Folder в MATLAB к новой рабочей папке или добавьте папку в путь можно следующим образом:

    1. На вкладке Home, в разделе Environment, нажимают Set Path.

    2. Нажмите Add Folder и обзор к вашей рабочей папке.

    3. Нажмите OK.

    4. Нажмите Save.

    5. Нажмите Close.

Шаг 1: проверьте алгоритм

currtutoptim.m файл в качестве примера должен проверить тот fminunc решает обработанную задачу в качестве примера. Можно попробовать это в командной строке MATLAB.

  1. Чтобы открыть файл алгоритма в Редакторе, любой вводит open currtutoptim.m в командной строке, или если Current Folder в MATLAB является вашей новой рабочей папкой, то дважды кликают currtutoptim.m в Current Folder. Необходимо видеть код в редакторе MATLAB.

  2. Проверять тот fminunc решает обработанную задачу в качестве примера, введите следующую команду в подсказке MATLAB:

    bestX = currtutoptim
    

После того, как сообщения о ходе выполнения завершают рабочую область, выход должен напомнить следующее:

BestX =      
       23.768        12.78
       18.179        12.78
       14.261        12.78
       12.014        12.78
       11.439        12.78
       12.535        12.78
       27.477        12.78
       21.887        12.78
       17.969        12.78
       15.722        12.78
       15.147        12.78
       16.243        12.78
       31.185        12.78
       25.595        12.78
       21.677        12.78
        19.43        12.78
       18.855        12.78
       19.951        12.78
       34.893        12.78
       29.303        12.78
       25.385        12.78
       23.138        12.78
       22.563        12.78
       23.659        12.78
       38.601        12.78
       33.012        12.78
       29.093        12.78
       26.847        12.78
       26.271        12.78
       27.368        12.78
       42.309        12.78
        36.72        12.78
       32.802        12.78
       30.555        12.78
       29.979        12.78
       31.075        12.78

Матричный bestX содержит оптимальный SPK и AFR значения, которые максимизируют крутящий момент модели MBC (экспортируемый от Holliday.mat) на скорости и точках загрузки, заданных в матричных данных.

fminunc алгоритм оптимизации в качестве примера, который вы хотите передать CAGE для использования в графический интерфейсе пользователя оптимизации.

Этот пример показывает, как сделать fminunc доступный для использования в функции оптимизации CAGE.

Шаг 2: создайте оптимизационную функцию CAGE

Любой алгоритм оптимизации, который вы хотите использовать в CAGE, должен содержаться в оптимизационной функции. Оптимизационная функция КЛЕТКИ состоит из двух разделов.

Первый раздел задает следующие атрибуты оптимизации:

  • Имя для оптимизации

  • Описание оптимизации

  • Количество свободных переменных

  • Метки для свободных переменных (при необходимости), таким образом, пользователь может совпадать с переменными в CAGE к необходимым свободным переменным алгоритма.

  • Количество целей

  • Метки для целевых функций, таким образом, пользователь может совпадать с моделями в CAGE к необходимым целям алгоритма (можно соответствовать в CAGE, так метки, не должны быть точными в оптимизационной функции),

  • Количество ограничений

  • Метки для ограничений, таким образом, пользователь может совпадать с моделями в CAGE к необходимым моделям в ваших ограничениях алгоритма

  • Количество наборов данных

  • Метки для наборов данных, таким образом, пользователь может совпадать с наборами данных в CAGE к данным о необходимой переменной для вашего алгоритма

  • Любые другие параметры требуются алгоритмом оптимизации

Второй раздел содержит алгоритм оптимизации.

Открытый mbcOStemplate.m в редакторе MATLAB.

mbcOStemplate.m пустая оптимизационная функция CAGE. Двумя (в настоящее время пустой) разделы функции является options (для определения атрибутов оптимизации) и optimstore (для определения вашего алгоритма оптимизации). Обратите внимание на то, что этот файл может использоваться в качестве шаблона для любой оптимизационной функции, которую вы пишете.

Шаг 3: задайте опции оптимизации

Следующий шаг должен задать атрибуты вашей оптимизации (в Разделе 1 из шаблона).

Открытый mbcOStutoptimfunc_s1.m. В этом файле вы видите атрибуты оптимизации, которые были заданы.

Следующее является фрагментом кода из этого файла:

Атрибуты оптимизации передаются CAGE через cgoptimoptions объект, на который ссылаются опции в коде в mbcOStutoptimfunc_s1.m. Присматривайте за таблицей для деталей cgoptimoptions объект. cgoptimoptions объект имеет набор функций, которые устанавливают атрибуты оптимизации в CAGE. Это - то, где вы задаете имя, описание, свободные переменные, целевые функции, ограничения, наборы данных помощника и параметры оптимизации для оптимизации.

Вышеупомянутый код использовал cgoptimoptions объект (options) установить атрибуты оптимизации как описано в следующей таблице.

Просмотрите код, чтобы определить местоположение перечисленной Секции кода, Где Установлено для каждого атрибута, чтобы видеть, как каждая из опций оптимизации настраивается.

АтрибутЗначениеСекция кода, где установлено

Имя оптимизации

Tutorial_Optimization

Add a name - setName

Описание

Простой обработанный пример, чтобы максимизировать крутящий момент

Add a description - setDescription

Количество свободных переменных

Не может быть изменен пользователем в графический интерфейсе пользователя (режим был установлен в 'fixed')

Set up the free variables - setFreeVariablesMode

Необходимые свободные переменные

Эта функция требует двух свободных переменных, пометил 'afr' и 'spk'. Пользователь совпадает с этими метками свободной переменной к переменным CAGE в Мастере Оптимизации.

Set up the free variables - addFreeVariables

Количество целей

Не может быть изменен пользователем в графический интерфейсе пользователя (режим был установлен в 'fixed')

Set up the objective functions - setObjectivesMode

Необходимые Целевые функции

Эта функция требует одной целевой функции, которая будет помечена 'Torque' в функции оптимизации. Пользователь совпадает с этим 'Torque' пометьте к модели CAGE.

Set up the objective functions - addObjective

Количество ограничений

Не может быть изменен пользователем в графический интерфейсе пользователя (режим был установлен в 'fixed')

Set up the constraints - SetConstraintsMode

Необходимые ограничения

Когда режим фиксируется, и никакие ограничительные метки не были заданы, эта оптимизация не имеет никаких линейных или нелинейных ограничений.

Set up the constraints - %There are no constraints

Количество наборов данных помощника

Не может быть изменен пользователем в графический интерфейсе пользователя (режим был установлен в 'fixed'). Нет никаких наборов данных помощника для этого примера.

Set up the operating point sets - setOperatingPointsMode

Параметры оптимизации

Эта функция позволит пользователю изменять пять параметров. Они будут отображены в диалоговом окне Optimization Parameters и пометили Display, Maximum iterations, Maximum function evaluations, Variable tolerance и Function tolerance.

Set up the optimization parameters - addParameter

Когда одна из вашей оптимизации создается в графический интерфейсе пользователя CAGE, CAGE сначала вызывает вашу оптимизационную функцию, чтобы задать атрибуты оптимизации. Вызов функции от CAGE имеет форму

optionsobj = <your_optimization_function>('options', optionsobj)

Шаг 4: добавьте алгоритм в оптимизационную функцию

На этом шаге вы завершаете оптимизационную функцию путем добавления алгоритма. Для этого несколько изменений должны быть внесены в код, который вызывает алгоритм, когда данные (например, значения свободной переменной, константы, и так далее) будут теперь переданы и от CAGE, а не от рабочего пространства MATLAB.

  1. Открытый mbcOStutoptimfunc.m.

    Этот файл содержит завершенный алгоритм оптимизации. Следующее является фрагментом кода из этого файла.

    Одна строка была добавлена, а именно,

    optimstore = tutoptimizer(optimstore)
    

    Эта линия вызывает модифицированный алгоритм оптимизации. Отметьте синтаксис алгоритма: это должно принять форму

    optimstore = <your_optimization_algorithm>(optimstore)
    
  2. Локальная функция tutoptimizer может быть найден в нижней части файла mbcOStutoptimfunc.m. Прокрутите вниз, чтобы просмотреть алгоритм, измененный для использования в CAGE.

    optimstore cgoptimstore объект. Это - интерфейсный объект, который позволяет вам получать данные из и устанавливать данные в функции оптимизации CAGE. Можно теперь видеть как optimstore объект используется путем сравнения модифицированного алгоритма оптимизации, tutoptimizer, с исходным алгоритмом, currtutoptim, для каждого из основных разделов алгоритма.

Следующие разделы иллюстрируют, как преобразовать существующий алгоритм для использования в CAGE. Обратите внимание на то, что в этом учебном примере, код уже изменяется для вас, чтобы исследовать.

Раздел алгоритма 1

Получите условия запуска (x0) для свободных переменных.

Оригинальный код:

x0 переданный в от рабочего пространства MATLAB.

Модифицированный код:

x0 = getInitFreeVal(optimstore);

В исходном алгоритме, x0 передается в алгоритм от рабочего пространства MATLAB. В CAGE мы вызываем getInitFreeVal функция на optimstore объект получить x0.

Раздел алгоритма 2

Выполните оптимизацию (в Разделе 2 из шаблона).

Оригинальный код (от currtutoptim):

    [bestx(i, :), notused1, notused2, OUTPUT(i)] = fminunc(trqfunc,
 x0, algoptions); 

который вызывает следующий код, чтобы оценить функцию стоимости:

    function tq = trqfunc(x)
        
        % Evaluate torque. Note x = [SPK, AFR]
        tq = EvalModel(TQMOD, [x(1), N(i), L(i), x(2)]);
        
        % Maximising torque, so need to return -tq
        tq = -tq;

    end

Модифицированный код:

[bestx, unused, exitFlag, OUTPUT] = fminunc(@trqfunc_new,
 x0, algoptions);

который вызывает следующий код, чтобы оценить функцию стоимости:

    function y = trqfunc_new(x)
        % Evaluate the torque objective function
        y = -evaluate(optimstore, x);
			end

В выполнении алгоритма единственная разница между оригинальным и модифицированным кодом - то, как целевая функция выполнена. Исходный алгоритм требует, чтобы целевая функция (модель Model-Based Calibration Toolbox™ для крутящего момента) загрузилась в и оценена как требуется. В модифицированном алгоритме целевая функция (крутящий момент) выполнена путем вызова evaluate функция на optimstore объект. Обратите внимание на то, что входные параметры к модели крутящего момента передаются в evaluate функционируйте как показано в следующей таблице.

Исходный входВведите, чтобы выполнить функцию
SX(1)
AX(2)

Раздел алгоритма 3

Получите выходные данные.

Оригинальный код:

Оптимальные настройки свободной переменной возвращены через переменную bestX в currtutoptim.

Модифицированный код:

% Write results to the optimstore
optimstore = setFreeVariables(optimstore, bestx);

% Set termination message
termMsg = OUTPUT.message;
OUTPUT = rmfield(OUTPUT, 'message');

% Set all information in the optimstore and leave
optimstore = setExitStatus(optimstore, exitFlag, termMsg);
optimstore = setOutput(optimstore, OUTPUT);

В модифицированном алгоритме результаты нужно передать обратно в функцию оптимизации CAGE а не рабочее пространство MATLAB. Для этого результаты оптимизации установлены в optimstore объект, который затем возвращен в CAGE. Существует три функции, которые необходимо вызвать на optimstore возразите, чтобы возвратить результаты оптимизации в CAGE:

  • setFreeVariables — Возвращает оптимальные значения свободной переменной к CAGE

  • setExitStatus — Возвращает целое число, которое указывает, остановился ли алгоритм успешно, или не (положительный успешно). Это устанавливает сообщение завершения.

  • setOutput — Возвращает любую диагностическую информацию об алгоритме к CAGE

Шаг 5: укажите свою оптимизационную функцию с CAGE

Обработанный обеспеченный пример предварительно указан так, вы видите его как опцию в Мастере Оптимизации при подготовке новой оптимизации. Необходимо зарегистрировать новые функции, прежде чем можно будет использовать их. Когда вы изменили шаблон, чтобы создать вашу собственную оптимизационную функцию, как в этом примере, необходимо указать его с продуктом Model-Based Calibration Toolbox для того, чтобы использовать функцию в CAGE. Если вы зарегистрировались в своей оптимизационной функции, это появляется в Мастере Оптимизации.

  1. В CAGE выберите File> Preferences.

    Диалоговое окно Настроек CAGE появляется.

  2. Кликните по вкладке Optimization и нажмите Add, чтобы просмотреть к вашему файлу.

  3. Найдите файл mbcOStutoptimfunc.m (в рабочей папке вы создали), и нажмите Open.

    Это указывает оптимизационную функцию с CAGE.

  4. Можно теперь протестировать функцию путем нажатия на Test. Это - хорошая проверка на любые синтаксические ошибки в вашей оптимизационной функции. Это - очень полезная функция, когда вы используете свои собственные функции; если что-нибудь будет неправильно настроено, то результаты испытаний скажут вам, где начать корректировать вашу функцию.

    Вы видели пример этого путем сохранения копии обработанного файла в качестве примера и изменения одних из имен переменных (таких как afr) к номеру. Попытайтесь проверять эту измененную функцию в CAGE, и кнопка Test возвратит информативную ошибку при определении линии, которую вы изменили.

  5. Нажмите OK, чтобы оставить диалоговое окно Настроек CAGE. Если оптимизационная функция протестировала успешно, она указана как оптимизационная функция, которая может использоваться в CAGE и появляется в Мастере Оптимизации.

Шаг 6: проверьте свою новую оптимизацию

Чтобы проверить алгоритм, мы настраиваем сеанс CAGE, чтобы запустить оптимизацию, которая выполнялась на шаге 1. В данном примере сеанс CAGE был уже настроен. Выполните шаги ниже, чтобы запустить учебную оптимизацию в CAGE.

  1. В CAGE выберите File> Open Project и загрузите файл optimworkedexample.cag (если у вас уже нет этого открытого проекта). Этот проект находится в mbctraining папка.

  2. Выберите File> New> Optimization.

  3. Недавно зарегистрированная оптимизация появляется в списке имен алгоритма. Выберите Tutorial_Optimization из списка. Нажмите Next.

  4. Совпадайте с переменными как показано.

    Нажмите Next.

  5. Совпадайте с Torque модель к tuttq Модель CAGE как показано.

    Нажмите Finish.

  6. Если бы вы запустили оптимизацию теперь, то она запустилась бы однажды, сетбол всех переменных. Вы используете свободные и фиксированные панели Variable Values, чтобы выбрать рабочие точки. Вы можете монтажные точки вручную или импортировать их. Выполнить одно из следующих действий:

    • Если у вас есть предыдущая обработанная оптимизация в качестве примера на вашем текущем сеансе в оптимизации, представление увеличивает Number of runs до 36, и затем копирует и вставляет значения фиксированной переменной от предыдущей оптимизации.

    • Если у вас нет предыдущей оптимизации на вашем сеансе, выберите Optimization > Import From Data Set. Файл проекта содержит набор данных с N и значениями L, и они автоматически выбраны. Нажмите OK, чтобы импортировать.

    Теперь у вас должно быть 36 строк и в панелях фиксированной и в свободной переменной, и значениях рабочей точки в N и столбцах L в панели Fixed Variables. Начальные значения для A и искра для каждой точки являются сетболами в переменном словаре.

  7. Выберите Optimization> Set Up. Диалоговое окно Optimization Parameters появляется. Наблюдайте эти пять параметров, заданных в учебном скрипте оптимизации.

    Измените переменные и функциональные допуски в 1e-4, и нажмите OK, чтобы закрыть диалоговое окно.

  8. Запустите оптимизацию и просмотрите результаты. Матрица выходных данных должна напомнить следующее. Обратите внимание на то, что оптимальные значения для A и SPK очень похожи на тех из исходного алгоритма.