simulannealbnd

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

Синтаксис

x = simulannealbnd(fun,x0)
x = simulannealbnd(fun,x0,lb,ub)
x = simulannealbnd(fun,x0,lb,ub,options)
x = simulannealbnd(problem)
[x,fval] = simulannealbnd(___)
[x,fval,exitflag,output] = simulannealbnd(___)

Описание

пример

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

Примечание

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

пример

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 является структурой, описанной в. Создайте структуру problem путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы (Optimization Toolbox).

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

пример

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

Примеры

свернуть все

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

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

dejong5fcn

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

Запустите 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)

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

  -15.9790  -31.9593

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

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

dejong5fcn

Запустите 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.5131

Алгоритм 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 скрывает опции, перечисленные курсивом; см. Опции, которые Скрывает 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

Функция (функции) получает (s) итеративные данные и может изменить опции во время выполнения

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

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

PlotFcn

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

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

Указатель на функцию | встроенное имя функции построения графика | cell-массив указателей на функцию | массив ячеек встроенной функции построения графика называет | 'saplotbestf' | 'saplotbestx' | 'saplotf' | 'saplotstopping' | 'saplottemperature' | {[]}

PlotInterval

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

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

ReannealInterval

Переотжиг интервала

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

TemperatureFcn

Функция раньше обновляла температурное расписание

Указатель на функцию | встроенное температурное имя функции | 'temperatureboltz' | 'temperaturefast' | {'temperatureexp'}

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

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

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

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

  • x0 Отправная точка

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

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

  • solver'simulannealbnd'

  • опции Опции создаются с optimoptions или структурой опций

  • Поле rngstate — Optional, чтобы сбросить состояние генератора случайных чисел

Создайте структуру problem путем экспорта проблемы из приложения Оптимизации, как описано в Импорте и Экспорте работы (Optimization Toolbox).

Примечание

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

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

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

свернуть все

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

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

Обоснуйте, что остановленный simulannealbnd, возвратился как целое число.

Exitflag Значение
1

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

5

Предел options.ObjectiveLimit достигнут.

0

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

-1

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

-2

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

-5

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

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

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

  • iterations — Количество итераций вычисляется.

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

  • сообщение Причина отключенный алгоритм.

  • temperature — Температура, когда отключенный решатель.

  • totaltime — Общее время для решателя, чтобы запуститься.

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

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