exponenta event banner

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

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

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

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

Проблема, которая должна быть решена, - это проблема отработанного примера:

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

Модель крутящего момента, которая должна использоваться в /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; либо измените текущую папку в MATLAB на новую рабочую папку, либо добавьте папку к пути следующим образом:

    1. На вкладке Главная (Home) в разделе Среда (Environment) щелкните Задать путь (Set Path).

    2. Щелкните Добавить папку (Add Folder) и перейдите к рабочей папке.

    3. Нажмите кнопку ОК.

    4. Нажмите кнопку Сохранить.

    5. Щелкните Закрыть (Close).

Шаг 1: Проверка алгоритма

currtutoptim.m является примером файла для проверки того, что fminunc решает проблему отработанного примера. Вы можете попробовать это в командной строке MATLAB.

  1. Чтобы открыть файл алгоритма в редакторе, введите open currtutoptim.m в командной строке или если текущая папка в MATLAB является вашей новой рабочей папкой, то дважды щелкните currtutoptim.m в текущей папке. Код должен отображаться в редакторе 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 с требуемыми моделями в ограничениях алгоритма

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

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

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

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

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

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

Шаг 3: Определение параметров оптимизации

Следующим шагом является определение атрибутов оптимизации (в разделе 1 шаблона).

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

Ниже приведен фрагмент кода из этого файла:

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

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

Просмотрите код, чтобы найти в списке Раздел кода (Code Section Where Set) для каждого атрибута, чтобы увидеть, как настроена каждая из опций оптимизации.

ПризнакСтоимостьРаздел кода, где установлен

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

Tutorial_Optimization

Add a name - setName

Описание

Простой отработанный пример максимизации крутящего момента

Add a description - setDescription

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

Не может быть изменен пользователем в GUI (режим установлен на 'fixed')

Set up the free variables - setFreeVariablesMode

Требуемые свободные переменные

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

Set up the free variables - addFreeVariables

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

Не может быть изменен пользователем в GUI (режим установлен на 'fixed')

Set up the objective functions - setObjectivesMode

Требуемые целевые функции

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

Set up the objective functions - addObjective

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

Не может быть изменен пользователем в GUI (режим установлен на 'fixed')

Set up the constraints - SetConstraintsMode

Обязательные ограничения

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

Set up the constraints - %There are no constraints

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

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

Set up the operating point sets - setOperatingPointsMode

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

Эта функция позволяет пользователю изменять пять параметров. Они будут отображаться в диалоговом окне Параметры оптимизации (Optimization Parameters) и помечены как Отображение (Display), Максимум итераций (Maximum iterations), Максимум оценок функций (Maximum function evaluations), Допуск переменных (Variable tolerance

Set up the optimization parameters - addParameter

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

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

Таким образом функция оптимизации получает cgoptimoptions объект. Обратите внимание, что функция оптимизации должна поддерживать этот интерфейс.

Шаг 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

При выполнении алгоритма единственное различие между исходным и измененным кодом заключается в том, как оценивается целевая функция. Исходный алгоритм требует, чтобы целевая функция (модель калибровочного 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 выберите «Файл» > «Установки».

    Откроется диалоговое окно Настройки CAGE (CAGE Preferences).

  2. Перейдите на вкладку Оптимизация (Optimization) и нажмите кнопку Добавить (Add), чтобы перейти к файлу.

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

    Функция оптимизации регистрируется в CAGE.

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

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

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

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

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

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

  2. Выберите меню «Файл» > «Создать» > «Оптимизация».

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

  4. Сопоставьте переменные, как показано на рисунке.

    Нажмите кнопку Далее.

  5. Сопоставить Torque модель в tuttq CAGE-модель, как показано на рисунке.

    Нажмите кнопку Готово (Finish).

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

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

    • Если предыдущая оптимизация в сессии отсутствует, выберите «Оптимизация» > «Импорт из набора данных». Файл проекта содержит набор данных со значениями N и L, которые выбираются автоматически. Нажмите кнопку ОК для импорта.

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

  7. Выберите «Оптимизация» > «Настроить». Откроется диалоговое окно Параметры оптимизации (Optimization Parameters). Обратите внимание на пять параметров, определенных в сценарии оптимизации учебного пособия.

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

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