Задайте опции путем создания объекта 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)
Входные параметры к функции
опции
Опции, созданные с помощью optimoptions
.
optimvalues
— Структура, содержащая информацию о текущем состоянии решателя. Структура содержит следующие поля:
x
CurrentPoint
fval
Значение целевой функции в x
bestx
— Лучшая точка найдена до сих пор
bestfval
— Значение целевой функции в лучшем случае указывает
temperature
— Текущая температура
iteration
— Текущая итерация
funccount
— Количество функциональных оценок
t0
Время начала для алгоритма
k
Отжиг параметра
флаг
Текущее состояние, в котором называется функция построения графика. Возможные значения для flag
'init'
— Состояние инициализации
'iter'
— Состояние итерации
сделанный
Конечное состояние
Выходной аргумент stop
обеспечивает способ остановить алгоритм в текущей итерации. stop
может иметь следующие значения:
ложь
Алгоритм продолжается к следующей итерации.
tRUE
Алгоритм останавливается в текущей итерации.
Температурные опции задают, как температура будет понижена в каждой итерации в течение алгоритма.
InitialTemperature
— Начальная температура в начале алгоритма. Значением по умолчанию является 100
. Начальная температура может быть вектором с той же длиной как x
, вектор неизвестных. simulannealbnd
расширяет скалярную начальную температуру в вектор.
TemperatureFcn
— Функция раньше обновляла температурное расписание. Позвольте k обозначить параметр отжига. (Параметр отжига совпадает с номером итерации до переотжига.) Опции:
'temperatureexp'
— Температура равна InitialTemperature * 0.95^k. Это значение по умолчанию.
'temperaturefast'
— Температура равна InitialTemperature / k.
'temperatureboltz'
— Температура равна InitialTemperature / ln (k).
@myfun
— Использует пользовательскую функцию, myfun
, чтобы обновить температуру. Синтаксис:
temperature = myfun(optimValues,options)
где optimValues
является структурой, описанной в Структуре Функций построения графика. options
или создается с optimoptions
или состоит из опций по умолчанию, если вы не создали опций. И параметр отжига optimValues.k
и температурный optimValues.temperature
являются векторами с длиной, равной числу элементов текущей точки x
. Например, функциональный temperaturefast
:
temperature = options.InitialTemperature./optimValues.k;
Настройки алгоритма задают алгоритмические определенные параметры, используемые в генерации новых точек в каждой итерации.
Параметры, которые могут быть заданы для simulannealbnd
:
Тип данных
Тип данных, чтобы использовать в целевой функции. Выбор:
'double'
(значение по умолчанию) — Вектор типа double
.
'custom'
— Любой другой тип данных. Необходимо обеспечить функцию отжига 'custom'
. Вы не можете использовать гибридную функцию.
AnnealingFcn
— Функция раньше генерировала новые точки для следующей итерации. Выбор:
'annealingfast'
— Шаг имеет температуру длины с направлением однородно наугад. Это значение по умолчанию.
'annealingboltz'
— Шаг имеет квадратный корень длины из температуры с направлением однородно наугад.
@myfun
— Использует пользовательский алгоритм отжига, myfun
. Синтаксис:
newx = myfun(optimValues,problem)
optimValues
является структурой, описанной в Структуре Выходной функции, и problem
является структурой, содержащей следующую информацию:цель:
указатель на функцию к целевой функции
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'
— Использует функцию Optimization Toolbox fmincon
, чтобы выполнить ограниченную минимизацию.
Гарантируйте, что ваша гибридная функция принимает ваши ограничения задач. В противном случае simulannealbnd
выдает ошибку.
Можно установить отдельные опции для гибридной функции. Используйте optimset
для fminsearch
или optimoptions
для fmincon
, patternsearch
или fminunc
. Например:
hybridopts = optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');
options
simulannealbnd
можно следующим образом:options = optimoptions(@simulannealbnd,options,'HybridFcn',{@fminunc,hybridopts});
hybridopts
должен существовать, прежде чем вы установите options
.См. Гибридную Схему в Генетическом алгоритме для примера. Смотрите, Когда Использовать Гибридную Функцию.
Критерий остановки определяет то, что заставляет алгоритм останавливаться. Можно задать следующие опции:
FunctionTolerance
— Выполнения алгоритма до среднего изменения в значении целевой функции в итерациях StallIterLim
являются меньше, чем FunctionTolerance
. Значением по умолчанию является 1e-6
.
'MaxIterations'
Алгоритм останавливается, если количество итераций превышает это максимальное количество итераций. Можно задать максимальное количество итераций как положительное целое число или Inf
. Inf
является значением по умолчанию.
MaxFunctionEvaluations
задает максимальное количество оценок целевой функции. Алгоритм останавливается, если количество функциональных оценок превышает максимальное количество функциональных оценок. Позволенным максимумом является 3000*numberofvariables
.
MaxTime
задает максимальное время в секундах выполнения алгоритма перед остановкой.
ObjectiveLimit
— Алгоритм останавливается, если лучшее значение целевой функции меньше чем или равно значению ObjectiveLimit
.
Выходные функции являются функциями, что алгоритм заходит в каждую итерацию. Значение по умолчанию не должно иметь никакой выходной функции, []
. Необходимо сначала создать выходную функцию с помощью синтаксиса, описанного в Структуре Выходной функции.
Используя приложение Оптимизации:
Задайте Output function как @myfun
, где myfun
является именем вашей функции.
Чтобы передать дополнительные параметры в выходной функции, используйте Анонимные функции (Optimization Toolbox).
Для нескольких выходных функций введите массив ячеек указателей выходной функции: {@myfun1,@myfun2,...}
.
В командной строке:
options = optimoptions(@simulannealbnd,'OutputFcn',@myfun);
Для нескольких выходных функций введите cell-массив указателей на функцию:
options = optimoptions(@simulannealbnd,'OutputFcn',{@myfun1,@myfun2,...});
Чтобы видеть шаблон, который можно использовать, чтобы записать собственные выходные функции, войти
edit saoutputfcntemplate
в командной строке MATLAB.
Выходная функция имеет следующий синтаксис вызова.
[stop,options,optchanged] = myfun(options,optimvalues,flag)
Функция имеет следующие входные параметры:
опции
Опции, созданные с помощью optimoptions
.
optimvalues
— Структура, содержащая информацию о текущем состоянии решателя. Структура содержит следующие поля:
x
CurrentPoint
fval
Значение целевой функции в x
bestx
— Лучшая точка найдена до сих пор
bestfval
— Значение целевой функции в лучшем случае указывает
temperature
— Текущая температура, вектор та же длина как x
iteration
— Текущая итерация
funccount
— Количество функциональных оценок
t0
Время начала для алгоритма
k
Отжигая параметр, вектор та же длина как x
флаг
Текущее состояние, в котором называется выходная функция. Возможные значения для flag
'init'
— Состояние инициализации
'iter'
— Состояние итерации
сделанный
Конечное состояние
Передача Дополнительных Параметров (Optimization Toolbox) объясняет, как предоставить дополнительные параметры выходной функции.
Выходная функция возвращает следующие аргументы:
остановка
Обеспечивает способ остановить алгоритм в текущей итерации. stop
может иметь следующие значения:
ложь
Алгоритм продолжается к следующей итерации.
tRUE
Алгоритм останавливается в текущей итерации.
опции
Опции, как изменено выходной функцией.
optchanged
— Булев флаг, указывающий на изменения, был сделан к options
. Это должно быть установлено в true
, если опции изменяются.
Используйте опцию Display
, чтобы задать, сколько информации отображено в командной строке, в то время как алгоритм запускается. Доступные параметры
off
— No вывод отображен. Это - значение по умолчанию для options
, экспортируемого из приложения Оптимизации.
iter
— Информация отображена в каждой итерации.
диагностирование
Информация отображена в каждой итерации. Кроме того, диагностика перечисляет некоторую информацию о проблеме и опции, которые были изменены от значений по умолчанию.
final
— Причина остановки отображена. Это - значение по умолчанию для опций, созданных с помощью optimoptions
.
И iter
и diagnose
отображают следующую информацию:
Iteration
— Номер итерации
f-count
— Совокупное число оценок целевой функции
Best f(x)
— Лучшее значение целевой функции
Current f(x)
— Текущее значение целевой функции
Mean Temperature
— Значение функции средней температуры