simulannealbnd

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

Описание

пример

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

Примечание

Передача дополнительных параметров объясняет, как передать дополнительные параметры целевой функции, если это необходимо.

пример

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.

Минимизируйте пятую функцию Де Йонга, используя 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

The 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

The 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

The 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

Level of 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.

Указатель на функцию | cell-массив указателей на функцию | {[]}

PlotFcn

Постройте график функции (ей), вызываемой во время итераций

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

Указатель на функцию | встроенное имя функции построения графика | cell-массив указателей на функцию | массив ячеек встроенных имен функции построения графика | '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 stop, возвращается как целое число.

Выходной флагЗначение
1

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

5

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

0

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

-1

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

-2

Допустимая точка не найдена.

-5

Превышено ограничение по времени.

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

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

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

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

  • message - причина завершения алгоритма.

  • temperature - Температура при отключении решателя.

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

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

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

Приложение

Задача Optimize Live Editor обеспечивает визуальный интерфейс для simulannealbnd.

Введенный в R2007a
Для просмотра документации необходимо авторизоваться на сайте