fmincon

Найдите минимум ограниченной нелинейной многомерной функции

Решатель нелинейного программирования.

Находит минимум проблемы заданным

minxf(x) таким образом , что {c(x)0ceq(x)=0AxbAeqx=beqlbxub,

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) минимизирует fun, подвергающийся линейным равенствам   Aeq*x = beq и   A*x ≤ b. Если никакие неравенства не существуют, устанавливают A = [] и b = [].

пример

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(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) подвергает минимизацию нелинейным неравенствам c(x) или равенства ceq(x), заданный в nonlcon. fmincon оптимизирует таким образом что   c(x) ≤ 0 и   ceq(x) = 0. Если никакие границы не существуют, устанавливают lb = [] и/или ub = [].

пример

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) минимизирует с опциями оптимизации, заданными в options. Используйте optimoptions, чтобы установить эти опции. Если нет никаких нелинейных ограничений неравенства или равенства, установите nonlcon = [].

пример

x = fmincon(problem) находит минимум для problem, где problem является структурой, описанной во Входных параметрах. Создайте структуру problem путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы.

пример

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

пример

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

пример

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___) дополнительно возвращается:

  • \lambda Структура с полями, содержащими множители Лагранжа в решении x.

  • grad — Градиент fun в решении x.

  • hessian — Гессиан fun в решении x. См. fmincon Гессиан.

Примеры

свернуть все

Найдите минимальное значение функции Розенброка, когда будет линейное ограничение неравенства.

Установите целевую функцию fun быть функцией Розенброка. Функция Розенброка известна, чтобы быть трудной минимизировать. Это имеет свое минимальное объективное значение 0 в точке (1,1). Для получения дополнительной информации смотрите, Решают Ограниченную Нелинейную проблему, Основанную на решателе.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

Найдите минимальное значение, начинающее с точки [-1,2], ограниченный иметь x(1)+2x(2)1. Выразите это ограничение в форме Ax <= b путем взятия A = [1,2] и b = 1. Заметьте, что это ограничение означает, что решение не будет в неограниченном решении (1,1), потому что в той точке x(1)+2x(2)=3>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], ограниченный иметь x(1)+2x(2)1 и 2x(1)+x(2)=1.

  • Выразите линейное ограничение неравенства в форме 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 является функцией, которая принимает вектор или массив 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, чтобы определить номер и размер переменных, которые принимает 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 является 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 является 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 является 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 является 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

Нижние границы, заданные как вектор действительных чисел или действительный массив. Если число элементов в 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

Верхние границы, заданные как вектор действительных чисел или действительный массив. Если число элементов в 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 является функцией, которая принимает вектор или массив 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. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.

Все алгоритмы
Algorithm

Выберите алгоритм оптимизации:

  • 'interior-point' (значение по умолчанию)

  • 'trust-region-reflective'

  • 'sqp'

  • 'sqp-legacy' (только optimoptions)

  • 'active-set'

Для получения информации о выборе алгоритма смотрите Выбор Algorithm.

Алгоритм trust-region-reflective требует:

  • Градиент, который будет предоставлен в целевой функции

  • SpecifyObjectiveGradient, который будет установлен в true

  • Или связанные ограничения или линейные ограничения равенства, но не оба

Если вы выбираете алгоритм 'trust-region-reflective', и эти условия все не удовлетворены, fmincon выдает ошибку.

'active-set', 'sqp-legacy' и алгоритмы 'sqp' не являются крупномасштабными. Смотрите Крупномасштабный по сравнению с Алгоритмами Средней шкалы.

CheckGradients

Сравните предоставленные пользователями производные (градиенты цели или ограничений) к производным конечного дифференцирования. Выбором является false (значение по умолчанию) или true.

Для optimset именем является DerivativeCheck, и значениями является 'on' или 'off'. См. Текущие и Устаревшие Таблицы Имени Опции.

ConstraintTolerance

Допуск на ограничительном нарушении, положительной скалярной величине. Значением по умолчанию является 1e-6. Смотрите Допуски и Критерий остановки.

Для optimset именем является TolCon. См. Текущие и Устаревшие Таблицы Имени Опции.

Диагностика

Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбором является 'off' (значение по умолчанию) или 'on'.

DiffMaxChange

Максимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). Значением по умолчанию является Inf.

DiffMinChange

Минимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). Значением по умолчанию является 0.

Display

Уровень отображения (см. Итеративное Отображение):

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

  • 'iter' отображает вывод в каждой итерации и дает выходное сообщение по умолчанию.

  • 'iter-detailed' отображает вывод в каждой итерации и дает техническое выходное сообщение.

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

  • 'notify-detailed' отображает вывод, только если функция не сходится и дает техническое выходное сообщение.

  • 'final' (значение по умолчанию) отображает только окончательный вывод и дает выходное сообщение по умолчанию.

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

FiniteDifferenceStepSize

Скалярный или векторный фактор размера шага для конечных разностей. Когда вы устанавливаете FiniteDifferenceStepSize на векторный v, прямые конечные разности, delta

delta = v.*sign′(x).*max(abs(x),TypicalX);

где sign′(x) = sign(x) кроме sign′(0) = 1. Центральные конечные разности

delta = v.*max(abs(x),TypicalX);

Скалярный FiniteDifferenceStepSize расширяется до вектора. Значением по умолчанию является sqrt(eps) для прямых конечных разностей и eps^(1/3) для центральных конечных разностей.

Для optimset именем является FinDiffRelStep. См. Текущие и Устаревшие Таблицы Имени Опции.

FiniteDifferenceType

Конечными разностями, используемыми, чтобы оценить градиенты, является или 'forward' (значение по умолчанию) или (сосредоточенный) 'central'. 'central' берет вдвое больше функциональных оценок, но должен быть более точным. Отражающий алгоритм доверительной области использует FiniteDifferenceType только, когда CheckGradients установлен в true.

fmincon старается повиноваться границам при оценке обоих типов конечных разностей. Так, например, это могло взять обратное, а не форвард, различие, чтобы не оценивать в точке вне границ. Однако для алгоритма interior-point, различия 'central' могут нарушить границы во время своей оценки, если опция HonorBounds установлена в false.

Для optimset именем является FinDiffType. См. Текущие и Устаревшие Таблицы Имени Опции.

FunValCheck

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

MaxFunctionEvaluations

Максимальное количество функциональных позволенных оценок, положительное целое число. Значением по умолчанию для всех алгоритмов кроме interior-point является 100*numberOfVariables; для алгоритма interior-point значением по умолчанию является 3000. Смотрите Допуски и Критерий остановки и Итерации и Функциональные количества.

Для optimset именем является MaxFunEvals. См. Текущие и Устаревшие Таблицы Имени Опции.

MaxIterations

Максимальное количество позволенных итераций, положительное целое число. Значением по умолчанию для всех алгоритмов кроме interior-point является 400; для алгоритма interior-point значением по умолчанию является 1000. Смотрите Допуски и Критерий остановки и Итерации и Функциональные количества.

Для optimset именем является MaxIter. См. Текущие и Устаревшие Таблицы Имени Опции.

OptimalityTolerance

Допуск завершения на оптимальности первого порядка (положительная скалярная величина). Значением по умолчанию является 1e-6. Смотрите Меру по Оптимальности Первого порядка.

Для optimset именем является TolFun. См. Текущие и Устаревшие Таблицы Имени Опции.

OutputFcn

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

PlotFcn

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

  • 'optimplotx' строит текущую точку

  • 'optimplotfunccount' строит функциональное количество

  • 'optimplotfval' строит значение функции

  • 'optimplotconstrviolation' строит максимальное ограничительное нарушение

  • 'optimplotstepsize' строит размер шага

  • 'optimplotfirstorderopt' строит меру по оптимальности первого порядка

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

Для optimset именем является PlotFcns. См. Текущие и Устаревшие Таблицы Имени Опции.

SpecifyConstraintGradient

Градиент для нелинейных ограничительных функций, определяемых пользователем. Когда установлено в значение по умолчанию, false, fmincon оценивает градиенты нелинейных ограничений конечными разностями. Когда установлено в true, fmincon ожидает, что ограничительная функция будет иметь четыре выходных параметров, как описано в nonlcon. Алгоритм trust-region-reflective не принимает нелинейные ограничения.

Для optimset именем является GradConstr, и значениями является 'on' или 'off'. См. Текущие и Устаревшие Таблицы Имени Опции.

SpecifyObjectiveGradient

Градиент для целевой функции задан пользователем. См. описание fun, чтобы видеть, как задать градиент в fun. Значение по умолчанию, false, заставляет fmincon оценивать градиенты с помощью конечных разностей. Установите на true, чтобы иметь использование fmincon пользовательский градиент целевой функции. Чтобы использовать алгоритм 'trust-region-reflective', необходимо обеспечить градиент и установить SpecifyObjectiveGradient на true.

Для optimset именем является GradObj, и значениями является 'on' или 'off'. См. Текущие и Устаревшие Таблицы Имени Опции.

StepTolerance

Допуск завершения на x, положительной скалярной величине. Значением по умолчанию для всех алгоритмов кроме 'interior-point' является 1e-6; для алгоритма 'interior-point' значением по умолчанию является 1e-10. Смотрите Допуски и Критерий остановки.

Для optimset именем является TolX. См. Текущие и Устаревшие Таблицы Имени Опции.

TypicalX

Типичные значения x. Число элементов в TypicalX равно числу элементов в x0, отправной точке. Значением по умолчанию является ones(numberofvariables,1). fmincon использует TypicalX для масштабирования конечных разностей для оценки градиента.

Алгоритм 'trust-region-reflective' использует TypicalX только для опции CheckGradients.

UseParallel

Когда true, fmincon оценивает градиенты параллельно. Отключите путем установки на значение по умолчанию, false. trust-region-reflective требует градиента в цели, таким образом, UseParallel не применяется. Смотрите Параллельные вычисления.

Доверительная область отражающий алгоритм
FunctionTolerance

Допуск завершения на значении функции, положительной скалярной величине. Значением по умолчанию является 1e-6. Смотрите Допуски и Критерий остановки.

Для optimset именем является TolFun. См. Текущие и Устаревшие Таблицы Имени Опции.

HessianFcn

Если [] (значение по умолчанию), fmincon аппроксимирует Гессиан с помощью конечных разностей или использует Гессиан, умножают функцию (с опцией HessianMultiplyFcn). Если 'objective', fmincon использует пользовательский Гессиан (заданный в fun). Смотрите Гессиан как Вход.

Для optimset именем является HessFcn. См. Текущие и Устаревшие Таблицы Имени Опции.

HessianMultiplyFcn

Гессиан умножает функцию, заданную как указатель на функцию. Для крупномасштабных структурированных проблем эта функция вычисляет матричное произведение Гессиана H*Y, на самом деле не формируя H. Функция имеет форму

W = hmfun(Hinfo,Y)

то, где Hinfo содержит матрицу, раньше вычисляло H*Y.

Первый аргумент совпадает с третьим аргументом, возвращенным целевой функцией fun, например

[f,g,Hinfo] = fun(x)

Y является матрицей, которая имеет одинаковое число строк, когда существуют размерности в проблеме. Матричный W = H*Y, несмотря на то, что H не формируется явным образом. fmincon использует Hinfo, чтобы вычислить предварительный формирователь. Для получения информации о том, как предоставить значения для любых дополнительных параметров потребности hmfun, смотрите Передающие Дополнительные Параметры.

Примечание

Чтобы использовать опцию HessianMultiplyFcn, HessianFcn должен быть установлен в [], и SubproblemAlgorithm должен быть 'cg' (значение по умолчанию).

Смотрите, что Гессиан Умножает Функцию. Смотрите Минимизацию с Плотным Структурированным Гессианом, Линейными Равенствами для примера.

Для optimset именем является HessMult. См. Текущие и Устаревшие Таблицы Имени Опции.

HessPattern

Шаблон разреженности Гессиана для конечного дифференцирования. Установите HessPattern(i,j) = 1, когда у вас сможет быть ∂2fun / ∂ x(i)x(j) ≠ 0. В противном случае установите HessPattern(i,j) = 0.

Используйте HessPattern, когда это неудобно, чтобы вычислить матрицу Гессиана H в fun, но можно определить (скажите контролем), когда i th компонент градиента fun зависит от x(j). fmincon может аппроксимировать H через разреженные конечные разности (градиента), если вы обеспечиваете sparsity structure H как значение для HessPattern. Другими словами, обеспечьте местоположения ненулей.

Когда структура будет неизвестна, не устанавливайте HessPattern. Поведение по умолчанию состоит в том, как будто HessPattern является плотной матрицей из единиц. Затем fmincon вычисляет полное приближение конечной разности в каждой итерации. Это вычисление может быть очень дорогим для больших проблем, таким образом, обычно лучше определить структуру разреженности.

MaxPCGIter

Максимальное количество итераций предобусловленного метода сопряженных градиентов (PCG), положительной скалярной величины. Значение по умолчанию является max(1,floor(numberOfVariables/2)) для связано ограниченных проблем и является numberOfVariables для ограниченных равенством проблем. Для получения дополнительной информации смотрите Предобусловленный Метод сопряженных градиентов.

PrecondBandWidth

Верхняя пропускная способность предварительного формирователя для PCG, неотрицательного целого числа. По умолчанию диагональное предварительное создание условий используется (верхняя пропускная способность 0). Для некоторых проблем, увеличивая пропускную способность сокращает количество итераций PCG. Установка PrecondBandWidth к Inf использует прямую факторизацию (Холесский), а не методы сопряженных градиентов (CG). Прямая факторизация является в вычислительном отношении более дорогой, чем CG, но производит лучший качественный шаг к решению.

SubproblemAlgorithm

Определяет, как шаг итерации вычисляется. Значение по умолчанию, 'cg', делает более быстрый, но менее точный шаг, чем 'factorization'. См. область Доверия fmincon Отражающий Алгоритм.

TolPCG

Допуск завершения на итерации PCG, положительной скалярной величине. Значением по умолчанию является 0.1.

Алгоритм активного набора
FunctionTolerance

Допуск завершения на значении функции, положительной скалярной величине. Значением по умолчанию является 1e-6. Смотрите Допуски и Критерий остановки.

Для optimset именем является TolFun. См. Текущие и Устаревшие Таблицы Имени Опции.

MaxSQPIter

Максимальное количество позволенных итераций SQP, положительное целое число. Значением по умолчанию является 10*max(numberOfVariables, numberOfInequalities + numberOfBounds).

RelLineSrchBnd

Родственник связал (действительное неотрицательное скалярное значение) на длине шага поиска строки. Общее смещение в x удовлетворяет | Δx (i) |  ≤ relLineSrchBnd · макс. (|x (i) |, |typicalx (i) |). Эта опция обеспечивает управление значением смещений в x для случаев, в которых решатель предпринимает шаги, которые рассматриваются слишком большими. Значением по умолчанию не являются никакие границы ([]).

RelLineSrchBndDuration

Количество итераций, для которых связанное, заданное в RelLineSrchBnd, должно быть активным (значением по умолчанию является 1).

TolConSQP

Допуск завершения на внутренней итерации ограничительное нарушение SQP, положительная скалярная величина. Значением по умолчанию является 1e-6.

Алгоритм внутренней точки
HessianApproximation

Выбирает, как fmincon вычисляет Гессиан (см. Гессиан как Вход). Выбор:

  • 'bfgs' (значение по умолчанию)

  • 'finite-difference'

  • 'lbfgs'

  • {'lbfgs',Positive Integer}

Примечание

Чтобы использовать HessianApproximation, и HessianFcn и HessianMultiplyFcn должны быть пустыми записями ([]).

Для optimset именем является Hessian, и значениями является 'user-supplied', 'bfgs', 'lbfgs', 'fin-diff-grads', 'on' или 'off'. См. Текущие и Устаревшие Таблицы Имени Опции.

HessianFcn

Если [] (значение по умолчанию), fmincon аппроксимирует Гессиан с помощью конечных разностей или использует предоставленный HessianMultiplyFcn. Если указатель на функцию, fmincon использует HessianFcn, чтобы вычислить Гессиан. Смотрите Гессиан как Вход.

Для optimset именем является HessFcn. См. Текущие и Устаревшие Таблицы Имени Опции.

HessianMultiplyFcn

Предоставленная пользователями функция, которая дает Векторное произведение времен гессиана (см., что Гессиан Умножает Функцию). Передайте указатель на функцию.

Примечание

Чтобы использовать опцию HessianMultiplyFcn, HessianFcn должен быть установлен в [], и SubproblemAlgorithm должен быть 'cg'.

Для optimset именем является HessMult. См. Текущие и Устаревшие Таблицы Имени Опции.

HonorBounds

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

Для optimset именем является AlwaysHonorConstraints, и значениями является 'bounds' или 'none'. См. Текущие и Устаревшие Таблицы Имени Опции.

InitBarrierParam

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

InitTrustRegionRadius

Начальный радиус доверительной области, положительной скалярной величины. На плохо масштабированных проблемах это может помочь выбрать значение, меньшее, чем значение по умолчанию n, где n является количеством переменных.

MaxProjCGIter

Допуск (останавливающий критерий) для количества спроектированных итераций метода сопряженных градиентов; это - внутренняя итерация, не количество итераций алгоритма. Это положительное целое число имеет значение по умолчанию   2*(numberOfVariables - numberOfEqualities).

ObjectiveLimit

Допуск (останавливающий критерий), который является скаляром. Если значение целевой функции понижается, ObjectiveLimit и выполнение итерации выполнимы, останов итераций, потому что проблема, по-видимому, неограниченна. Значением по умолчанию является -1e20.

ScaleProblem

true заставляет алгоритм нормировать все ограничения и целевую функцию. Отключите путем установки на false по умолчанию.

Для optimset значениями является 'obj-and-constr' или 'none'. См. Текущие и Устаревшие Таблицы Имени Опции.

SubproblemAlgorithm

Определяет, как шаг итерации вычисляется. Значение по умолчанию, 'factorization', обычно быстрее, чем 'cg' (метод сопряженных градиентов), хотя 'cg' может быть быстрее для больших проблем с плотными Гессианами. См. fmincon Алгоритм Внутренней точки.

TolProjCG

Относительный допуск (останавливающий критерий) для спроектированного алгоритма метода сопряженных градиентов; это для внутренней итерации, не итерации алгоритма. Эта положительная скалярная величина имеет значение по умолчанию 0.01.

TolProjCGAbs

Абсолютный допуск (останавливающий критерий) для спроектированного алгоритма метода сопряженных градиентов; это для внутренней итерации, не итерации алгоритма. Эта положительная скалярная величина имеет значение по умолчанию 1e-10.

SQP и устаревшие алгоритмы SQP
ObjectiveLimit

Допуск (останавливающий критерий), который является скаляром. Если значение целевой функции понижается, ObjectiveLimit и выполнение итерации выполнимы, останов итераций, потому что проблема, по-видимому, неограниченна. Значением по умолчанию является -1e20.

ScaleProblem

true заставляет алгоритм нормировать все ограничения и целевую функцию. Отключите путем установки на false по умолчанию.

Для optimset значениями является 'obj-and-constr' или 'none'. См. Текущие и Устаревшие Таблицы Имени Опции.

Пример: options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)

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

Имя поляЗапись

objective

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

x0

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

Aineq

Матрица для линейных ограничений неравенства

bineq

Вектор для линейных ограничений неравенства

Aeq

Матрица для линейных ограничений равенства

beq

Вектор для линейных ограничений равенства
lbВектор нижних границ
ubВектор верхних границ

nonlcon

Нелинейная ограничительная функция

solver

'fmincon'

options

Опции создаются с optimoptions

Необходимо предоставить, по крайней мере, objective, x0, solver и поля options в структуре problem.

Самым простым способом получить структуру problem является экспорт задачи из Optimization app.

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

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

свернуть все

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

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

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

Все алгоритмы:

1

Мерой по оптимальности первого порядка были меньше, чем options.OptimalityTolerance, и максимальное ограничительное нарушение было меньше, чем options.ConstraintTolerance.

0

Количество итераций превысило options.MaxIterations, или количество функциональных оценок превысило options.MaxFunctionEvaluations.

-1

Зашедший выходная функция или функция построения графика.

-2

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

Все алгоритмы кроме active-set:

2

Изменение в x было меньше, чем options.StepTolerance и максимальное ограничительное нарушение были меньше, чем options.ConstraintTolerance.

Алгоритм trust-region-reflective только:

3

Изменение в значении целевой функции было меньше, чем options.FunctionTolerance и максимальное ограничительное нарушение были меньше, чем options.ConstraintTolerance.

Алгоритм active-set только:

4

Значение поискового направления было меньше, чем 2*options.StepTolerance, и максимальное ограничительное нарушение было меньше, чем options.ConstraintTolerance.

5

Значение косой производной в поисковом направлении было меньше, чем 2*options.OptimalityTolerance, и максимальное ограничительное нарушение было меньше, чем options.ConstraintTolerance.

interior-point, sqp-legacy и алгоритмы sqp:

-3

Целевая функция при текущей итерации понизилась, options.ObjectiveLimit и максимальное ограничительное нарушение были меньше, чем options.ConstraintTolerance.

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

iterations

Количество проделанных итераций

funcCount

Количество функциональных оценок

lssteplength

Размер строки ищет шаг относительно поискового направления (только active-set и алгоритмы sqp)

constrviolation

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

stepsize

Длина последнего смещения в x (не в алгоритме active-set)

algorithm

Алгоритм оптимизации используется

cgiterations

Общее количество итераций PCG (trust-region-reflective и алгоритмы interior-point)

firstorderopt

Мера оптимальности первого порядка

message

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

Множители Лагранжа в решении, возвращенном как структура с полями:

lower

Нижние границы, соответствующие lb

upper

Верхние границы, соответствующие ub

ineqlin

Линейные неравенства, соответствующие A и b

eqlin

Линейные равенства, соответствующие Aeq и beq

ineqnonlin

Нелинейные неравенства, соответствующие c в nonlcon

eqnonlin

Нелинейные равенства, соответствующие ceq в nonlcon

Градиент в решении, возвращенном как вектор действительных чисел. grad дает градиент fun в точке x(:).

Аппроксимированный Гессиан, возвращенный как действительная матрица. Для значения 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), а именно,

xx2L(x,λ)=2f(x)+λi2ci(x)+λi2ceqi(x).(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). В этом методе функция решает подпроблему квадратичного программирования (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.

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

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