Найдите минимум ограниченной нелинейной многомерной функции
Решатель нелинейного программирования.
Находит минимум проблемы заданным
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)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fmincon(problem)
[x,fval]
= fmincon(___)
[x,fval,exitflag,output]
= fmincon(___)
[x,fval,exitflag,output,lambda,grad,hessian]
= fmincon(___)
запускается в 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
, нарушающие компоненты к связанному самому близкому. Компоненты, которые уважают границы, не изменяются. Смотрите, что Итерации Могут Нарушить Ограничения.
находит минимум для x
= fmincon(problem
)problem
, где problem
является структурой, описанной во Входных параметрах. Создайте структуру problem
путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы.
Найдите минимальное значение функции Розенброка, когда будет линейное ограничение неравенства.
Установите целевую функцию 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));
Посмотрите в области, где x
имеет положительные значения, x (1) ≤ 1, и x (2) ≤ 2.
lb = [0,0]; ub = [1,2];
Нет никаких линейных ограничений, таким образом, устанавливает те аргументы на []
.
A = []; b = []; Aeq = []; beq = [];
Попробуйте начальную точку посреди области. Найдите минимум fun
согласно связанным ограничениям.
x0 = [0.5,1]; 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 default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance. <stopping criteria details>
x = 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 default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance. <stopping criteria details>
x = 1.0e-06 * 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.901600e-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.405e-12 1.000e+00 2.095e-06 1.502e-05 13 58 4.567481e-02 2.220e-16 1.000e+00 2.442e-09 1.287e-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
Решите ту же проблему как в Опциях Не по умолчанию с помощью структуры задачи вместо отдельных аргументов.
Создайте опции и структуру задачи. Смотрите problem
для имен полей и обязательных полей.
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];
Создайте файл функции для нелинейной ограничительной функции представление нормы (x) 2 ≤ 1.
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ];
Сохраните это как файл с именем unitdisk.m
на вашем пути MATLAB®.
Включайте нелинейную ограничительную функцию в 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.901602e-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.501e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.158e-09 1.511e-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. <stopping criteria details>
x = 0.7864 0.6177
Итеративное отображение и решение эквивалентны в Опциях Не по умолчанию.
Вызовите 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 = [0.5,1]; [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 default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance. <stopping criteria details>
x = 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 default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance. <stopping criteria details>
x2 = 1.0e-06 * 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: '...'
1
значения exitflag
указывает, что решение является локальным минимумом.
Структура 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: '...' 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
-by-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
-by-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
-by-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
-by-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
опции
Опции оптимизацииoptimoptions
| структура, такая как optimset
возвращаетсяОпции оптимизации, заданные как вывод optimoptions
или структуры, такие как optimset
, возвращаются.
Некоторые опции применяются ко всем алгоритмам, и другие важны для конкретных алгоритмов. Дополнительную информацию см. в Ссылке Опций Оптимизации.
Некоторые опции отсутствуют в отображении optimoptions
. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.
Все алгоритмы | |
Algorithm | Выберите алгоритм оптимизации:
Для получения информации о выборе алгоритма смотрите Выбор Algorithm. Алгоритм
Если вы выбираете алгоритм
|
CheckGradients | Сравните предоставленные пользователями производные (градиенты цели или ограничений) к производным конечного дифференцирования. Выбором является Для |
ConstraintTolerance | Допуск на ограничительном нарушении, положительной скалярной величине. Значением по умолчанию является Для |
Диагностика | Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбором является |
DiffMaxChange | Максимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). Значением по умолчанию является |
DiffMinChange | Минимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). Значением по умолчанию является |
Display | Уровень отображения (см. Итеративное Отображение):
|
FiniteDifferenceStepSize | Скалярный или векторный фактор размера шага для конечных разностей. Когда вы устанавливаете
sign′(x) = sign(x) кроме sign′(0) = 1 . Центральные конечные разности
FiniteDifferenceStepSize расширяется до вектора. Значением по умолчанию является sqrt(eps) для прямых конечных разностей и eps^(1/3) для центральных конечных разностей.
Для |
FiniteDifferenceType | Конечными разностями, используемыми, чтобы оценить градиенты, является или
Для |
FunValCheck | Проверяйте, допустимы ли значения целевой функции. Настройка по умолчанию, |
MaxFunctionEvaluations | Максимальное количество функциональных позволенных оценок, положительное целое число. Значением по умолчанию для всех алгоритмов кроме Для |
MaxIterations | Максимальное количество позволенных итераций, положительное целое число. Значением по умолчанию для всех алгоритмов кроме Для |
OptimalityTolerance | Допуск завершения на оптимальности первого порядка (положительная скалярная величина). Значением по умолчанию является Для |
OutputFcn | Задайте одну или несколько пользовательских функций что оптимизация вызовы функции в каждой итерации. Передайте указатель на функцию или cell-массив указателей на функцию. Значение по умолчанию не ни один ( |
PlotFcn | Строит различные меры прогресса, в то время как алгоритм выполняется; выберите из предопределенных графиков или запишите свое собственное. Передайте встроенное имя функции построения графика, указатель на функцию или массив ячеек встроенных имен функции построения графика или указателей на функцию. Для пользовательских функций построения графика передайте указатели на функцию. Значение по умолчанию не ни один (
Для получения информации о записи пользовательской функции построения графика смотрите Синтаксис Функции построения графика. Для |
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
.
Самым простым способом получить структуру problem является экспорт задачи из Optimization app.
Типы данных: struct
x
РешениеРешение, возвращенное как вектор действительных чисел или действительный массив. Размер x
совпадает с размером x0
. Как правило, x
является локальным решением проблемы, когда exitflag
положителен. Для получения информации о качестве решения смотрите, Когда Решатель Успешно выполнится.
fval
Значение целевой функции в решенииЗначение целевой функции в решении, возвращенном как вещественное число. Обычно fval
= fun(x)
.
exitflag
Обоснуйте остановленный fmincon
Обоснуйте, что остановленный fmincon
, возвратился как целое число.
Все алгоритмы: | |
1 | Мерой по оптимальности первого порядка были меньше, чем |
0 | Количество итераций превысило |
-1 | Зашедший выходная функция или функция построения графика. |
-2 | Никакая допустимая точка не была найдена. |
Все алгоритмы кроме | |
2 | Изменение в |
Алгоритм | |
3 | Изменение в значении целевой функции было меньше, чем |
Алгоритм | |
4 | Значение поискового направления было меньше, чем 2* |
5 | Значение косой производной в поисковом направлении было меньше, чем 2* |
| |
-3 | Целевая функция при текущей итерации понизилась |
вывод
Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенном как структура с полями:
iterations | Количество проделанных итераций |
funcCount | Количество функциональных оценок |
lssteplength | Размер строки ищет шаг относительно поискового направления (только |
constrviolation | Максимум ограничительных функций |
stepsize | Длина последнего смещения в |
algorithm | Алгоритм оптимизации используется |
cgiterations | Общее количество итераций PCG ( |
firstorderopt | Мера оптимальности первого порядка |
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].
'sqp'
fmincon
и алгоритмы '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 Отражающий Алгоритм.
[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.
Чтобы запуститься параллельно, установите опцию 'UseParallel'
на true
.
options = optimoptions('solvername','UseParallel',true)
Для получения дополнительной информации смотрите Используя Параллельные вычисления в Optimization Toolbox.
fminbnd
| fminsearch
| fminunc
| optimoptions
| optimtool
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.