Задайте опции путем создания 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
CurrentPoint
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'
— Температура равна 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
:
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
boolean, со значением 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');
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
.
Выходные функции являются функциями, которые вызывает на каждой итерации алгоритм. Значение по умолчанию не должно иметь никакой выходной функции, []
. Необходимо сначала создать выходную функцию с помощью синтаксиса, описанного в Структуре Выходной функции.
Используя приложение Оптимизации:
Задайте Output function как @myfun
, где myfun
имя вашей функции.
Чтобы передать дополнительные параметры в выходной функции, используйте Анонимные функции.
Для нескольких выходных функций введите массив ячеек указателей выходной функции: {@myfun1,@myfun2,...}
.
В командной строке:
options = optimoptions(@simulannealbnd,'OutputFcn',@myfun);
Для нескольких выходных функций введите cell-массив указателей на функцию:
options = optimoptions(@simulannealbnd,... 'OutputFcn',{@myfun1,@myfun2,...});
Чтобы видеть шаблон, который можно использовать, чтобы записать собственные выходные функции, войти
edit saoutputfcntemplate
в командной строке MATLAB.
Выходная функция имеет следующий синтаксис вызова.
[stop,options,optchanged] = myfun(options,optimvalues,flag)
Функция имеет следующие входные параметры:
options
— Опции создали использование optimoptions
.
optimvalues
— Структура, содержащая информацию о текущем состоянии решателя. Структура содержит следующие поля:
x
CurrentPoint
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
— Значение функции средней температуры