Функция оптимизации CAGE позволяет вам использовать собственные алгоритмы оптимизации в качестве альтернативы стандартным программам библиотеки fmincon
, NBI
, ga
и patternsearch
.
Используя пример, это руководство иллюстрирует, как взять существующий алгоритм оптимизации и реализовать его как оптимизационную функцию для использования в оптимизации CAGE.
Задачей, которая будет решена, является задача рабочего примера:
Максимизируйте крутящий момент (TQ
) над свободными переменными (SPK, AFR
) над заданным набором (N, L
) точки. Эти точки определены в наборе данных New_Dataset
, который можно найти в сеансе CAGE optimworkedexample.cag
и может быть импортирована на фиксированную панель значений переменных в представлении Оптимизации.
Модель крутящего момента, которая будет использоваться, находится в /mbctraining/Holliday.mat
.
Шаги процесса:
Начните с собственного алгоритма. Будем использовать fminunc
из продукта Optimization Toolbox™ в качестве примера.
Создайте оптимизационную функцию CAGE.
Определите атрибуты вашей оптимизации в оптимизационная функция CAGE.
Добавьте свой алгоритм к оптимизационной функции CAGE.
Зарегистрируйте заполненные оптимизационные функции в CAGE.
Проверьте оптимизацию.
Шаги этого руководства проведут вас через ряд примеров, иллюстрирующих, как создать код, чтобы включить ваш собственный алгоритм в оптимизацию в CAGE.
Перед началом необходимо создать рабочую папку.
Создайте новую папку (для примера, C:\Optimization_Work
). Мы рекомендуем поместить эту папку вне MATLAB® папки, чтобы избежать помех файлам тулбокса.
Скопируйте следующие шесть файлов из папки mbctraining в новую рабочую папку:
currtutoptim.m mbcOStemplate.m mbcOStutoptimfunc_s1.m mbcOStutoptimfunc.m optimtut.mat optimtuteg.mat
Убедитесь, что ваша новая рабочая папка находится в пути MATLAB; либо изменить Current Folder в MATLAB в новой рабочей папке, либо добавить папку в путь следующим образом:
На вкладке Home, в разделе Environment, нажмите Set Path.
Нажмите Add Folder и перейдите в рабочую папку.
Нажмите OK.
Нажмите Save.
Нажмите Close.
currtutoptim.m
является пример файла для проверки того, что fminunc
решает рабочую задачу примера. Попробовать это можно в командной строке MATLAB.
Чтобы открыть файл алгоритма в редактор, либо введите open currtutoptim.m
в командной строке или если Current Folder в MATLAB является вашей новой рабочей папкой, то дважды кликните currtutoptim.m
в Current Folder. Вы увидите код в редакторе MATLAB.
Чтобы проверить это 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.
Любой алгоритм оптимизации, который вы хотите использовать в CAGE, должен содержаться в оптимизационной функции. Оптимизационная функция CAGE состоит из двух секций.
Первый раздел задает следующие атрибуты оптимизации:
Имя для оптимизации
Описание оптимизации
Количество свободных переменных
Метки для свободных переменных (при необходимости), поэтому пользователь может сопоставить переменные в CAGE с необходимыми свободными переменными алгоритма.
Количество целей
Метки для целевых функций, поэтому пользователь может сопоставить модели в CAGE с необходимыми целями алгоритма (можно совпадать в CAGE, поэтому метки не должны быть точными в оптимизационная функция)
Количество ограничений
Метки для ограничений, поэтому пользователь может соответствовать моделям в CAGE требуемым моделям в ограничениях вашего алгоритма
Количество наборов данных
Метки для наборов данных, чтобы пользователь мог сопоставить наборы данных в CAGE с необходимыми переменными данными для вашего алгоритма
Любые другие параметры, требуемые алгоритмом оптимизации
Второй раздел содержит алгоритм оптимизации.
Откройте mbcOStemplate.m
в редакторе MATLAB.
mbcOStemplate.m
- пустая оптимизационная функция CAGE. Два (в настоящее время пустых) раздела функции options
(для определения атрибутов оптимизации) и optimstore
(для определения алгоритма оптимизации). Обратите внимание, что этот файл может использоваться в качестве шаблона для любой оптимизационной функции, которую вы записываете.
Следующим шагом является определение атрибутов оптимизации (в разделе 1 шаблона).
Откройте mbcOStutoptimfunc_s1.m
. В этом файле можно увидеть атрибуты оптимизации, которые были определены.
Ниже приведен фрагмент кода из этого файла:
Атрибуты оптимизации передаются в CAGE через cgoptimoptions
объект, на который ссылаются опции в коде в mbcOStutoptimfunc_s1.m
. Для получения дополнительной информации о cgoptimoptions
см. таблицу объект. The
cgoptimoptions
объект имеет набор функций, которые устанавливают атрибуты оптимизации в CAGE. Здесь вы задаете имя, описание, свободные переменные, целевые функции, ограничения, наборы вспомогательных данных и параметры оптимизации для оптимизации.
Подробную информацию обо всех доступных функциях см. в Ссылке по оптимизационным функциям в документации CAGE. Вышеуказанный код использовал cgoptimoptions
объект (options
), чтобы задать атрибуты оптимизации, как описано в следующей таблице.
Просмотрите код, чтобы найти перечисленную секцию кода Where Set для каждого атрибута, чтобы увидеть, как настроена каждая из опций оптимизации.
Признак | Значение | Секция кода, Где Set |
---|---|---|
Имя оптимизации |
| Add a name - setName |
Описание | Простой отработанный пример для максимизации крутящего момента | Add a description - setDescription |
Количество свободных переменных | Не может быть изменен пользователем в графическом интерфейсе пользователя (режим был установлен на | Set up the free variables - setFreeVariablesMode |
Требуемые свободные переменные | Эта функция требует двух свободных переменных, маркированных | Set up the free variables - addFreeVariables |
Количество целей | Не может быть изменен пользователем в графическом интерфейсе пользователя (режим был установлен на | Set up the objective functions - setObjectivesMode |
Необходимые целевые функции | Эта функция требует одной целевой функции, которая будет помечена | Set up the objective functions - addObjective |
Количество ограничений | Не может быть изменен пользователем в графическом интерфейсе пользователя (режим был установлен на | Set up the constraints - SetConstraintsMode |
Необходимые ограничения | Поскольку режим фиксирован и метки ограничений не заданы, эта оптимизация не имеет линейных или нелинейных ограничений. | Set up the constraints - %There are no constraints |
Количество наборов вспомогательных данных | Не может быть изменен пользователем в графическом интерфейсе пользователя (режим был установлен на | Set up the operating point sets - setOperatingPointsMode |
Параметры оптимизации | Эта функция позволит пользователю изменить пять параметров. Они будут отображены в диалоговом окне «Параметры оптимизации» и помечены 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)
Вот как ваша оптимизационная функция получает cgoptimoptions
объект. Обратите внимание, что ваша оптимизационная функция должна поддерживать этот интерфейс.
На этом шаге вы завершаете оптимизационную функцию, добавив свой алгоритм. Для этого нужно внести несколько изменений в код, который вызывает алгоритм, так как данные (для примера, свободные значения переменных, константы и так далее) теперь будут переданы в и из CAGE, а не из Рабочего пространства MATLAB.
Откройте mbcOStutoptimfunc.m
.
Этот файл содержит завершенный алгоритм оптимизации. Ниже приведен фрагмент кода из этого файла.
Добавлена одна линия, а именно
optimstore = tutoptimizer(optimstore)
Эта линия вызывает измененный алгоритм оптимизации. Обратите внимание на синтаксис алгоритма: он должен принимать форму
optimstore = <your_optimization_algorithm>(optimstore)
Локальная функция tutoptimizer
можно найти в нижней части файла mbcOStutoptimfunc.m
. Прокрутите вниз, чтобы просмотреть алгоритм, измененный для использования в CAGE.
optimstore
является cgoptimstore
объект. Это объект интерфейса, который позволяет вам получать данные и устанавливать данные в функции оптимизации CAGE. Теперь можно увидеть, как optimstore
объект используется путем сравнения измененного алгоритма оптимизации, tutoptimizer
, с исходным алгоритмом, currtutoptim
, для каждого из основных разделов алгоритма.
Следующие разделы иллюстрируют, как преобразовать существующий алгоритм для использования в CAGE. Обратите внимание, что в этом примере руководства код уже изменен для изучения.
Получите начальные условия (x0
) для свободных переменных.
Оригинальный код:
x0
передан из рабочего пространства MATLAB.
Модифицированный код:
x0 = getInitFreeVal(optimstore);
В исходном алгоритме x0
передается в алгоритм из рабочего пространства MATLAB. В CAGE мы вызываем getInitFreeVal
функция на optimstore
объект для извлечения x0
.
Выполните оптимизацию (в Разделе 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
функцию, как показано в следующей таблице.
Исходный вход | Вход для вычисления функции |
---|---|
S | X(1) |
A | X(2) |
Извлечение выходных данных.
Оригинальный код:
Оптимальные настройки свободной переменной возвращаются через переменную 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
Предоставленный рабочий пример предварительно регистрируется, поэтому его можно увидеть как опцию в мастере оптимизации при настройке новой оптимизации. Перед использованием новых функций необходимо зарегистрировать их. Когда вы изменили шаблон, чтобы создать свои собственные оптимизационные функции, как в этом примере, вы должны зарегистрировать его с помощью продукта Model-Based Calibration Toolbox в порядок, чтобы использовать функцию в CAGE. После сдачи оптимизационной функции на хранение она появляется в мастере оптимизации.
В CAGE выберите File > Preferences.
Откроется диалоговое окно Настройки CAGE (CAGE Preferences).
Щелкните вкладку Optimization и нажатие кнопки Add, чтобы перейти к вашему файлу.
Найдите файл mbcOStutoptimfunc.m
(в созданной вами рабочей папке) и нажмите Open.
Это регистрирует оптимизационную функцию с CAGE.
Теперь можно протестировать функцию, нажав Test. Это хорошая проверка на любые синтаксические ошибки в вашей оптимизационной функции. Это очень полезная функция, когда вы используете свои собственные функции; если что-то неправильно настроено, результаты теста подскажут, где начать корректировать свою функцию.
Пример этого можно было увидеть, сохранив копию рабочего файла примера и изменив одно из имен переменных (например afr
) на число. Попытайтесь проверить эту измененную функцию в CAGE, и кнопка Test вернет информативную ошибку с указанием линии, которую вы изменили.
Нажмите кнопку OK, чтобы покинуть диалоговое окно Настройки. Если оптимизационная функция проверена успешно, она регистрируется как оптимизационная функция, которая может использоваться в CAGE и появляется в мастере оптимизации.
Чтобы проверить алгоритм, мы настроили сеанс CAGE, чтобы запустить оптимизацию, которая была выполнена на шаге 1. В данном примере сеанс CAGE уже настроен. Выполните следующие шаги, чтобы запустить оптимизацию руководства в CAGE.
В CAGE выберите File > Open Project и загрузите файл optimworkedexample.cag
(если у вас уже нет открытого проекта). Этот проект находится в mbctraining
папка.
Выберите File > New > Optimization.
Вновь зарегистрированная оптимизация появится в списке имен алгоритмов. Выберите Tutorial_Optimization
из списка. Нажмите Next.
Совпадайте с переменными, как показано на рисунке.
Нажмите Next.
Соответствовать Torque
модель в tuttq
Модель CAGE, как показано.
Нажмите Finish.
Если вы запустили оптимизацию сейчас, она будет запускаться в одной точке, заданной точкой всех переменных. Вы используете свободные и фиксированные Variable Values панели, чтобы выбрать рабочие точки. Можно редактировать точки вручную или импортировать их. Выполните одно из следующих действий:
Если у вас есть предыдущая оптимизация отработанного примера в текущем сеансе, в представлении оптимизации увеличьте Number of runs до 36, а затем скопируйте и вставьте фиксированные значения переменных из предыдущей оптимизации.
Если у вас нет предыдущей оптимизации в сеанс, выберите Optimization > Import From Data Set. Файл проекта содержит набор данных со значениями N и L, и они выбираются автоматически. Нажмите OK для импорта.
Теперь вы должны иметь 36 строк как в фиксированных, так и в свободных панелях переменных, и значения рабочих точек в столбцах N и L на панели Fixed Variables. Начальные значения для A и искра для каждой точки являются заданными точками в словаре переменных.
Выберите Optimization > Set Up. Откроется диалоговое окно Параметры Оптимизации (Optimization Parameters). Наблюдайте пять параметров, определенных в учебном скрипте оптимизации.
Измените переменную и допуски функции на 1e-4
, и нажмите OK, чтобы закрыть диалоговое окно.
Запустите оптимизацию и просмотрите результаты. Матрица выходных данных должна напоминать следующую. Обратите внимание, что оптимальные значения для A и SPK очень похожи на значения из исходного алгоритма.