Найдите минимум неограниченной многомерной функции
Решатель нелинейного программирования.
Находит минимум проблемы заданным
где f (x) является функцией, которая возвращает скаляр.
x является вектором или матрицей; смотрите Матричные аргументы.
запускает в точке x
= fminunc(fun
,x0
)x0
и попытки найти локальный минимальный x
из функции, описанной в fun
. Точка x0
может быть скаляр, вектор или матрица.
Передача Дополнительных Параметров объясняет, как передать дополнительные параметры целевой функции и нелинейным ограничительным функциям при необходимости.
fminunc
для нелинейных проблем без ограничений. Если ваша проблема имеет ограничения, обычно используйте fmincon
. См. таблицу решений оптимизации.
минимизирует x
= fminunc(fun
,x0
,options
)fun
с опциями оптимизации, заданными в options
. Используйте optimoptions
установить эти опции.
находит минимум для x
= fminunc(problem
)problem
, где problem
структура, описанная во Входных параметрах. Создайте problem
структура путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы.
Минимизируйте функцию .
Запишите анонимную функцию, которая вычисляет цель.
fun = @(x)3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 4*x(1) + 5*x(2);
Вызовите fminunc
найти минимум fun
около [1,1]
.
x0 = [1,1]; [x,fval] = fminunc(fun,x0);
После нескольких итераций, fminunc
возвращает решение, x
, и значение функции в x
fval
.
x,fval
x = 2.2500 -4.7500 fval = -16.3750
fminunc
может быть быстрее и более надежным, когда вы обеспечиваете производные.
Запишите целевую функцию, которая возвращает градиент, а также значение функции. Используйте форму conditionalized, описанную во Включении Градиентов и Гессианов. Целевая функция является функцией Розенброка,
который имеет градиент
function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)]; end
Сохраните этот код как файл на вашем пути MATLAB®, названном rosenbrockwithgrad.m
.
Создайте опции, чтобы использовать градиент целевой функции. Кроме того, установите алгоритм на 'trust-region'
.
options = optimoptions('fminunc','Algorithm','trust-region','SpecifyObjectiveGradient',true);
Установите начальную точку на [-1,2]
. Затем вызовите fminunc
.
x0 = [-1,2]; fun = @rosenbrockwithgrad; x = fminunc(fun,x0,options)
Local minimum found. Optimization completed because the size of the gradient is less than the default value of the function tolerance. <stopping criteria details> x = 1.0000 1.0000
Решите ту же задачу как в Предоставлении Градиент с помощью структуры задачи вместо отдельных аргументов.
Запишите целевую функцию, которая возвращает градиент, а также значение функции. Используйте форму conditionalized, описанную во Включении Градиентов и Гессианов. Целевая функция является функцией Розенброка,
который имеет градиент
function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)]; end
Сохраните этот код как файл на вашем пути MATLAB, названном rosenbrockwithgrad.m
.
Создайте опции, чтобы использовать градиент целевой функции. Кроме того, установите алгоритм на 'trust-region'
.
options = optimoptions('fminunc','Algorithm','trust-region','SpecifyObjectiveGradient',true);
Создайте структуру задачи включая начальную точку x0 = [-1,2]
.
problem.options = options; problem.x0 = [-1,2]; problem.objective = @rosenbrockwithgrad; problem.solver = 'fminunc';
Решите задачу.
x = fminunc(problem)
Local minimum found. Optimization completed because the size of the gradient is less than the default value of the function tolerance. <stopping criteria details> x = 1.0000 1.0000
Найдите и местоположение минимума нелинейной функции и значение функции в том минимуме.
Целевая функция
fun = @(x)x(1)*exp(-(x(1)^2 + x(2)^2)) + (x(1)^2 + x(2)^2)/20;
Найдите местоположение и значение целевой функции минимизатора, запускающегося в x0 = [1,2]
.
x0 = [1,2]; [x,fval] = fminunc(fun,x0)
Local minimum found. Optimization completed because the size of the gradient is less than the default value of the function tolerance. <stopping criteria details> x = -0.6691 0.0000 fval = -0.4052
Выберите fminunc
опции и выходные параметры, чтобы исследовать процесс решения.
Установите опции получать итеративное отображение и использовать 'quasi-newton'
алгоритм.
options = optimoptions(@fminunc,'Display','iter','Algorithm','quasi-newton');
Целевая функция
fun = @(x)x(1)*exp(-(x(1)^2 + x(2)^2)) + (x(1)^2 + x(2)^2)/20;
Запустите минимизацию в x0 = [1,2]
, и получите выходные параметры, которые позволяют вам исследовать качество решения и процесс.
x0 = [1,2]; [x,fval,exitflag,output] = fminunc(fun,x0,options)
First-order Iteration Func-count f(x) Step-size optimality 0 3 0.256738 0.173 1 6 0.222149 1 0.131 2 9 0.15717 1 0.158 3 18 -0.227902 0.438133 0.386 4 21 -0.299271 1 0.46 5 30 -0.404028 0.102071 0.0458 6 33 -0.404868 1 0.0296 7 36 -0.405236 1 0.00119 8 39 -0.405237 1 0.000252 9 42 -0.405237 1 7.97e-07 Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
x = 1×2
-0.6691 0.0000
fval = -0.4052
exitflag = 1
output = struct with fields:
iterations: 9
funcCount: 42
stepsize: 2.9343e-04
lssteplength: 1
firstorderopt: 7.9721e-07
algorithm: 'quasi-newton'
message: '...'
Выходной флаг 1
показывает, что решение является локальным оптимумом.
output
структура показывает количество итераций, количество функциональных оценок и другую информацию.
Итеративное отображение также показывает количество итераций и функциональных оценок.
fun
— Функция, чтобы минимизироватьФункция, чтобы минимизировать, определенный функцией указатель или имя функции. fun
функция, которая принимает вектор или массив x
и возвращает действительный скалярный f
, целевая функция выполнена в x
.
Задайте fun
как указатель на функцию для файла:
x = fminunc(@myfun,x0)
где myfun
функция MATLAB такой как
function f = myfun(x) f = ... % Compute function value at x
Можно также задать fun
как указатель на функцию для анонимной функции:
x = fminunc(@(x)norm(x)^2,x0);
Если можно вычислить градиент fun
и SpecifyObjectiveGradient
опция установлена в true
, как установлено
options = optimoptions('fminunc','SpecifyObjectiveGradient',true)
fun
должен возвратить вектор градиента g(x)
во втором выходном аргументе.
Если можно также вычислить матрицу Гессиана и HessianFcn
опция установлена в 'objective'
через options = optimoptions('fminunc','HessianFcn','objective')
и Algorithm
опция установлена в 'trust-region'
, fun
должен возвратить значение Гессиана H(x)
, симметрическая матрица, в третьем выходном аргументе. fun
может дать разреженный Гессиан. Смотрите Гессиан для fminunc доверительной области или области доверия fmincon отражающие алгоритмы для деталей.
trust-region
алгоритм позволяет, вы, чтобы предоставить Гессиан умножаете функцию. Эта функция дает результат Векторного произведения времен гессиана, не вычисляя Гессиан непосредственно. Это может сохранить память. Смотрите, что Гессиан Умножает Функцию.
Пример: fun = @(x)sin(x(1))*cos(x(2))
Типы данных: char |
function_handle
| string
x0
— Начальная точкаНачальная точка, заданная как вектор действительных чисел или действительный массив. Решатели используют число элементов в x0
и размер x0
определить номер и размер переменных что fun
принимает.
Пример: x0 = [1,2,3,4]
Типы данных: double
options
— Опции оптимизацииoptimoptions
| структура, такая как optimset
возвращаетсяОпции оптимизации, заданные как выход optimoptions
или структура, такая как optimset
возвращается.
Некоторые опции применяются ко всем алгоритмам, и другие важны для конкретных алгоритмов. Дополнительную информацию см. в Ссылке Опций Оптимизации.
Некоторые опции отсутствуют в optimoptions
отображение. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.
Все алгоритмы | |
| Выберите
|
CheckGradients | Сравните предоставленные пользователями производные (градиент цели) к производным конечного дифференцирования. Выбором является Для |
Диагностика | Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбором является |
DiffMaxChange | Максимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). Значением по умолчанию является |
DiffMinChange | Минимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). |
Display | Level of display (см. Итеративное Отображение):
|
FiniteDifferenceStepSize | Скалярный или векторный фактор размера шага для конечных разностей. Когда вы устанавливаете
sign′(x) = sign(x) кроме sign′(0) = 1 . Центральные конечные разности
FiniteDifferenceStepSize расширяется до вектора. Значением по умолчанию является sqrt(eps) для прямых конечных разностей и eps^(1/3) для центральных конечных разностей.Алгоритм доверительной области использует Для |
FiniteDifferenceType | Конечными разностями, используемыми, чтобы оценить градиенты, является любой Для |
FunValCheck | Проверяйте, допустимы ли значения целевой функции. Настройка по умолчанию, |
MaxFunctionEvaluations | Максимальное количество функциональных позволенных оценок, положительное целое число. Значением по умолчанию является Для |
MaxIterations | Максимальное количество позволенных итераций, положительное целое число. Значением по умолчанию является Для |
OptimalityTolerance | Допуск завершения на оптимальности первого порядка (положительная скалярная величина). Значением по умолчанию является Для |
OutputFcn | Задайте одну или несколько пользовательских функций что оптимизация вызовы функции в каждой итерации. Передайте указатель на функцию или cell-массив указателей на функцию. Значение по умолчанию не ни один ( |
PlotFcn | Строит различные показатели прогресса, в то время как алгоритм выполняется; выберите из предопределенных графиков или запишите свое собственное. Передайте встроенное имя функции построения графика, указатель на функцию или массив ячеек встроенных имен функции построения графика или указателей на функцию. Для пользовательских функций построения графика передайте указатели на функцию. Значение по умолчанию не ни один (
Для получения информации о записи пользовательской функции построения графика смотрите Синтаксис Функции построения графика. Для |
SpecifyObjectiveGradient | Градиент для целевой функции задан пользователем. См. описание Для |
StepTolerance | Допуск завершения на Для |
TypicalX | Типичный
|
trust-region Алгоритм | |
FunctionTolerance | Допуск завершения на значении функции, положительной скалярной величине. Значением по умолчанию является Для |
HessianFcn | Если установлено в Если установлено в Для |
HessianMultiplyFcn | Гессиан умножает функцию, определенный функцией указатель. Для крупномасштабных структурированных проблем эта функция вычисляет матричное произведение Гессиана W = hmfun(Hinfo,Y) где Первый аргумент совпадает с третьим аргументом, возвращенным целевой функцией [f,g,Hinfo] = fun(x)
ПримечаниеИспользовать Для примера смотрите Минимизацию с Плотным Структурированным Гессианом, Линейными Равенствами. Для |
HessPattern | Шаблон разреженности Гессиана для конечного дифференцирования. Установите Используйте Когда структура будет неизвестна, не устанавливайте |
MaxPCGIter | Максимальное количество итераций предобусловленного метода сопряженных градиентов (PCG), положительной скалярной величины. Значением по умолчанию является |
PrecondBandWidth | Верхняя пропускная способность предварительного формирователя для PCG, неотрицательного целого числа. По умолчанию, |
SubproblemAlgorithm | Определяет, как шаг итерации вычисляется. Значение по умолчанию, |
TolPCG | Допуск завершения на итерации PCG, положительной скалярной величине. Значением по умолчанию является |
quasi-newton Алгоритм | |
HessUpdate | Метод для выбора поискового направления в алгоритме Квазиньютона. Выбор:
|
ObjectiveLimit | Допуск (останавливающий критерий), который является скаляром. Если значение целевой функции в итерации меньше чем или равно |
UseParallel | Когда |
Пример: options = optimoptions('fminunc','SpecifyObjectiveGradient',true)
problem
— Структура задачиСтруктура задачи, заданная как структура со следующими полями:
Имя поля | Запись |
---|---|
| Целевая функция |
| Начальная точка для x |
| 'fminunc' |
| Опции создаются с optimoptions |
Самый простой способ получить problem
структура должна экспортировать проблему из приложения Оптимизации.
Типы данных: struct
x
РешениеРешение, возвращенное как вектор действительных чисел или действительный массив. Размер x
совпадает с размером x0
. Как правило, x
локальное решение проблемы когда exitflag
положительно. Для получения информации о качестве решения смотрите, Когда Решатель Успешно выполнится.
fval
— Значение целевой функции в решенииЗначение целевой функции в решении, возвращенном как вещественное число. Обычно fval
= fun(x)
.
exitflag
— Обоснуйте fminunc
остановленныйОбоснуйте fminunc
остановленный, возвращенный как целое число.
1 | Величина градиента меньше, чем |
2 | Изменитесь в |
3 | Изменение в значении целевой функции было меньше |
5 | Предсказанное уменьшение в целевой функции было меньше |
0 | Количество итераций превысило |
-1 | Алгоритм был отключен выходной функцией. |
-3 | Целевая функция при текущей итерации понизилась |
output
— Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенном как структура с полями:
iterations | Количество проделанных итераций |
funcCount | Количество функциональных оценок |
firstorderopt | Мера оптимальности первого порядка |
algorithm | Алгоритм оптимизации используется |
cgiterations | Общее количество итераций PCG ( |
lssteplength | Размер линии ищет шаг относительно поискового направления ( |
stepsize | Итоговое смещение в |
message | Выходное сообщение |
grad
— Градиент в решенииГрадиент в решении, возвращенном как вектор действительных чисел. grad
дает градиент fun
в точке x(:)
.
hessian
— Аппроксимированный гессианАппроксимированный Гессиан, возвращенный как действительная матрица. Для значения hessian
, смотрите Гессиан.
quasi-newton
алгоритм использует Приближенный метод ньютона BFGS с кубической процедурой поиска линии. Этот приближенный метод ньютона использует BFGS ([1], [5], [8], и [9]) формула для обновления приближения матрицы Гессиана. Можно выбрать DFP ([4], [6], и [7]) формула, которая аппроксимирует обратную матрицу Гессиана путем установки HessUpdate
опция к 'dfp'
(и Algorithm
опция к 'quasi-newton'
). Можно выбрать метод быстрейшего спуска установкой HessUpdate
к 'steepdesc'
(и Algorithm
к 'quasi-newton'
), несмотря на то, что эта установка обычно неэффективна. См. fminunc Алгоритм квазиньютона.
trust-region
алгоритм требует, чтобы вы предоставили градиент в fun
и набор SpecifyObjectiveGradient
к true
использование optimoptions
. Этот алгоритм является методом доверительной области подпространства и основан на внутреннем отражающем методе Ньютона, описанном в [2] и [3]. Каждая итерация включает приближенное решение большой линейной системы с помощью метода предобусловленных методов сопряженных градиентов (PCG). См. fminunc Алгоритм доверительной области, Методы Доверительной области для Нелинейной Минимизации и Предобусловленного Метода сопряженных градиентов.
[1] Broyden, C. G. “Сходимость Класса Алгоритмов Минимизации Двойного Ранга”. Журналируйте Inst. Математика. Приложение., Издание 6, 1970, стр 76–90.
[2] Коулман, T. F. и И. Ли. “Внутренний, Доверительный Подход области для Нелинейной Минимизации Согласно Границам”. SIAM Journal на Оптимизации, Издании 6, 1996, стр 418–445.
[3] Коулман, T. F. и И. Ли. “На Сходимости Отражающих Методов Ньютона для Крупномасштабной Нелинейной Минимизации Согласно Границам”. Математическое программирование, Издание 67, Номер 2, 1994, стр 189–224.
[4] Davidon, W. C. “Переменный метрический метод для минимизации”. A.E.C. Научно-исследовательский отчет, ANL-5990, 1959.
[5] Флетчер, R. “Новый Подход к Переменным Метрическим Алгоритмам”. Компьютерный Журнал, Издание 13, 1970, стр 317–322.
[6] Флетчер, R. “Практические методы оптимизации”. Издание 1, неограниченная оптимизация, Джон Вайли и сыновья, 1980.
[7] Флетчер, R. и М. Дж. Д. Пауэлл. “Быстро Конвергентный Метод Спуска для Минимизации”. Компьютерный Журнал, Издание 6, 1963, стр 163–168.
[8] Goldfarb, D. “Семейство Переменных Метрических Обновлений, Выведенных Вариационными Средствами”. Математика Вычисления, Издания 24, 1970, стр 23–26.
[9] Shanno, D. F. “Создание условий Приближенных методов ньютона для Функциональной Минимизации”. Математика Вычисления, Издания 24, 1970, стр 647–656.
Чтобы запуститься параллельно, установите 'UseParallel'
опция к true
.
опции = optimoptions ('
solvername
', 'UseParallel', верный)
Для получения дополнительной информации смотрите Используя Параллельные вычисления в Optimization Toolbox.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.