Найдите минимум ограниченной нелинейной многомерной функции
Решатель нелинейного программирования.
Находит минимум целевой функции
b и beq являются векторами, A и Aeq являются матрицами, c (x) и ceq (x) является функциями, которые возвращают векторы, и f (x) является функцией, которая возвращает скаляр. f (x), c (x) и ceq (x) может быть нелинейными функциями.
x, lb и ub могут быть переданы как векторы или матрицы; смотрите Матричные аргументы.
запускается в x
= fmincon(fun
,x0
,A
,b
)x0
и попытки найти минимизатор x
из функции, описанной в fun
подвергните линейным неравенствам A*x ≤ b
x0
может быть скаляр, вектор или матрица.
Примечание
Передача Дополнительных Параметров объясняет, как передать дополнительные параметры целевой функции и нелинейным ограничительным функциям при необходимости.
задает набор нижних и верхних границ на переменных проекта в x
= fmincon(fun
,x0
,A
,b
,Aeq
,beq
,lb
,ub
)x
, так, чтобы решением всегда был в области значений lb
≤ x
≤ ub
. Если никакие равенства не существуют, устанавливают Aeq = []
и beq = []
. Если x(i)
неограниченно ниже, установите lb(i) = -Inf
, и если x(i)
неограниченно выше, установите ub(i) = Inf
.
Примечание
Если заданные входные границы для проблемы противоречивы, fmincon
выдает ошибку. В этом случае, выход x
x0
и fval
[]
.
Для 'interior-point'
по умолчанию алгоритм,
fmincon
компоненты наборов x0
это нарушает границы lb ≤ x ≤ ub
, или равны связанному, внутренней части связанной области. Для 'trust-region-reflective'
алгоритм, fmincon
наборы, нарушающие компоненты к внутренней части связанной области. Для других алгоритмов, fmincon
наборы, нарушающие компоненты к связанному самому близкому. Компоненты, которые уважают границы, не изменяются. Смотрите, что Итерации Могут Нарушить Ограничения.
Найдите минимальное значение функции Розенброка, когда будет линейное ограничение неравенства.
Установите целевую функцию fun
быть функцией Розенброка. Функция Розенброка известна, чтобы затруднить, чтобы минимизировать. Это имеет свое минимальное объективное значение 0 в точке (1,1). Для получения дополнительной информации смотрите, Решают Ограниченную Нелинейную задачу, Основанную на решателе.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Найдите минимальное значение, начинающее с точки [-1,2]
, ограниченный иметь . Опишите это ограничение в форме Ax <= b
путем взятия A = [1,2]
и b = 1
. Заметьте, что это ограничение означает, что решение не будет в неограниченном решении (1,1), потому что в той точке .
x0 = [-1,2]; A = [1,2]; b = 1; x = fmincon(fun,x0,A,b)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.5022 0.2489
Найдите минимальное значение функции Розенброка, когда будет и линейным ограничением неравенства и линейным ограничением равенства.
Установите целевую функцию fun
быть функцией Розенброка.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Найдите минимальное значение, начинающее с точки [0.5,0]
, ограниченный иметь и .
Опишите линейное ограничение неравенства в форме A*x <= b
путем взятия A = [1,2]
и b = 1
.
Опишите линейное ограничение равенства в форме Aeq*x = beq
путем взятия Aeq = [2,1]
и beq = 1
.
x0 = [0.5,0]; A = [1,2]; b = 1; Aeq = [2,1]; beq = 1; x = fmincon(fun,x0,A,b,Aeq,beq)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.4149 0.1701
Найдите минимум целевой функции в присутствии связанных ограничений.
Целевая функция является простой алгебраической функцией двух переменных.
fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));
Посмотрите в области где имеет положительные значения, , и .
lb = [0,0]; ub = [1,2];
Нет никаких линейных ограничений, таким образом, устанавливает те аргументы на []
.
A = []; b = []; Aeq = []; beq = [];
Попробуйте начальную точку посреди области.
x0 = (lb + ub)/2;
Решите задачу.
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
1.0000 2.0000
Различная начальная точка может привести к различному решению.
x0 = x0/5; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
10-6 ×
0.4000 0.4000
Чтобы определить, какое решение лучше, смотрите, Получают Значение Целевой функции.
Найдите минимум функционального предмета к нелинейным ограничениям
Найдите точку, где функция Розенброка минимизирована в кругу, также подвергните связанным ограничениям.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Посмотрите в области.
lb = [0,0.2]; ub = [0.5,0.8];
Также посмотрите в кругу, сосредоточенном в [1/3,1/3] с радиусом 1/3. Скопируйте следующий код в файл на вашем пути MATLAB® под названием circlecon.m
.
% Copyright 2015 The MathWorks, Inc. function [c,ceq] = circlecon(x) c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; ceq = [];
Нет никаких линейных ограничений, таким образом, устанавливает те аргументы на []
.
A = []; b = []; Aeq = []; beq = [];
Выберите начальную точку, удовлетворяющую всем ограничениям.
x0 = [1/4,1/4];
Решите задачу.
nonlcon = @circlecon; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.5000 0.2500
Установите опции просматривать итерации, как они происходят и использовать различный алгоритм.
Наблюдать fmincon
процесс решения, набор Display
опция к 'iter'
. Кроме того, попробуйте 'sqp'
алгоритм, который иногда быстрее или более точен, чем 'interior-point'
по умолчанию алгоритм.
options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
Найдите минимум функции Розенброка на единичном диске. Сначала создайте функцию, которая представляет нелинейное ограничение. Сохраните это как файл с именем unitdisk.m
на вашем пути MATLAB®.
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
Создайте остающиеся проблемные технические требования. Затем запустите fmincon
.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = @unitdisk; x0 = [0,0]; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Iter Func-count Fval Feasibility Step Length Norm of First-order step optimality 0 3 1.000000e+00 0.000e+00 1.000e+00 0.000e+00 2.000e+00 1 12 8.913011e-01 0.000e+00 1.176e-01 2.353e-01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+01 3 28 4.197517e-01 0.000e+00 3.430e-01 1.217e-01 6.172e+00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 7.498e-02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 40 1.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 8 43 1.161753e-01 0.000e+00 1.000e+00 1.754e-01 7.383e+00 9 46 5.901601e-02 0.000e+00 1.000e+00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 5.393e-02 1.252e-01 11 52 4.567454e-02 2.225e-06 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 4.406e-12 1.000e+00 2.095e-06 1.502e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.203e-12 1.406e-05 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177
Включайте оценку градиента в целевую функцию для более быстрых или более надежных расчетов.
Включайте оценку градиента как 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
Сохраните этот код как файл с именем rosenbrockwithgrad.m
на вашем пути MATLAB®.
Создайте опции, чтобы использовать градиент целевой функции.
options = optimoptions('fmincon','SpecifyObjectiveGradient',true);
Создайте другие входные параметры для проблемы. Затем вызовите fmincon
.
fun = @rosenbrockwithgrad; x0 = [-1,2]; A = []; b = []; Aeq = []; beq = []; lb = [-2,-2]; ub = [2,2]; nonlcon = []; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 1.0000 1.0000
Решите ту же задачу как в Опциях Не по умолчанию с помощью структуры задачи вместо отдельных аргументов.
Создайте опции и структуру задачи. Смотрите проблему для имен полей и обязательных полей.
options = optimoptions('fmincon','Display','iter','Algorithm','sqp'); problem.options = options; problem.solver = 'fmincon'; problem.objective = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; problem.x0 = [0,0];
Нелинейное ограничение функционирует unitdisk
появляется в конце этого примера. Включайте нелинейную ограничительную функцию в problem
.
problem.nonlcon = @unitdisk;
Решите задачу.
x = fmincon(problem)
Iter Func-count Fval Feasibility Step Length Norm of First-order step optimality 0 3 1.000000e+00 0.000e+00 1.000e+00 0.000e+00 2.000e+00 1 12 8.913011e-01 0.000e+00 1.176e-01 2.353e-01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+01 3 28 4.197517e-01 0.000e+00 3.430e-01 1.217e-01 6.172e+00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 7.498e-02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 40 1.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 8 43 1.161753e-01 0.000e+00 1.000e+00 1.754e-01 7.383e+00 9 46 5.901601e-02 0.000e+00 1.000e+00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 5.393e-02 1.252e-01 11 52 4.567454e-02 2.225e-06 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 4.406e-12 1.000e+00 2.095e-06 1.502e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.203e-12 1.406e-05 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.7864 0.6177
Итеративное отображение и решение эквивалентны в Опциях Не по умолчанию.
Следующий код создает unitdisk
функция.
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = []; end
Вызовите fmincon
с fval
выведите, чтобы получить значение целевой функции при решении.
Минимизирование со Связанным Ограничительным примером показывает два решения. Который лучше? Запустите пример, запрашивающий fval
выведите, а также решение.
fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1)); lb = [0,0]; ub = [1,2]; A = []; b = []; Aeq = []; beq = []; x0 = (lb + ub)/2; [x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
1.0000 2.0000
fval = -0.6667
Запустите проблему с помощью различной начальной точки x0
.
x0 = x0/5; [x2,fval2] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x2 = 1×2
10-6 ×
0.4000 0.4000
fval2 = 1.0000
Это решение имеет значение целевой функции fval2
= 1, который выше, чем первое значение fval
= –0.6667. Первое решение x
имеет более низкое локальное минимальное значение целевой функции.
Чтобы легко исследовать качество решения, запросите exitflag
и output
выходные параметры .
Настройте проблему минимизации функции Розенброка на единичном диске. Сначала создайте функцию, которая представляет нелинейное ограничение. Сохраните это как файл с именем unitdisk.m
на вашем пути MATLAB®.
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
Создайте остающиеся проблемные технические требования.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; nonlcon = @unitdisk; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; x0 = [0,0];
Вызовите fmincon
использование fval
exitflag
, и output
выходные параметры .
[x,fval,exitflag,output] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: 'interior-point' firstorderopt: 2.4373e-08 cgiterations: 4 message: '...' bestfeasible: [1x1 struct]
exitflag
значение 1
указывает, что решение является локальным минимумом.
output
структура сообщает о нескольких статистических данных о процессе решения. В частности, это дает количество итераций в output.iterations
, количество вычислений функции в output.funcCount
, и выполнимость в output.constrviolation
.
fmincon
опционально возвращает несколько выходных параметров, которые можно использовать для анализа решения, о котором сообщают.
Настройте проблему минимизации функции Розенброка на единичном диске. Сначала создайте функцию, которая представляет нелинейное ограничение. Сохраните это как файл с именем unitdisk.m
на вашем пути MATLAB®.
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
Создайте остающиеся проблемные технические требования.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; nonlcon = @unitdisk; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; x0 = [0,0];
Запросите весь fmincon
выходные параметры .
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: 'interior-point' firstorderopt: 2.4373e-08 cgiterations: 4 message: '...' bestfeasible: [1x1 struct] lambda = struct with fields: eqlin: [0x1 double] eqnonlin: [0x1 double] ineqlin: [0x1 double] lower: [2x1 double] upper: [2x1 double] ineqnonlin: 0.1215 grad = -0.1911 -0.1501 hessian = 497.2903 -314.5589 -314.5589 200.2392
lambda.ineqnonlin
выведите показывает, что нелинейное ограничение активно в решении и дает значение связанного множителя Лагранжа.
grad
выведите дает значение градиента целевой функции при решении x
.
hessian
выход описан в fmincon Гессиане.
fun
— Функция, чтобы минимизироватьФункция, чтобы минимизировать в виде указателя на функцию или имени функции. fun
функция, которая принимает вектор или массив x
и возвращает действительный скалярный f
, целевая функция выполнена в x
.
Задайте fun
как указатель на функцию для файла:
x = fmincon(@myfun,x0,A,b)
где myfun
функция MATLAB® такой как
function f = myfun(x) f = ... % Compute function value at x
Можно также задать fun
как указатель на функцию для анонимной функции:
x = fmincon(@(x)norm(x)^2,x0,A,b);
Если можно вычислить градиент fun
и SpecifyObjectiveGradient
опция установлена в true
, как установлено
options = optimoptions('fmincon','SpecifyObjectiveGradient',true)
fun
должен возвратить вектор градиента g(x)
во втором выходном аргументе.
Если можно также вычислить матрицу Гессиана и HessianFcn
опция установлена в 'objective'
через optimoptions
и Algorithm
опцией является 'trust-region-reflective'
, fun
должен возвратить значение Гессиана H(x)
, симметрическая матрица, в третьем выходном аргументе. fun
может дать разреженный Гессиан. Смотрите Гессиан для fminunc доверительной области или области доверия fmincon отражающие алгоритмы для деталей.
Если можно также вычислить матрицу Гессиана и Algorithm
опция установлена в 'interior-point'
, существует различный способ передать Гессиан fmincon
. Для получения дополнительной информации смотрите Гессиан для fmincon алгоритма внутренней точки. Для примера с помощью Symbolic Math Toolbox™, чтобы вычислить градиент и Гессиан, смотрите, Вычисляют Градиенты и Гессианы Используя Symbolic Math Toolbox™.
interior-point
и trust-region-reflective
алгоритмы позволяют вам предоставлять функцию умножения Гессиана. Эта функция дает результат Векторного произведения времен гессиана, не вычисляя Гессиан непосредственно. Это может сохранить память. Смотрите функцию умножения Гессиана.
Пример: fun = @(x)sin(x(1))*cos(x(2))
Типы данных: char |
function_handle
| string
x0
— Начальная точкаНачальная точка в виде вектора действительных чисел или действительного массива. Решатели используют число элементов в, и размер, x0
определить номер и размер переменных что fun
принимает.
'interior-point'
алгоритм — Если HonorBounds
опцией является true
(значение по умолчанию), fmincon
сброс x0
компоненты, которые включены или вне ограничивают lb
или ub
к значениям строго между границами.
'trust-region-reflective'
алгоритм — fmincon
сбрасывает неосуществимый x0
компоненты, чтобы быть выполнимым относительно границ или линейных равенств.
'sqp'
, 'sqp-legacy'
, или 'active-set'
алгоритм — fmincon
сброс x0
компоненты, которые находятся вне границ к значениям соответствующих границ.
Пример: x0 = [1,2,3,4]
Типы данных: double
A
— Линейные ограничения неравенстваЛинейные ограничения неравенства в виде действительной матрицы. A
M
- N
матрица, где M
количество неравенств и N
количество переменных (число элементов в x0
). Для больших проблем передайте A
как разреженная матрица.
A
кодирует M
линейные неравенства
A*x <= b
,
где x
вектор-столбец N
переменные x(:)
, и b
вектор-столбец с M
элементы.
Например, чтобы задать
x 1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
введите эти ограничения:
A = [1,2;3,4;5,6]; b = [10;20;30];
Пример: Чтобы указать что x сумма компонентов к 1 или меньше, используйте A = ones(1,N)
и b = 1
.
Типы данных: double
b
— Линейные ограничения неравенстваЛинейные ограничения неравенства в виде вектора действительных чисел. b
M
- вектор элемента связан с A
матрица. Если вы передаете b
как вектор-строка, решатели внутренне преобразуют b
к вектор-столбцу b(:)
. Для больших проблем передайте b
как разреженный вектор.
b
кодирует M
линейные неравенства
A*x <= b
,
где x
вектор-столбец N
переменные x(:)
, и A
матрица размера M
- N
.
Например, рассмотрите эти неравенства:
x 1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.
Задайте неравенства путем ввода следующих ограничений.
A = [1,2;3,4;5,6]; b = [10;20;30];
Пример: Чтобы указать что x сумма компонентов к 1 или меньше, используйте A = ones(1,N)
и b = 1
.
Типы данных: double
Aeq
— Линейные ограничения равенстваЛинейные ограничения равенства в виде действительной матрицы. Aeq
Me
- N
матрица, где Me
количество равенств и N
количество переменных (число элементов в x0
). Для больших проблем передайте Aeq
как разреженная матрица.
Aeq
кодирует Me
линейные равенства
Aeq*x = beq
,
где x
вектор-столбец N
переменные x(:)
, и beq
вектор-столбец с Me
элементы.
Например, чтобы задать
x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 3 = 20,
введите эти ограничения:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать что x сумма компонентов к 1, используйте Aeq = ones(1,N)
и beq = 1
.
Типы данных: double
beq
— Линейные ограничения равенстваЛинейные ограничения равенства в виде вектора действительных чисел. beq
Me
- вектор элемента связан с Aeq
матрица. Если вы передаете beq
как вектор-строка, решатели внутренне преобразуют beq
к вектор-столбцу beq(:)
. Для больших проблем передайте beq
как разреженный вектор.
beq
кодирует Me
линейные равенства
Aeq*x = beq
,
где x
вектор-столбец N
переменные x(:)
, и Aeq
матрица размера Me
- N
.
Например, рассмотрите эти равенства:
x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 3 = 20.
Задайте равенства путем ввода следующих ограничений.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать что x сумма компонентов к 1, используйте Aeq = ones(1,N)
и beq = 1
.
Типы данных: double
lb
— Нижние границыНижние границы в виде вектора действительных чисел или действительного массива. Если число элементов в x0
равно числу элементов в lb
, затем lb
задает это
x(i) >= lb(i)
для всех i
.
Если numel(lb) < numel(x0)
, затем lb
задает это
x(i) >= lb(i)
для 1 <= i <= numel(lb)
.
Если существует меньше элементов в lb
чем в x0
, решатели выдают предупреждение.
Пример: Чтобы указать, что все x компоненты положительны, используйте lb = zeros(size(x0))
.
Типы данных: double
ub
— Верхние границыВерхние границы в виде вектора действительных чисел или действительного массива. Если число элементов в x0
равно числу элементов в ub
, затем ub
задает это
x(i) <= ub(i)
для всех i
.
Если numel(ub) < numel(x0)
, затем ub
задает это
x(i) <= ub(i)
для 1 <= i <= numel(ub)
.
Если существует меньше элементов в ub
чем в x0
, решатели выдают предупреждение.
Пример: Чтобы указать, что все x компоненты меньше 1, используйте ub = ones(size(x0))
.
Типы данных: double
nonlcon
— Нелинейные ограниченияНелинейные ограничения в виде указателя на функцию или имени функции. nonlcon
функция, которая принимает вектор или массив x
и возвращает два массива, c(x)
и ceq(x)
.
c(x)
массив нелинейных ограничений неравенства в x
. fmincon
попытки удовлетворить
c(x) <= 0
для всех записей c
.
ceq(x)
массив нелинейных ограничений равенства в x
. fmincon
попытки удовлетворить
ceq(x) = 0
для всех записей ceq
.
Например,
x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
где mycon
функция MATLAB такой как
function [c,ceq] = mycon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
SpecifyConstraintGradient
опцией является true
, как установленоoptions = optimoptions('fmincon','SpecifyConstraintGradient',true)
nonlcon
должен также возвратиться, в третьих и четвертых выходных аргументах, GC
, градиент c(x)
, и GCeq
, градиент ceq(x)
. GC
и GCeq
может быть разреженным или плотным. Если GC
или GCeq
является большим, с относительно немногими ненулевыми записями, сэкономьте время выполнения и память в interior-point
алгоритм путем представления их как разреженных матриц. Для получения дополнительной информации смотрите Нелинейные Ограничения.
Типы данных: char |
function_handle
| string
options
— Опции оптимизацииoptimoptions
| структура, такая как optimset
возвращаетсяОпции оптимизации в виде выхода optimoptions
или структура такой как optimset
возвращается.
Некоторые опции применяются ко всем алгоритмам, и другие важны для конкретных алгоритмов. Дополнительную информацию см. в Ссылке Опций Оптимизации.
Некоторые опции отсутствуют в optimoptions
отображение. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.
Все алгоритмы | |
Algorithm | Выберите алгоритм оптимизации:
Для получения информации о выборе алгоритма смотрите Выбор Algorithm.
Если вы выбираете
|
CheckGradients | Сравните предоставленные пользователями производные (градиенты цели или ограничений) к производным конечного дифференцирования. Выбором является Для |
ConstraintTolerance | Допуск на нарушении ограничений, положительной скалярной величине. Значением по умолчанию является Для |
Диагностика | Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбором является |
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 | Строит различные показатели прогресса, в то время как алгоритм выполняется; выберите из предопределенных графиков или запишите свое собственное. Передайте встроенное имя функции построения графика, указатель на функцию или массив ячеек встроенных имен функции построения графика или указателей на функцию. Для пользовательских функций построения графика передайте указатели на функцию. Значение по умолчанию не ни один (
Пользовательские функции построения графика используют тот же синтаксис в качестве выходных функций. Смотрите Выходные функции для Optimization Toolbox™ и Синтаксис Функции построения графика и Выходную функцию. Для |
SpecifyConstraintGradient | Градиент для нелинейных ограничительных функций, определяемых пользователем. Когда установлено в значение по умолчанию, Для |
SpecifyObjectiveGradient | Градиент для целевой функции задан пользователем. См. описание Для |
StepTolerance | Допуск завершения на Для |
TypicalX | Типичный
|
UseParallel | Когда |
Доверительная область отражающий алгоритм | |
FunctionTolerance | Допуск завершения на значении функции, положительной скалярной величине. Значением по умолчанию является Для |
HessianFcn | Если Для |
HessianMultiplyFcn | Функция умножения Гессиана в виде указателя на функцию. Для крупномасштабных структурированных проблем эта функция вычисляет матричное произведение Гессиана W = hmfun(Hinfo,Y) где Первый аргумент совпадает с третьим аргументом, возвращенным целевой функцией [f,g,Hinfo] = fun(x)
Примечание Использовать Смотрите функцию умножения Гессиана. Смотрите Минимизацию с Плотным Структурированным Гессианом, Линейными Равенствами для примера. Для |
HessPattern | Шаблон разреженности Гессиана для конечного дифференцирования. Установите Используйте Когда структура будет неизвестна, не устанавливайте |
MaxPCGIter | Максимальное количество итераций предобусловленного метода сопряженных градиентов (PCG), положительной скалярной величины. Значением по умолчанию является |
PrecondBandWidth | Верхняя пропускная способность предварительного формирователя для PCG, неотрицательного целого числа. По умолчанию диагональное предварительное создание условий используется (верхняя пропускная способность 0). Для некоторых проблем, увеличивая пропускную способность сокращает количество итераций PCG. Установка |
SubproblemAlgorithm | Определяет, как шаг итерации вычисляется. Значение по умолчанию, |
TolPCG | Допуск завершения на итерации PCG, положительной скалярной величине. Значением по умолчанию является |
Алгоритм активного набора | |
FunctionTolerance | Допуск завершения на значении функции, положительной скалярной величине. Значением по умолчанию является Для |
MaxSQPIter | Максимальное количество позволенных итераций SQP, положительное целое число. Значением по умолчанию является |
RelLineSrchBnd | Относительная граница (действительное неотрицательное скалярное значение) на линии ищет длину шага. Общее смещение в x удовлетворяет | Δx (i) | ≤ relLineSrchBnd · макс. (|x (i) |, |typicalx (i) |). Эта опция обеспечивает управление величиной смещений в x для случаев, в которых решатель предпринимает шаги, которые рассматриваются слишком большими. Значением по умолчанию не являются никакие границы ( |
RelLineSrchBndDuration | Количество итераций, для который связанное, заданное в |
TolConSQP | Допуск завершения на внутренней итерации нарушение ограничений SQP, положительная скалярная величина. Значением по умолчанию является |
Алгоритм внутренней точки | |
HessianApproximation | Выбирает как
Примечание Использовать Для |
HessianFcn | Если Для |
HessianMultiplyFcn | Предоставленная пользователями функция, которая дает Векторное произведение времен гессиана (см. функцию умножения Гессиана). Передайте указатель на функцию. Примечание Использовать Для |
HonorBounds |
Для |
InitBarrierParam | Начальное значение барьера, положительная скалярная величина. Иногда это может помочь попробовать значение выше |
InitTrustRegionRadius | Начальный радиус доверительной области, положительной скалярной величины. На плохо масштабированных проблемах это может помочь выбрать значение, меньшее, чем значение по умолчанию , где n является количеством переменных. |
MaxProjCGIter | Допуск (останавливающий критерий) для количества спроектированных итераций метода сопряженных градиентов; это - внутренняя итерация, не количество итераций алгоритма. Это положительное целое число имеет значение по умолчанию |
ObjectiveLimit | Допуск (останавливающий критерий), который является скаляром. Если значение целевой функции понижается |
ScaleProblem |
Для |
SubproblemAlgorithm | Определяет, как шаг итерации вычисляется. Значение по умолчанию, |
TolProjCG | Относительная погрешность (останавливающий критерий) для спроектированного алгоритма метода сопряженных градиентов; это для внутренней итерации, не итерации алгоритма. Эта положительная скалярная величина имеет значение по умолчанию |
TolProjCGAbs | Абсолютная погрешность (останавливающий критерий) для спроектированного алгоритма метода сопряженных градиентов; это для внутренней итерации, не итерации алгоритма. Эта положительная скалярная величина имеет значение по умолчанию |
SQP и устаревшие алгоритмы SQP | |
ObjectiveLimit | Допуск (останавливающий критерий), который является скаляром. Если значение целевой функции понижается |
ScaleProblem |
Для |
Пример: options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)
problem
— Структура задачиСтруктура задачи в виде структуры со следующими полями:
Имя поля | Запись |
---|---|
| Целевая функция |
| Начальная точка для x |
| Матрица для линейных ограничений неравенства |
| Вектор для линейных ограничений неравенства |
| Матрица для линейных ограничений равенства |
| Вектор для линейных ограничений равенства |
lb | Вектор из нижних границ |
ub | Вектор из верхних границ |
| Нелинейная ограничительная функция |
| 'fmincon' |
| Опции, созданные с optimoptions |
Необходимо предоставить, по крайней мере, objective
x0
, solver
, и options
поля в problem
структура.
Типы данных: struct
x
РешениеРешение, возвращенное как вектор действительных чисел или действительный массив. Размер x
совпадает с размером x0
. Как правило, x
локальное решение проблемы когда exitflag
положительно. Для получения информации о качестве решения смотрите, Когда Решатель Успешно выполнится.
fval
— Значение целевой функции в решенииЗначение целевой функции в решении, возвращенном как вещественное число. Обычно fval
= fun(x)
.
exitflag
— Обоснуйте fmincon
остановленныйПричина fmincon
остановленный, возвращенный как целое число.
Все алгоритмы: | |
1 | Мера оптимальности первого порядка была меньше |
0 | Количество итераций превысило |
-1 | Зашедший выходная функция или функция построения графика. |
-2 | Никакая допустимая точка не была найдена. |
Все алгоритмы кроме | |
2 | Изменитесь в |
| |
3 | Изменение в значении целевой функции было меньше |
| |
4 | Величина поискового направления была меньше 2* |
5 | Величина косой производной в поисковом направлении была меньше 2* |
| |
-3 | Целевая функция при текущей итерации понизилась |
output
— Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенном как структура с полями:
iterations | Количество проделанных итераций |
funcCount | Количество вычислений функции |
lssteplength | Размер линии ищет шаг относительно поискового направления ( |
constrviolation | Максимум ограничительных функций |
stepsize | Длина последнего смещения в |
algorithm | Алгоритм оптимизации используется |
cgiterations | Общее количество итераций PCG ( |
firstorderopt | Мера оптимальности первого порядка |
bestfeasible | Лучше всего (самая низкая целевая функция) допустимая точка, с которой сталкиваются. Структура с этими полями:
Если никакая допустимая точка не найдена,
|
message | Выходное сообщение |
lambda
— Множители Лагранжа в решенииМножители Лагранжа в решении, возвращенном как структура с полями:
grad
— Градиент в решенииГрадиент в решении, возвращенном как вектор действительных чисел. grad
дает градиент fun
в точке x(:)
.
hessian
— Аппроксимированный гессианАппроксимированный Гессиан, возвращенный как действительная матрица. Для значения hessian
, смотрите Гессиан Выход.
fmincon
основанный на градиенте метод, который спроектирован, чтобы работать над проблемами, где цель и ограничительные функции и непрерывны и имеют непрерывные первые производные.
Для 'trust-region-reflective'
алгоритм, необходимо предоставить градиент в fun
и набор 'SpecifyObjectiveGradient'
опция к true
.
'trust-region-reflective'
алгоритм не позволяет равные верхние и нижние границы. Например, если lb(2)==ub(2)
, fmincon
дает эту ошибку:
Equal upper and lower bounds not permitted in trust-region-reflective algorithm. Use either interior-point or SQP algorithms instead.
Существует два различных синтаксиса для передачи Гессиана, и существует два различных синтаксиса для передачи HessianMultiplyFcn
функция; один для trust-region-reflective
, и другой для interior-point
. Смотрите включая гессианы.
Для trust-region-reflective
, Гессиан функции Лагранжа совпадает с Гессианом целевой функции. Вы передаете тот Гессиан как третий выход целевой функции.
Для interior-point
, Гессиан функции Лагранжа включает множители Лагранжа и Гессианы нелинейных ограничительных функций. Вы передаете Гессиан как отдельную функцию, которая учитывает обоих текущая точка x
и структура множителя Лагранжа lambda
.
Когда проблема неосуществима, fmincon
попытки минимизировать максимальное ограничительное значение.
fmincon
использует Гессиан в качестве дополнительного входа. Этот Гессиан является матрицей вторых производных функции Лагранжа (см. уравнение 1), а именно,
(1) |
Для получения дополнительной информации того, как предоставить Гессиан к trust-region-reflective
или interior-point
алгоритмы, смотрите Включая Гессианы.
active-set
и sqp
алгоритмы не принимают вход Hessian. Они вычисляют приближение квазиньютона к Гессиану функции Лагранжа.
interior-point
алгоритм имеет несколько вариантов для 'HessianApproximation'
опция; смотрите Выбирают Input Hessian Approximation для внутренней точки fmincon:
'bfgs'
— fmincon
вычисляет Гессиан плотным приближением квазиньютона. Это - приближение Гессиана по умолчанию.
'lbfgs'
— fmincon
вычисляет Гессиан ограниченной памятью, крупномасштабным приближением квазиньютона. Память по умолчанию, 10 итераций, используется.
{'lbfgs',positive integer}
— fmincon
вычисляет Гессиан ограниченной памятью, крупномасштабным приближением квазиньютона. Положительное целое число задает, сколько прошлых итераций нужно помнить.
'finite-difference'
— fmincon
вычисляет Векторное произведение времен гессиана конечными разностями градиента (градиентов). Необходимо предоставить градиент целевой функции, и также градиенты нелинейных ограничений (если они существуют). Установите 'SpecifyObjectiveGradient'
опция к true
и, если применимо, 'SpecifyConstraintGradient'
опция к true
. Необходимо установить 'SubproblemAlgorithm'
к 'cg'
.
interior-point
и trust-region-reflective
алгоритмы позволяют вам предоставлять функцию умножения Гессиана. Эта функция дает результат Векторного произведения времен гессиана, не вычисляя Гессиан непосредственно. Это может сохранить память. Для получения дополнительной информации смотрите функцию умножения Гессиана.
Для справки, выбирая алгоритм, см. fmincon Алгоритмы. Чтобы установить алгоритм, используйте optimoptions
создать options
, и используйте 'Algorithm'
пара "имя-значение".
Остальная часть этого раздела дает краткие обзоры или указатели на информацию о каждом алгоритме.
Этот алгоритм описан в fmincon Алгоритме Внутренней точки. Существует более обширное описание в [1], [41], и [9].
fmincon
'sqp'
и 'sqp-legacy'
алгоритмы похожи на 'active-set'
алгоритм описан в Оптимизации Активного Набора. fmincon SQP Алгоритм описывает основные отличия. Таким образом, эти различия:
fmincon
использует метод последовательного квадратичного программирования (SQP). В этом методе функция решает подпроблему квадратичного программирования (QP) в каждой итерации. fmincon
обновляет оценку Гессиана функции Лагранжа в каждой итерации с помощью формулы BFGS (см. fminunc
и ссылки [7] и [8]).
fmincon
выполняет поиск линии использование оценочной функции, похожей на предложенный [6], [7], и [8]. Подпроблема QP решена с помощью активной стратегии набора, похожей на описанный в [5]. fmincon Активный Алгоритм Набора описывает этот алгоритм подробно.
См. также Реализацию SQP для получения дополнительной информации об используемом алгоритме.
'trust-region-reflective'
алгоритм является методом доверительной области подпространства и основан на внутреннем отражающем методе Ньютона, описанном в [3] и [4]. Каждая итерация включает приближенное решение большой линейной системы с помощью метода предобусловленных методов сопряженных градиентов (PCG). Смотрите доверительную область и предобусловленные описания метода сопряженных градиентов в области Доверия fmincon Отражающий Алгоритм.
Оптимизировать задача Live Editor обеспечивает визуальный интерфейс для fmincon
.
[1] Бэрд, R. H. Дж. К. Гильберт и Дж. Носедэл. “Доверительный Метод области На основе Методов Внутренней точки для Нелинейного программирования”. Математическое программирование, Vol 89, № 1, 2000, стр 149–185.
[2] Бэрд, R. H. Мэри Э. Хрибэр и Хорхе Носедаль. “Алгоритм Внутренней точки для Крупномасштабного Нелинейного программирования”. SIAM Journal на Оптимизации, Vol 9, № 4, 1999, стр 877–900.
[3] Коулман, T. F. и И. Ли. “Внутренний, Доверительный Подход области для Нелинейной Минимизации Согласно Границам”. SIAM Journal на Оптимизации, Издании 6, 1996, стр 418–445.
[4] Коулман, T. F. и И. Ли. “На Сходимости Отражающих Методов Ньютона для Крупномасштабной Нелинейной Минимизации Согласно Границам”. Математическое программирование, Издание 67, Номер 2, 1994, стр 189–224.
[5] Жабры, P. E. В. Мюррей и М. Х. Райт. Практическая оптимизация, Лондон, Academic Press, 1981.
[6] Ханьцы, S. P. “Глобально Конвергентный Метод для Нелинейного программирования”. Журнал Теории Оптимизации и Приложений, Издания 22, 1977, стр 297.
[7] Пауэлл, M. J. D. “Алгоритм FAST для Нелинейно Ограниченных Вычислений Оптимизации”. Числовой Анализ, редактор Г. А. Уотсон, Примечания Лекции в Математике, Springer-Verlag, Издании 630, 1978.
[8] Пауэлл, M. J. D. “Сходимость Переменных Метрических Методов Для Нелинейно Ограниченных Вычислений Оптимизации”. Нелинейное программирование 3 (О. Л. Мангасариэн, Р. Р. Мейер, и С. М. Робинсон, редакторы), Academic Press, 1978.
[9] Вальсируйте, R. A. Х. Л. Моралес, Дж. Носедэл и Д. Орбан. “Внутренний алгоритм для нелинейной оптимизации, которая комбинирует поиск линии и доверительные шаги области”. Математическое программирование, Vol 107, № 3, 2006, стр 391–408.
Указания и ограничения по применению:
fmincon
генерация кода поддержек, использующая любого codegen
(MATLAB Coder) функция или приложение MATLAB Coder™. У вас должна быть лицензия MATLAB Coder, чтобы сгенерировать код.
Целевой компьютер должен поддержать стандартные расчеты с плавающей точкой с двойной точностью. Вы не можете сгенерировать код для расчетов или фиксированной точки с одинарной точностью.
Цели генерации кода не пользуются теми же математическими библиотеками ядра как решатели MATLAB. Поэтому решения генерации кода могут варьироваться из решений для решателя, специально для плохо обусловленных проблем.
Всем кодом для генерации должен быть код MATLAB. В частности, вы не можете использовать пользовательскую функцию черного ящика в качестве целевой функции для fmincon
. Можно использовать coder.ceval
выполнять пользовательскую функцию, закодированную в C или C++. Однако пользовательская функция должна быть вызвана в функции MATLAB.
fmincon
не поддерживает problem
аргумент для генерации кода.
[x,fval] = fmincon(problem) % Not supported
Необходимо задать целевую функцию и любую нелинейную ограничительную функцию при помощи указателей на функцию, не строк или имен персонажей.
x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon) % Supported % Not supported: fmincon('fun',...) or fmincon("fun",...)
Все fmincon
введите матрицы, такие как A
, Aeq
, lb
, и ub
должно быть полным, не разреженным. Можно преобразовать разреженные матрицы в полный при помощи full
функция.
lb
и ub
аргументы должны иметь то же количество записей как x0
аргументом или должен быть пустой []
.
Для усовершенствованной оптимизации кода, включающей встраиваемые процессоры, вам также нужна лицензия Embedded Coder®.
Необходимо включать опции для fmincon
и задайте их использование optimoptions
. Опции должны включать Algorithm
опция, набор к 'sqp'
или 'sqp-legacy'
.
options = optimoptions('fmincon','Algorithm','sqp'); [x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
Генерация кода поддерживает эти опции:
Algorithm
— Должен быть 'sqp'
или 'sqp-legacy'
ConstraintTolerance
FiniteDifferenceStepSize
FiniteDifferenceType
MaxFunctionEvaluations
MaxIterations
ObjectiveLimit
OptimalityTolerance
ScaleProblem
SpecifyConstraintGradient
SpecifyObjectiveGradient
StepTolerance
TypicalX
Сгенерированный код ограничил проверку ошибок на опции. Рекомендуемый способ обновить опцию состоит в том, чтобы использовать optimoptions
, не запись через точку.
opts = optimoptions('fmincon','Algorithm','sqp'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Не загружайте опции из файла. Выполнение так может заставить генерацию кода перестать работать. Вместо этого создайте опции в своем коде.
Обычно, если вы задаете опцию, которая не поддерживается, опция тихо проигнорирована во время генерации кода. Однако, если вы задаете функцию построения графика или выходную функцию при помощи записи через точку, генерация кода может выдать ошибку. Для надежности задайте только поддерживаемые опции.
Поскольку выходные функции и функции построения графика не поддерживаются, fmincon
не возвращается выход отмечают –1.
Код, сгенерированный от fmincon
не содержит bestfeasible
поле в возвращенном output
структура.
Для примера смотрите Генерацию кода для Основ Оптимизации.
Чтобы запуститься параллельно, установите 'UseParallel'
опция к true
.
опции = optimoptions ('
solvername
', 'UseParallel', верный)
Для получения дополнительной информации смотрите Используя Параллельные вычисления в Optimization Toolbox.
fminbnd
| fminsearch
| fminunc
| Оптимизировать | optimoptions
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.