Укажите параметры, создав options с использованием optimoptions выполнять следующие функции:
options = optimoptions(@simulannealbnd,'Param1',value1,'Param2',value2, ...);
Каждый параметр в этом разделе указан по имени поля в options. Например, InitialTemperature относится к соответствующему полю options.
Опции печати позволяют выводить на печать данные из смоделированного решателя отжига во время его работы.
PlotInterval определяет количество итераций между последовательными вызовами функции печати.
Отображение графика при вызове simulannealbnd в командной строке установите PlotFcn поле options является встроенным именем функции графика или дескриптором функции графика. Можно указать любой из следующих графиков:
'saplotbestf' строит график наилучшего значения целевой функции.
'saplotbestx' выводит на график текущую наилучшую точку.
'saplotf' отображает текущее значение функции.
'saplotx' строит график текущей точки.
'saplotstopping' печать уровней критериев остановки.
'saplottemperature' строит график температуры на каждой итерации.
@myfun печать пользовательской функции печати, где myfun - имя функции. Описание синтаксиса см. в разделе Структура функций печати.
Например, чтобы отобразить лучший целевой график, задайте options следующим образом
options = optimoptions(@simulannealbnd,'PlotFcn','saplotbestf');
Для отображения нескольких графиков используйте синтаксис массива ячеек
options = optimoptions(@simulannealbnd,'PlotFcn',{@plotfun1,@plotfun2, ...});где @plotfun1, @plotfun2и так далее являются дескрипторами функций для функций графика.
Если задано несколько функций печати, все графики отображаются в одном окне как вложенные. Щелкните правой кнопкой мыши любой вложенный график, чтобы получить более крупную версию в отдельном окне рисунка.
Первая строка функции графика имеет вид
function stop = plotfun(options,optimvalues,flag)
Входные аргументы функции:
options - Параметры, созданные с помощью optimoptions.
optimvalues - структура, содержащая информацию о текущем состоянии решателя. Структура содержит следующие поля:
x - Текущая точка
fval - Значение целевой функции при x
bestx - Лучшая точка, найденная на данный момент
bestfval - Значение целевой функции в лучшей точке
temperature - Текущая температура
iteration - Текущая итерация
funccount - Количество оценок функций
t0 - Время запуска алгоритма
k - Параметр отжига
flag - текущее состояние, в котором вызывается функция графика. Возможные значения для flag являются
'init' - Состояние инициализации
'iter' - Состояние итерации
'done' - Конечное состояние
Выходной аргумент stop предоставляет способ остановить алгоритм в текущей итерации. stop могут иметь следующие значения:
false - алгоритм переходит к следующей итерации.
true - алгоритм завершается на текущей итерации.
Параметры температуры определяют, как температура будет понижаться при каждой итерации в течение алгоритма.
InitialTemperature - Начальная температура на запуске алгоритма. Значение по умолчанию: 100. Начальная температура может быть вектором той же длины, что и x, вектор неизвестных. simulannealbnd расширяет скалярную начальную температуру в вектор.
TemperatureFcn - Функция, используемая для обновления температурного графика. Пусть k обозначает параметр отжига. (Параметр отжига совпадает с номером итерации до повторного отжига.) Возможны следующие варианты:
'temperatureexp' - Температура равна InitityTemperature * 0,95 ^ k. Это значение по умолчанию.
'temperaturefast' - температура равна InitityTemperature/k.
'temperatureboltz' - Температура равна InitityTemperature/ln (k).
@myfun - Использует пользовательскую функцию, myfun, для обновления температуры. Синтаксис:
temperature = myfun(optimValues,options)
где optimValues - структура, описанная в разделе Структура функций графика. options создан с помощью optimoptions, или состоит из опций по умолчанию, если не были созданы какие-либо опции. Оба параметра отжига optimValues.k и температура optimValues.temperature - векторы с длиной, равной числу элементов текущей точки x. Например, функция temperaturefast является:
temperature = options.InitialTemperature./optimValues.k;
Настройки алгоритма определяют алгоритмические специфические параметры, используемые при формировании новых точек на каждой итерации.
Параметры, которые могут быть указаны для simulannealbnd являются:
DataType - тип данных для использования в целевой функции. Варианты:
'double' (по умолчанию) - вектор типа double.
'custom' - Любой другой тип данных. Вы должны предоставить 'custom' функция отжига. Нельзя использовать гибридную функцию.
AnnealingFcn - функция, используемая для создания новых точек для следующей итерации. Возможны следующие варианты:
'annealingfast' - Шаг имеет длину температуры, с направлением равномерно случайным. Это значение по умолчанию.
'annealingboltz' - Шаг имеет длину квадратный корень от температуры, с направлением равномерно случайным.
@myfun - Использует пользовательский алгоритм отжига, myfun. Синтаксис:
newx = myfun(optimValues,problem)
optimValues - структура, описанная в разделе Структура функции вывода, и problem - структура, содержащая следующую информацию:objective: дескриптор функции для целевой функции
x0: начальная точка
nvarколичество переменных для принятия решений
lb: нижняя граница для переменных принятия решений
ub: верхняя граница для переменных принятия решений
Например, текущая позиция optimValues.x, и текущее значение целевой функции problem.objective(optimValues.x).
Можно написать пользовательскую целевую функцию, изменив saannealingfcntemplate.m файл. Чтобы сохранить все итерации в пределах границ, вызовите пользовательскую функцию отжига. sahonorbounds в качестве окончательной команды.
ReannealInterval - Количество баллов, принятых до повторного отжига. Значение по умолчанию: 100.
AcceptanceFcn - Функция, используемая для определения того, принимается ли новая точка или нет:
'acceptancesa' - Функция приемки смоделированного отжига по умолчанию. Если новое значение целевой функции меньше старого, новая точка всегда принимается. В противном случае новая точка принимается случайным образом с вероятностью, зависящей от разности значений целевой функции и от текущей температуры. Вероятность принятия -
)),
где Δ = новый объект - старый объект, а T - текущая температура. Поскольку Δ и T положительны, вероятность принятия находится в диапазоне от 0 до 1/2. Меньшая температура приводит к меньшей вероятности принятия. Кроме того, большее Δ приводит к меньшей вероятности принятия.
@myfun - Пользовательская функция приемки, myfun. Синтаксис:
acceptpoint = myfun(optimValues,newx,newfval);
optimValues - структура, описанная в разделе Структура функции вывода, newx является точкой, оцениваемой для принятия, и newfval является целевой функцией при newx. acceptpoint является логическим, со значением true принять newx, и false отклонить newx.Гибридная функция - это другая функция минимизации, которая выполняется во время или в конце итераций решателя. HybridInterval определяет интервал (если нет never или end), при котором вызывается гибридная функция. Вы можете указать гибридную функцию с помощью HybridFcn вариант. Возможны следующие варианты:
[] - Гибридная функция отсутствует.
'fminsearch' - Использует функцию MATLAB ®fminsearch для выполнения неограниченной минимизации.
'patternsearch' - Использование patternsearch для выполнения ограниченной или неограниченной минимизации.
'fminunc' - Использует функцию Optimization Toolbox™ fminunc для выполнения неограниченной минимизации.
'fmincon' - Использует функцию «Панель инструментов оптимизации» fmincon для выполнения ограниченной минимизации.
Примечание
Убедитесь, что гибридная функция принимает ограничения проблемы. В противном случае simulannealbnd выдает ошибку.
Для гибридной функции можно задать отдельные опции. Использовать optimset для fminsearch, или optimoptions для fmincon, patternsearch, или fminunc. Например:
hybridopts = optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');simulannealbnd
options следующим образом:options = optimoptions(@simulannealbnd,options,'HybridFcn',{@fminunc,hybridopts}); hybridopts должен существовать до установки options.Пример см. в разделе Гибридная схема в генетическом алгоритме. См. раздел Когда использовать гибридную функцию.
Критерии остановки определяют причины завершения работы алгоритма. Можно задать следующие параметры:
FunctionTolerance - Алгоритм работает до среднего изменения значения целевой функции в StallIterLim итерации меньше, чем FunctionTolerance. Значение по умолчанию: 1e-6.
MaxIterations - алгоритм останавливается, если число итераций превышает это максимальное число итераций. Можно указать максимальное число итераций как положительное целое число или Inf. Inf является значением по умолчанию.
MaxFunctionEvaluations указывает максимальное количество оценок целевой функции. Алгоритм останавливается, если число оценок функций превышает максимальное число оценок функций. Максимально допустимое значение: 3000*numberofvariables.
MaxTime указывает максимальное время в секундах, в течение которого алгоритм запускается перед остановкой.
ObjectiveLimit - Алгоритм останавливается, если наилучшее значение целевой функции меньше ObjectiveLimit.
Функции вывода - это функции, которые алгоритм вызывает в каждой итерации. Значение по умолчанию - отсутствие функции вывода, []. Сначала необходимо создать функцию вывода с использованием синтаксиса, описанного в разделе Структура функции вывода.
Использование приложения Оптимизация:
Укажите функцию вывода как @myfun, где myfun - имя функции.
Для передачи дополнительных параметров функции вывода используйте анонимные функции.
Для нескольких выходных функций введите массив ячеек дескрипторов выходных функций: {@myfun1,@myfun2,...}.
В командной строке:
options = optimoptions(@simulannealbnd,'OutputFcn',@myfun);
Для нескольких функций вывода введите массив ячеек дескрипторов функций:
options = optimoptions(@simulannealbnd,'OutputFcn',{@myfun1,@myfun2,...});Для просмотра шаблона, который можно использовать для записи собственных функций вывода, введите
edit saoutputfcntemplate
в командной строке MATLAB.
Функция вывода имеет следующий синтаксис вызова.
[stop,options,optchanged] = myfun(options,optimvalues,flag)
Функция имеет следующие входные аргументы:
options - Параметры, созданные с помощью optimoptions.
optimvalues - структура, содержащая информацию о текущем состоянии решателя. Структура содержит следующие поля:
x - Текущая точка
fval - Значение целевой функции при x
bestx - Лучшая точка, найденная на данный момент
bestfval - Значение целевой функции в лучшей точке
temperature - Текущая температура, вектор той же длины, что и x
iteration - Текущая итерация
funccount - Количество оценок функций
t0 - Время запуска алгоритма
k - параметр отжига, вектор той же длины, что и x
flag - текущее состояние, в котором вызывается функция вывода. Возможные значения для flag являются
'init' - Состояние инициализации
'iter' - Состояние итерации
'done' - Конечное состояние
Передача дополнительных параметров объясняет, как предоставить дополнительные параметры функции вывода.
Функция вывода возвращает следующие аргументы:
stop - предоставляет способ остановить алгоритм в текущей итерации. stop могут иметь следующие значения:
false - алгоритм переходит к следующей итерации.
true - алгоритм завершается на текущей итерации.
options - Опции, измененные функцией вывода.
optchanged - Логический флаг, указывающий на внесение изменений в options. Необходимо установить значение true если параметры изменены.
Используйте Display указывает, какой объем информации отображается в командной строке во время работы алгоритма. Доступные опции:
off - Выходные данные не отображаются. Это значение по умолчанию для options экспортировано из приложения Оптимизация.
iter - Информация отображается в каждой итерации.
diagnose - Информация отображается в каждой итерации. Кроме того, в диагностике перечислены некоторые сведения о проблемах и параметры, которые были изменены по умолчанию.
final - Отображается причина остановки. Это значение по умолчанию для опций, созданных с помощью optimoptions.
Оба iter и diagnose отображает следующую информацию:
Iteration - Номер итерации
f-count - Совокупное число оценок целевых функций
Best f(x) - Наилучшее значение целевой функции
Current f(x) - Текущее значение целевой функции
Mean Temperature - Среднее значение температурной функции