exponenta event banner

simulannealbnd

Найти минимум функции с помощью моделируемого алгоритма отжига

Описание

пример

x = simulannealbnd(fun,x0) находит локальный минимум, x, к дескриптору функции fun вычисляет значения целевой функции. x0 является начальной точкой для моделируемого алгоритма отжига, действительным вектором.

Примечание

В разделе Передача дополнительных параметров (Passing Extra Parameters) объясняется, как передать дополнительные параметры целевой функции при необходимости.

пример

x = simulannealbnd(fun,x0,lb,ub) определяет набор нижних и верхних границ для конструктивных переменных в x, чтобы решение всегда находилось в диапазоне lb  x  ub. Если x(i) не ограничен ниже, набор lb(i) = -Inf, и если x(i) не ограничен выше, набор ub(i) = Inf.

пример

x = simulannealbnd(fun,x0,lb,ub,options) минимизирует с помощью опций оптимизации, указанных в options. Создать options использование optimoptions. Если границ не существует, установите lb = [] и/или ub = [].

x = simulannealbnd(problem) находит минимальное значение для problem, структура, описанная в problem.

[x,fval] = simulannealbnd(___)для любого синтаксиса возвращает значение целевой функции fun на решении x.

пример

[x,fval,exitflag,output] = simulannealbnd(___) дополнительно возвращает значение exitflag который описывает условие выхода simulannealbndи структура output с информацией о процессе оптимизации.

Примеры

свернуть все

Минимизируйте пятую функцию Де Йонга, двумерную функцию со многими локальными минимумами.

Постройте пятую функцию Де Йонга.

dejong5fcn

Figure contains an axes. The axes contains 2 objects of type surface, contour.

Минимизация пятой функции De Jong с помощью simulannealbnd начиная с точки [0,0].

fun = @dejong5fcn;
x0 = [0 0];
x = simulannealbnd(fun,x0)
Optimization terminated: change in best function value less than options.FunctionTolerance.
x = 1×2

  -32.0285   -0.1280

simulannealbnd алгоритм использует поток случайных чисел MATLAB ®, поэтому можно получить другой результат.

Минимизируйте пятую функцию Де Йонга в пределах ограниченной области.

Постройте пятую функцию Де Йонга.

dejong5fcn

Figure contains an axes. The axes contains 2 objects of type surface, contour.

Начать simulannealbnd начиная с точки [0,0]и установите нижние границы -64 и верхние границы 64 для каждого компонента.

fun = @dejong5fcn;
x0 = [0 0];
lb = [-64 -64];
ub = [64 64];
x = simulannealbnd(fun,x0,lb,ub)
Optimization terminated: change in best function value less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

simulannealbnd алгоритм использует поток случайных чисел MATLAB ®, поэтому можно получить другой результат.

Наблюдать за ходом выполнения simulannealbnd заданием параметров для использования некоторых функций печати.

Задайте параметры моделирования отжига для использования нескольких функций печати.

options = optimoptions('simulannealbnd','PlotFcns',...
          {@saplotbestx,@saplotbestf,@saplotx,@saplotf});

Начать simulannealbnd начиная с точки [0,0]и установите нижние границы -64 и верхние границы 64 для каждого компонента.

rng default % For reproducibility
fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
x = simulannealbnd(fun,x0,lb,ub,options)

Figure Simulated Annealing contains 4 axes. Axes 1 with title Best point contains an object of type bar. Axes 2 with title Best Function Value: 1.99203 contains an object of type line. Axes 3 with title Current Point contains an object of type bar. Axes 4 with title Current Function Value: 1.99203 contains an object of type line.

Optimization terminated: change in best function value less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

Получение всех выходных данных моделирования минимизации отжига.

Постройте пятую функцию Де Йонга.

dejong5fcn

Figure contains an axes. The axes contains 2 objects of type surface, contour.

Начать simulannealbnd начиная с точки [0,0]и установите нижние границы -64 и верхние границы 64 для каждого компонента.

fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
[x,fval,exitflag,output] = simulannealbnd(fun,x0,lb,ub)
Optimization terminated: change in best function value less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

fval = 1.9920
exitflag = 1
output = struct with fields:
     iterations: 1762
      funccount: 1779
        message: 'Optimization terminated: change in best function value less than options.FunctionTolerance.'
       rngstate: [1x1 struct]
    problemtype: 'boundconstraints'
    temperature: [2x1 double]
      totaltime: 0.5595

simulannealbnd алгоритм использует поток случайных чисел MATLAB ®, поэтому можно получить другой результат.

Входные аргументы

свернуть все

Функция, подлежащая минимизации, указывается как дескриптор функции или имя функции.fun - функция, принимающая вектор x и возвращает действительный скаляр f, целевая функция, оцененная на x.

fun может быть указан как дескриптор функции для файла:

x = simulannealbnd(@myfun,x0)

где myfun является функцией MATLAB ®, такой как

function f = myfun(x)
f = ...            % Compute function value at x

fun также может быть дескриптором функции для анонимной функции:

x = simulannealbnd(@(x)norm(x)^2,x0,lb,ub);

Пример: fun = @(x)sin(x(1))*cos(x(2))

Типы данных: char | function_handle | string

Начальная точка, заданная как действительный вектор. simulannealbnd использует количество элементов в x0 для определения количества переменных, которые fun принимает.

Пример: x0 = [1,2,3,4]

Типы данных: double

Нижние границы, определяемые как вещественный вектор или вещественный массив. Если количество элементов в x0 равно значению lb, то lb указывает, что

x(i) >= lb(i) для всех i.

Если numel(lb) < numel(x0), то lb указывает, что

x(i) >= lb(i) для 1 <= i <= numel(lb).

В этом случае решатели выдают предупреждение.

Пример: Чтобы указать, что все управляющие переменные являются положительными, lb = zeros(size(x0))

Типы данных: double

Верхние границы, заданные как вещественный вектор или вещественный массив. Если количество элементов в x0 равно значению ub, то ub указывает, что

x(i) <= ub(i) для всех i.

Если numel(ub) < numel(x0), то ub указывает, что

x(i) <= ub(i) для 1 <= i <= numel(ub).

В этом случае решатели выдают предупреждение.

Пример: Чтобы указать, что все управляющие переменные меньше единицы, ub = ones(size(x0))

Типы данных: double

Параметры оптимизации, указанные как объект, возвращаемый optimoptions или структура. Дополнительные сведения см. в разделе Параметры имитационного отжига.

optimoptions скрывает варианты, перечисленные курсивом; см. раздел Опциональные опции Скрытие.

{} обозначает значение по умолчанию. Дополнительные сведения см. в разделе «Параметры имитационного отжига».

ВыборОписаниеЦенности

AcceptanceFcn

Функция, используемая алгоритмом для определения того, принята ли новая точка. Укажите как 'acceptancesa' или дескриптор функции.

Дескриптор функции | {'acceptancesa'}

AnnealingFcn

Функция, используемая алгоритмом для генерации новых точек. Укажите в качестве имени встроенной функции отжига или дескриптора функции.

Дескриптор функции | имя функции | 'annealingboltz' | {'annealingfast'}

DataType

Тип переменной принятия решения

'custom' | {'double'}

Display

Уровень отображения

'off' | 'iter' | 'diagnose' | {'final'}

DisplayInterval

Интервал итеративного отображения

Положительное целое число | {10}

FunctionTolerance

Допуск окончания для значения функции

Для структуры опций используйте TolFun.

Положительный скаляр | {1e-6}

HybridFcn

Автоматический запуск HybridFcn (другая функция оптимизации) во время или в конце итераций решателя. Укажите в качестве имени или дескриптора функции.

См. раздел Когда использовать гибридную функцию.

'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

или

массив ячеек 1 на 2 | {@solver, hybridoptions}, где solver = fminsearch, patternsearch, fminunc, или fmincon {[]}

HybridInterval

Интервал (если нет) 'end' или 'never') при котором HybridFcn называется

Положительное целое число | 'never' | {'end'}

InitialTemperature

Начальное значение температуры

Положительный скаляр | положительный вектор | {100}

MaxFunctionEvaluations

Максимально допустимое количество оценок целевых функций

Для структуры опций используйте MaxFunEvals.

Положительное целое число | {3000*numberOfVariables}

MaxIterations

Максимально допустимое число итераций

Для структуры опций используйте MaxIter.

Положительное целое число | {Inf}

MaxStallIterations

Количество итераций, по которым среднее изменение значения фитнес-функции в текущей точке меньше options.FunctionTolerance

Для структуры опций используйте StallIterLimit.

Положительное целое число | {500*numberOfVariables}

MaxTime

Алгоритм останавливается после выполнения для MaxTime секунды

Для структуры опций используйте TimeLimit.

Положительный скаляр | {Inf}

ObjectiveLimit

Требуемое минимальное значение целевой функции

Скаляр | {-Inf}

OutputFcn

Функции получают итеративные данные и могут изменять параметры во время выполнения

Для структуры опций используйте OutputFcns.

Дескриптор функции | массив ячеек дескрипторов функции | {[]}

PlotFcn

Функции печати, вызываемые во время итераций

Для структуры опций используйте PlotFcns.

Дескриптор функции | имя встроенной функции графика | массив ячеек дескрипторов функции | массив ячеек встроенных имен функций графика | 'saplotbestf' | 'saplotbestx' | 'saplotf' | 'saplotstopping' | 'saplottemperature' | {[]}

PlotInterval

Функции графика вызываются на каждом интервале

Положительное целое число | {1}

ReannealInterval

Интервал повторного отжига

Положительное целое число | {100}

TemperatureFcn

Функция, используемая для обновления температурного графика

Дескриптор функции | имя встроенной функции температуры | 'temperatureboltz' | 'temperaturefast' | {'temperatureexp'}

Пример: options = optimoptions(@simulannealbnd,'MaxIterations',150)

Типы данных: struct

Структура проблемы, заданная как структура со следующими полями:

  • objective - Целевая функция

  • x0 - Начальная точка

  • lb - Нижняя граница для x

  • ub - Верхняя граница для x

  • solver'simulannealbnd'

  • options - Параметры, созданные с помощью optimoptions или структура опций

  • rngstate - Необязательное поле для сброса состояния генератора случайных чисел

Примечание

problem должны иметь все поля, указанные выше.

Типы данных: struct

Выходные аргументы

свернуть все

Решение, возвращенное как реальный вектор. Размер x совпадает с размером x0. Как правило, x является локальным решением проблемы, когда exitflag является положительным.

Значение целевой функции в решении, возвращаемое как вещественное число. Как правило, fval = fun(x).

Причина simulannealbnd остановлено, возвращено как целое число.

Флаг выходаЗначение
1

Среднее изменение значения целевой функции options.MaxStallIterations итерации меньше, чем options.FunctionTolerance.

5

Значение целевой функции меньше options.ObjectiveLimit.

0

Достигнуто максимальное число оценок или итераций функций.

-1

Оптимизация завершается функцией вывода или функцией графика.

-2

Выполнимая точка не найдена.

-5

Превышен лимит времени.

Информация о процессе оптимизации, возвращенная в виде структуры с полями:

  • problemtype - Тип проблемы: без ограничений или с ограничениями.

  • iterations - число вычисленных итераций.

  • funccount - количество оценок целевой функции.

  • message - Причина прекращения работы алгоритма.

  • temperature - Температура при прекращении работы решателя.

  • totaltime - общее время запуска решателя.

  • rngstate - состояние генератора случайных чисел MATLAB непосредственно перед запуском алгоритма. Можно использовать значения в rngstate для воспроизведения выходных данных simulannealbnd. См. раздел Воспроизведение результатов.

Альтернативная функциональность

Приложение

Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для simulannealbnd.

Представлен в R2007a