Задайте опции путем создания options
объект с использованием optimoptions
функционировать следующим образом:
options = optimoptions(@simulannealbnd,'Param1',value1,'Param2',value2, ...);
Каждая опция в этом разделе указана по имени поля в options
. Для примера, InitialTemperature
относится к соответствующему полю options
.
Опции Plot позволяют вам построить график данных из моделируемого решателя отжига во время его работы.
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
- Current point
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'
- Температура равна начальной температуре/лн (k).
@myfun
- Использует пользовательскую функцию, myfun
, для обновления температуры. Синтаксис:
temperature = myfun(optimValues,options)
где optimValues
- структура, описанная в Structure of the Функции Построения Графика. 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
является структурой, описанной в Structure of the Выходная Функция, и 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'
- Использует функцию 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
.
Выходные функции являются функциями, которые алгоритм вызывает при каждой итерации. Значение по умолчанию должно быть без выходной функции, []
. Сначала необходимо создать выходную функцию с помощью синтаксиса, описанного в Structure of the Output Function.
Использование приложения Оптимизации:
Задайте 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
- Current point
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
- Среднее значение функции температуры