fminsearch

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

Описание

Нелинейный программный решатель. Поиск минимума задачи, заданной в

minxf(x)

f (x) является функцией, которая возвращает скаляр, а x является вектором или матрицей.

пример

x = fminsearch(fun,x0) начинается в точке x0 и пытается найти локальный минимум x функции, описанной в fun.

пример

x = fminsearch(fun,x0,options) минимизирует с опциями оптимизации, заданными в структуре options. Использовать optimset чтобы задать эти опции.

x = fminsearch(problem) находит минимум для problem, где problem является структурой.

пример

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

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

пример

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

Примеры

свернуть все

Минимизируйте функцию Розенбрка, заведомо сложную задачу оптимизации для многих алгоритмов:

f(x)=100(x2-x12)2+(1-x1)2.

Функция минимизируется в точке x = [1,1] с минимальным значением 0.

Установите начальную точку равной x0 = [-1.2,1] и минимизируйте функцию Розенбрка, используя fminsearch.

fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
x0 = [-1.2,1];
x = fminsearch(fun,x0)
x = 1×2

    1.0000    1.0000

Установите опции, чтобы контролировать процесс следующим fminsearch пытается найти минимум.

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

options = optimset('PlotFcns',@optimplotfval);

Установите целевую функцию в функцию Розенбрка,

f(x)=100(x2-x12)2+(1-x1)2.

Функция минимизируется в точке x = [1,1] с минимальным значением 0.

Установите начальную точку равной x0 = [-1.2,1] и минимизируйте функцию Розенбрка, используя fminsearch.

fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
x0 = [-1.2,1];
x = fminsearch(fun,x0,options)

Figure Optimization Plot Function contains an axes. The axes with title Current Function Value: 8.17766e-10 contains an object of type line.

x = 1×2

    1.0000    1.0000

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

Скопируйте следующий код и включите его в файл с именем objectivefcn1.m на пути MATLAB ®.

function f = objectivefcn1(x)
f = 0;
for k = -10:10
    f = f + exp(-(x(1)-x(2))^2 - 2*x(1)^2)*cos(x(2))*sin(2*x(2));
end

Начните с x0 = [0.25,-0.25] и поиск минимума objectivefcn.

x0 = [0.25,-0.25];
x = fminsearch(@objectivefcn1,x0)
x =

   -0.1696   -0.5086

Иногда ваша целевая функция имеет дополнительные параметры. Эти параметры не являются переменными для оптимизации, они являются фиксированными значениями во время оптимизации. Например, предположим, что у вас есть параметр a в функции типа Розенброка

f(x,a)=100(x2-x12)2+(a-x1)2.

Эта функция имеет минимальное значение 0 в x1=a, x2=a2. Если, например, a=3можно включить параметр в целевую функцию путем создания анонимной функции.

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

f = @(x,a)100*(x(2) - x(1)^2)^2 + (a-x(1))^2;

Поместите параметр в рабочую область MATLAB ®.

a = 3;

Создайте анонимную функцию x только, который включает значение параметра в рабочей области.

fun = @(x)f(x,a);

Решите задачу, начиная с x0 = [-1,1.9].

x0 = [-1,1.9];
x = fminsearch(fun,x0)
x = 1×2

    3.0000    9.0000

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

Найдите и местоположение, и значение минимума целевой функции, используя fminsearch.

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

x0 = [1,2,3];
fun = @(x)-norm(x+x0)^2*exp(-norm(x-x0)^2 + sum(x));

Найдите минимум fun начиная с x0. Также найдите значение минимума.

[x,fval] = fminsearch(fun,x0)
x = 1×3

    1.5359    2.5645    3.5932

fval = -5.9565e+04

Смотрите результаты оптимизации, как во время работы, так и после ее завершения.

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

options = optimset('Display','iter','PlotFcns',@optimplotfval);

Установите целевую функцию и стартовую точку.

function f = objectivefcn1(x)
f = 0;
for k = -10:10
    f = f + exp(-(x(1)-x(2))^2 - 2*x(1)^2)*cos(x(2))*sin(2*x(2));
end

Включите код для objectivefcn1 как файл в пути MATLAB ®.

x0 = [0.25,-0.25];
fun = @objectivefcn1;

Получите все выходы решателя. Используйте эти выходы для просмотра результатов после завершения работы решателя.

[x,fval,exitflag,output] = fminsearch(fun,x0,options)
 
 Iteration   Func-count     min f(x)         Procedure
     0            1         -6.70447         
     1            3         -6.89837         initial simplex
     2            5         -7.34101         expand
     3            7         -7.91894         expand
     4            9         -9.07939         expand
     5           11         -10.5047         expand
     6           13         -12.4957         expand
     7           15         -12.6957         reflect
     8           17         -12.8052         contract outside
     9           19         -12.8052         contract inside
    10           21         -13.0189         expand
    11           23         -13.0189         contract inside
    12           25         -13.0374         reflect
    13           27          -13.122         reflect
    14           28          -13.122         reflect
    15           29          -13.122         reflect
    16           31          -13.122         contract outside
    17           33         -13.1279         contract inside
    18           35         -13.1279         contract inside
    19           37         -13.1296         contract inside
    20           39         -13.1301         contract inside
    21           41         -13.1305         reflect
    22           43         -13.1306         contract inside
    23           45         -13.1309         contract inside
    24           47         -13.1309         contract inside
    25           49          -13.131         reflect
    26           51          -13.131         contract inside
    27           53          -13.131         contract inside
    28           55          -13.131         contract inside
    29           57          -13.131         contract outside
    30           59          -13.131         contract inside
    31           61          -13.131         contract inside
    32           63          -13.131         contract inside
    33           65          -13.131         contract outside
    34           67          -13.131         contract inside
    35           69          -13.131         contract inside
 
Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 
 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-04 


x =

   -0.1696   -0.5086


fval =

  -13.1310


exitflag =

     1


output = 

  struct with fields:

    iterations: 35
     funcCount: 69
     algorithm: 'Nelder-Mead simplex direct search'
       message: 'Optimization terminated:...'

Значение exitflag является 1, означающее fminsearch вероятно сходился к локальному минимуму.

The output структура показывает количество итераций. Итерационное отображение и график также показывают эту информацию. The output структура также показывает количество вычислений функции, которое показывает итеративное отображение, но выбранная функция построения графика не показывает.

Входные параметры

свернуть все

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

Задайте fun как указатель на функцию для файла:

x = fminsearch(@myfun,x0)

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

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

Можно также задать fun как указатель на функцию для анонимной функции:

x = fminsearch(@(x)norm(x)^2,x0);

Пример: fun = @(x)-x*exp(-3*x)

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

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

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

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

Опции оптимизации, заданные как структура, такая как optimset возвращает. Вы можете использовать optimset для установки или изменения значений этих полей в структуре опций. Для получения дополнительной информации смотрите Задать опции оптимизации.

Display

Level of display (см. «Итеративное отображение решателя оптимизации»):

  • 'notify' (по умолчанию) отображает вывод только, если функция не сходится.

  • 'final' отображает только окончательный выход.

  • 'off' или 'none' не отображает выход.

  • 'iter' отображает вывод при каждой итерации.

FunValCheck

Проверьте, действительны ли значения целевой функции. 'on' отображает ошибку, когда целевая функция возвращает значение, которое complex или NaN. Значение по умолчанию 'off' не отображает ошибок.

MaxFunEvals

Максимально допустимое количество вычислений функции, положительное целое число. Значение по умолчанию является 200*numberOfVariables. См. «Допуски и критерий остановки».

MaxIter

Максимально допустимое количество итераций, положительное целое число. Значение по умолчанию 200*numberOfVariables. См. «Допуски и критерий остановки».

OutputFcn

Задайте одну или несколько пользовательских функций, которые вызываются функциями оптимизации при каждой итерации, либо как указатель на функцию, либо как cell-массив указателей на функцию. Значением по умолчанию является none ([]). Смотрите Выходные Функции Решателя Оптимизации.

PlotFcns

Строит графики различных показателей прогресса во время выполнения алгоритма. Выберите из предопределенных графиков или напишите свои собственные. Передайте указатель на функцию или cell-массив указателей на функцию. Значением по умолчанию является none ([]):

  • @optimplotx строит графики текущей точки.

  • @optimplotfunccount строит график счетчика функций.

  • @optimplotfval строит график значения функции.

Для получения информации о записи пользовательской функции построения графика смотрите Оптимизация Решателя Функций построения графика.

TolFun

Отклонение завершения функции от значения, a положительной скалярной величины. Значение по умолчанию является 1e-4. См. «Допуски и критерий остановки». В отличие от других решателей, fminsearch останавливается, когда удовлетворяет обоим TolFun и TolX.

TolX

Допуск завершения на x, а положительная скалярная величина. Значение по умолчанию 1e-4. См. «Допуски и критерий остановки». В отличие от других решателей, fminsearch останавливается, когда удовлетворяет обоим TolFun и TolX.

Пример: options = optimset('Display','iter')

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

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

Имя поляВход

objective

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

x0

Начальная точка для x

solver

'fminsearch'

options

Структура опций, такая как возвращенная optimset

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

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

свернуть все

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

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

Причины fminsearch stop, возвращается как целое число.

1

Функция сходилась к решению x.

0

Превышено количество итераций options.MaxIter или превышено количество вычислений функции options.MaxFunEvals.

-1

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

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

iterations

Количество итераций

funcCount

Количество вычислений функции

algorithm

'Nelder-Mead simplex direct search'

message

Выходное сообщение

Совет

  • fminsearch минимизирует только вещественные числа, то есть вектор или x массива должны состоять только из вещественных чисел, и f (x) должны возвращать только вещественные числа. Когда x имеет комплексные числа, разделите x на действительные и мнимые части.

  • Использовать fminsearch для решения недифференцируемых задач или проблем с разрывами, особенно если вблизи решения не происходит разрывов.

Алгоритмы

fminsearch использует метод симплексного поиска Lagarias et al. [1]. Это метод прямого поиска, который не использует числовые или аналитические градиенты, как в fminunc (Optimization Toolbox). Алгоритм подробно описан в fminsearch Algorithm. Алгоритм не гарантированно сходится к локальному минимуму.

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

Приложение

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

Ссылки

[1] Лагария, Дж. К., Дж. А. Ридс, М. Х. Райт и П. Э. Райт. «Свойства сходимости метода Нелдера-Мида Симплекса в низких Размерностях». SIAM Journal оптимизации. Том 9, № 1, 1998, стр. 112-147.

Расширенные возможности

.
Представлено до R2006a