Функция оптимизации CAGE позволяет вам использовать свои собственные алгоритмы оптимизации в качестве альтернатив библиотечным подпрограммам fmincon
, NBI
, ga
и patternsearch
.
Используя пример, этот пример иллюстрирует, как взять существующий алгоритм оптимизации и реализовать его как оптимизационную функцию для использования в оптимизации CAGE.
Проблемой, которая будет решена, является обработанная проблема в качестве примера:
Максимизируйте крутящий момент (TQ
) по свободным переменным (SPK, AFR
) по заданному набору (N, L
'points'. Эти точки заданы в наборе данных New_Dataset
, который может быть найден на сеансе CAGE optimworkedexample.cag
и может быть импортирован в панель значений фиксированной переменной в представлении Optimization.
Модель крутящего момента, которая будет использоваться, является этим в /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 к данным о необходимой переменной для вашего алгоритма
Любые другие параметры требуются алгоритмом оптимизации
Второй раздел содержит алгоритм оптимизации.
Открытый mbcOStemplate.m
в редакторе MATLAB.
mbcOStemplate.m
пустая оптимизационная функция CAGE. Двумя (в настоящее время пустой) разделы функции является options
(для определения атрибутов оптимизации) и optimstore
(для определения вашего алгоритма оптимизации). Обратите внимание на то, что этот файл может использоваться в качестве шаблона для любой оптимизационной функции, которую вы пишете.
Следующий шаг должен задать атрибуты вашей оптимизации (в Разделе 1 из шаблона).
Открытый mbcOStutoptimfunc_s1.m
. В этом файле вы видите атрибуты оптимизации, которые были заданы.
Следующее является фрагментом кода из этого файла:
Атрибуты оптимизации передаются CAGE через cgoptimoptions
объект, на который ссылаются опции в коде в mbcOStutoptimfunc_s1.m
. Присматривайте за таблицей для деталей cgoptimoptions
объект. cgoptimoptions
объект имеет набор функций, которые устанавливают атрибуты оптимизации в CAGE. Это - то, где вы задаете имя, описание, свободные переменные, целевые функции, ограничения, наборы данных помощника и параметры оптимизации для оптимизации.
Для получения дальнейшей информации на всех доступных функциях, смотрите Ссылку Оптимизационной функции в документации CAGE. Вышеупомянутый код использовал cgoptimoptions
объект (options
) установить атрибуты оптимизации как описано в следующей таблице.
Просмотрите код, чтобы определить местоположение перечисленной Секции кода, Где Установлено для каждого атрибута, чтобы видеть, как каждая из опций оптимизации настраивается.
Атрибут | Значение | Секция кода, где установлено |
---|---|---|
Имя оптимизации |
| 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 |
Параметры оптимизации | Эта функция позволит пользователю изменять пять параметров. Они будут отображены в диалоговом окне 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)
Это - то, как ваша оптимизационная функция получает 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 появляется.
Кликните по вкладке Optimization и нажмите Add, чтобы просмотреть к вашему файлу.
Найдите файл mbcOStutoptimfunc.m
(в рабочей папке вы создали), и нажмите Open.
Это указывает оптимизационную функцию с CAGE.
Можно теперь протестировать функцию путем нажатия на Test. Это - хорошая проверка на любые синтаксические ошибки в вашей оптимизационной функции. Это - очень полезная функция, когда вы используете свои собственные функции; если что-нибудь будет неправильно настроено, то результаты испытаний скажут вам, где начать корректировать вашу функцию.
Вы видели пример этого путем сохранения копии обработанного файла в качестве примера и изменения одних из имен переменных (таких как afr
) к номеру. Попытайтесь проверять эту измененную функцию в CAGE, и кнопка Test возвратит информативную ошибку при определении линии, которую вы изменили.
Нажмите OK, чтобы оставить диалоговое окно Настроек CAGE. Если оптимизационная функция протестировала успешно, она указана как оптимизационная функция, которая может использоваться в 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 очень похожи на тех из исходного алгоритма.