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) начинается с 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.

пример

[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. См. Фминкон Гессиан.

Примеры

свернуть все

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

Установите целевую функцию 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 = [];

Попробуйте начальную точку в середине области.

x0 = (lb + ub)/2;

Решите проблему.

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2

    1.0000    2.0000

Другая начальная точка может привести к другому решению.

x0 = x0/5;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
10-6 ×

    0.4000    0.4000

Чтобы определить, какое решение лучше, см. Раздел «Получение значения целевой функции».

Найдите минимум функции, удовлетворяющей нелинейным ограничениям

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

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

Посмотрите в область$0 \le x(1) \le 0.5$,.$0.2 \le x(2) \le 0.8$

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');

Найдите минимум функций Розенбрка на единичном диске,. $||x||^2 \le 1$Сначала создайте функцию, которая представляет нелинейное ограничение. Сохраните его как файл с именем unitdisk.m на пути MATLAB ®.

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];

Создайте оставшиеся спецификации проблемы. Затем запустите fmincon.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = @unitdisk;
x0 = [0,0];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
 Iter  Func-count            Fval   Feasibility   Step Length       Norm of   First-order  
                                                                       step    optimality
    0           3    1.000000e+00     0.000e+00     1.000e+00     0.000e+00     2.000e+00  
    1          12    8.913011e-01     0.000e+00     1.176e-01     2.353e-01     1.107e+01  
    2          22    8.047847e-01     0.000e+00     8.235e-02     1.900e-01     1.330e+01  
    3          28    4.197517e-01     0.000e+00     3.430e-01     1.217e-01     6.172e+00  
    4          31    2.733703e-01     0.000e+00     1.000e+00     5.254e-02     5.705e-01  
    5          34    2.397111e-01     0.000e+00     1.000e+00     7.498e-02     3.164e+00  
    6          37    2.036002e-01     0.000e+00     1.000e+00     5.960e-02     3.106e+00  
    7          40    1.164353e-01     0.000e+00     1.000e+00     1.459e-01     1.059e+00  
    8          43    1.161753e-01     0.000e+00     1.000e+00     1.754e-01     7.383e+00  
    9          46    5.901601e-02     0.000e+00     1.000e+00     1.547e-02     7.278e-01  
   10          49    4.533081e-02     2.898e-03     1.000e+00     5.393e-02     1.252e-01  
   11          52    4.567454e-02     2.225e-06     1.000e+00     1.492e-03     1.679e-03  
   12          55    4.567481e-02     4.406e-12     1.000e+00     2.095e-06     1.502e-05  
   13          58    4.567481e-02     0.000e+00     1.000e+00     2.203e-12     1.406e-05  

Local minimum possible. Constraints satisfied.

fmincon stopped because the size of the current step is less than
the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.


x =

    0.7864    0.6177

Включите градиентную оценку в целевую функцию для более быстрых или более надежных расчетов.

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

$$ f(x) = 100{\left( {{x_2} - x_1^2} \right)^2} +&#xA;{(1 - {x_1})^2},$$

который имеет градиент

$$\nabla f(x) = \left[ {\begin{array}{*{20}{c}}&#xA;{ - 400\left( {{x_2} - x_1^2} \right){x_1} - 2\left( {1 - {x_1}} \right)}\\&#xA;{200\left( {{x_2} - x_1^2} \right)}&#xA;\end{array}} \right].$$

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

Решите ту же задачу, что и в Опциях Nondefault, используя структуру задачи вместо отдельных аргументов.

Создайте опции и структуру задачи. Имена полей и обязательные поля см. в разделе «Проблема».

options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
problem.options = options;
problem.solver = 'fmincon';
problem.objective = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
problem.x0 = [0,0];

Нелинейная функция ограничения unitdisk появляется в конце этого примера. Включите нелинейную функцию ограничения в problem.

problem.nonlcon = @unitdisk;

Решите проблему.

x = fmincon(problem)
 Iter  Func-count            Fval   Feasibility   Step Length       Norm of   First-order  
                                                                       step    optimality
    0           3    1.000000e+00     0.000e+00     1.000e+00     0.000e+00     2.000e+00  
    1          12    8.913011e-01     0.000e+00     1.176e-01     2.353e-01     1.107e+01  
    2          22    8.047847e-01     0.000e+00     8.235e-02     1.900e-01     1.330e+01  
    3          28    4.197517e-01     0.000e+00     3.430e-01     1.217e-01     6.172e+00  
    4          31    2.733703e-01     0.000e+00     1.000e+00     5.254e-02     5.705e-01  
    5          34    2.397111e-01     0.000e+00     1.000e+00     7.498e-02     3.164e+00  
    6          37    2.036002e-01     0.000e+00     1.000e+00     5.960e-02     3.106e+00  
    7          40    1.164353e-01     0.000e+00     1.000e+00     1.459e-01     1.059e+00  
    8          43    1.161753e-01     0.000e+00     1.000e+00     1.754e-01     7.383e+00  
    9          46    5.901601e-02     0.000e+00     1.000e+00     1.547e-02     7.278e-01  
   10          49    4.533081e-02     2.898e-03     1.000e+00     5.393e-02     1.252e-01  
   11          52    4.567454e-02     2.225e-06     1.000e+00     1.492e-03     1.679e-03  
   12          55    4.567481e-02     4.406e-12     1.000e+00     2.095e-06     1.501e-05  
   13          58    4.567481e-02     0.000e+00     1.000e+00     2.159e-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.
x = 1×2

    0.7864    0.6177

Итеративное отображение и решение те же, что и в опциях Nondefault.

Следующий код создает unitdisk функция.

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
end

Функции fmincon с fval выход для получения значения целевой функции в решении.

Пример Минимизировать со Связанными Ограничениями показывает два решения. Что лучше? Запустите пример, запрашивающий fval выход, а также решение.

fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1));
lb = [0,0];
ub = [1,2];
A = [];
b = [];
Aeq = [];
beq = [];
x0 = (lb + ub)/2;
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2

    1.0000    2.0000

fval = -0.6667

Запустите задачу с другой начальной точки x0.

x0 = x0/5;
[x2,fval2] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x2 = 1×2
10-6 ×

    0.4000    0.4000

fval2 = 1.0000

Это решение имеет значение целевой функции fval2 = 1, что выше первого значения fval = –0.6667. Первое решение x имеет более низкое локальное минимальное значение целевой функции.

Чтобы легко изучить качество решения, запросите exitflag и output выходы.

Установите задачу минимизации функции Розенбрка на единичном диске,. $||x||^2 \le 1$Сначала создайте функцию, которая представляет нелинейное ограничение. Сохраните его как файл с именем unitdisk.m на пути MATLAB ®.

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];

Создайте оставшиеся спецификации проблемы.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
nonlcon = @unitdisk;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
x0 = [0,0];

Функции fmincon использование fval, exitflag, и output выходы.

[x,fval,exitflag,output] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.


x =

    0.7864    0.6177


fval =

    0.0457


exitflag =

     1


output = 

  struct with fields:

         iterations: 24
          funcCount: 84
    constrviolation: 0
           stepsize: 6.9162e-06
          algorithm: 'interior-point'
      firstorderopt: 2.4373e-08
       cgiterations: 4
            message: '...'
       bestfeasible: [1x1 struct]

  • The exitflag значение 1 указывает, что решение является локальным минимумом.

  • The output структура сообщает несколько статистических данных о процессе решения. В частности, это приводит количество итераций в output.iterations, количество вычислений функции в output.funcCount, и выполнимость в output.constrviolation.

fmincon при необходимости возвращает несколько выходов, которые можно использовать для анализа отчетного решения.

Установите задачу минимизации функции Розенбрка на единичном диске. Сначала создайте функцию, которая представляет нелинейное ограничение. Сохраните его как файл с именем unitdisk.m на пути MATLAB ®.

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];

Создайте оставшиеся спецификации проблемы.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
nonlcon = @unitdisk;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
x0 = [0,0];

Запросить все fmincon выходы.

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.


x =

    0.7864    0.6177


fval =

    0.0457


exitflag =

     1


output = 

  struct with fields:

         iterations: 24
          funcCount: 84
    constrviolation: 0
           stepsize: 6.9162e-06
          algorithm: 'interior-point'
      firstorderopt: 2.4373e-08
       cgiterations: 4
            message: '...'
       bestfeasible: [1x1 struct]


lambda = 

  struct with fields:

         eqlin: [0x1 double]
      eqnonlin: [0x1 double]
       ineqlin: [0x1 double]
         lower: [2x1 double]
         upper: [2x1 double]
    ineqnonlin: 0.1215


grad =

   -0.1911
   -0.1501


hessian =

  497.2903 -314.5589
 -314.5589  200.2392

  • The lambda.ineqnonlin выход показывает, что нелинейное ограничение активно в решении, и задает значение связанного множителя Лагранжа.

  • The grad выход задает значение градиента целевой функции в решении x.

  • The hessian выход описан в fmincon Hessian.

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

свернуть все

Функция для минимизации, заданная как указатель на функцию или имя функции. 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 trust-region или fmincon trust- области reflective алгоритмов для получения дополнительной информации.

Если вы также можете вычислить матрицу Гессия и Algorithm для опции задано значение 'interior-point', есть другой способ передать Гессиан fmincon. Для получения дополнительной информации смотрите Hessian для алгоритма fmincon interior-point. Для примера, используя Symbolic Math Toolbox™, чтобы вычислить градиент и Гессиан, смотрите Вычисление Градиентов и Гессианов Использование Symbolic Math Toolbox™.

The 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 элементы.

Для примера, чтобы задать

<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2  10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2  20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2  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.

Для примера рассмотрим эти неравенства:

<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2  10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2  20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2  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 элементы.

Для примера, чтобы задать

<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 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.

Для примера рассмотрим эти равенства:

<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 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'

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

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

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

  • SpecifyObjectiveGradient для установки в true

  • Либо связанные ограничения, либо линейные ограничения равенства, но не то и другое одновременно

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

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

CheckGradients

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

Для optimset, имя DerivativeCheck и значения 'on' или 'off'. См. «Текущие и устаревшие имена опций».

ConstraintTolerance

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

Для optimset, имя TolCon. См. «Текущие и устаревшие имена опций».

Диагностика

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

DiffMaxChange

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

DiffMinChange

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

Display

Level of 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', не выполняет проверку. The 'on' установка отображает ошибку, когда целевая функция возвращает значение, которое complex, Inf, или NaN.

MaxFunctionEvaluations

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

Для optimset, имя MaxFunEvals. См. «Текущие и устаревшие имена опций».

MaxIterations

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

Для optimset, имя MaxIter. См. «Текущие и устаревшие имена опций».

OptimalityTolerance

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

Для optimset, имя TolFun. См. «Текущие и устаревшие имена опций».

OutputFcn

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

PlotFcn

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

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

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

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

  • 'optimplotfvalconstr' Строит графики наилучшего допустимого значения целевой функции, найденного как линейный график. График показывает недопустимые точки как красные, а допустимые - как синие, используя допустимый допуск 1e-6.

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

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

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

Пользовательские функции построения графика используют тот же синтаксис, что и выходные функции. Смотрите Выходные функции для Optimization Toolbox™ и синтаксиса выходной функции и функции построения графика.

Для optimset, имя PlotFcns. См. «Текущие и устаревшие имена опций».

SpecifyConstraintGradient

Градиент для нелинейных функций ограничений, заданный пользователем. Когда установлено значение по умолчанию, false, fmincon оценивает градиенты нелинейных ограничений по конечным различиям. Когда установлено значение true, fmincon ожидает, что функция ограничения будет иметь четыре выхода, как описано в nonlcon. The 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 для масштабирования конечных различий для оценки градиента.

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

UseParallel

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

Алгоритм, отражающий доверительную область
FunctionTolerance

Отклонение завершения функции от значения, a положительной скалярной величины. Значение по умолчанию является 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/  <reservedrangesplaceholder0>x(j)  ≠ 0. В противном случае задайте HessPattern(i,j) = 0.

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

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

MaxPCGIter

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

PrecondBandWidth

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

SubproblemAlgorithm

Определяет, как вычисляется шаг итерации. Значение по умолчанию, 'cg', делает более быстрый, но менее точный шаг, чем 'factorization'. См. Fmincon Trust Region Reflective Algorithm.

TolPCG

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

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

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

Для optimset, имя TolFun. См. «Текущие и устаревшие имена опций».

MaxSQPIter

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

RelLineSrchBnd

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

RelLineSrchBndDuration

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

TolConSQP

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

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

Выбирает как fmincon обновляет параметр барьера (см. Fmincon Interior Point Algorithm). Возможны следующие варианты:

  • 'monotone' (по умолчанию)

  • 'predictor-corrector'

Этот выбор может повлиять на скорость и сходимость решателя, но эффект предсказать непросто.

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 аппроксимирует Гессиана с помощью метода, заданного в HessianApproximation, или использует поставляемую HessianMultiplyFcn. Если указатель на функцию, fmincon использует HessianFcn чтобы вычислить Гессиана. Смотрите Гессиан как Вход.

Для optimset, имя HessFcn. См. «Текущие и устаревшие имена опций».

HessianMultiplyFcn

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

Примечание

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

Для optimset, имя HessMult. См. «Текущие и устаревшие имена опций».

HonorBounds

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

Для optimset, имя AlwaysHonorConstraints и значения 'bounds' или 'none'. См. «Текущие и устаревшие имена опций».

InitBarrierParam

Начальное значение барьера, a положительной скалярной величины. Иногда это может помочь попробовать значение выше значения по умолчанию 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 Interior Point Algorithm.

TolProjCG

A относительной погрешности (критерий остановки) для проектируемого сопряженного алгоритма градиента; это для внутренней итерации, а не для итерации алгоритма. Эта положительная скалярная величина имеет значение по умолчанию 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 структура.

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

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

свернуть все

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

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

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

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

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

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

bestfeasible

Лучшая (самая низкая целевая функция) допустимая точка. Структура с этими полями:

  • x

  • fval

  • firstorderopt

  • constrviolation

Если допустимая точка не найдена, bestfeasible поле пустое. Для этой цели точка допустима, когда максимум ограничительных функций не превышает options.ConstraintTolerance.

The bestfeasible точка может отличаться от возвращенной точки решения x по целому ряду причин. Пример см. в разделе Получение наилучшей допустимой точки.

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.

  • The '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 алгоритмы, см. Включая Гессианов.

The active-set и sqp алгоритмы не принимают входа Гессиана. Они вычисляют квазиньютонское приближение к Гессиану Лагранжа.

The interior-point алгоритм имеет несколько вариантов для 'HessianApproximation' опция; см. «Выбор входного гессианского приближения» для fmincon внутренней точки:

  • 'bfgs'fmincon вычисляет Гессиан по плотному квазиньютоновскому приближению. Это гессианское приближение по умолчанию.

  • 'lbfgs'fmincon вычисляет Гессиан по крупномасштабному квазиньютоновскому приближению с ограниченной памятью. Используется память по умолчанию, 10 итераций.

  •  {'lbfgs',positive integer}fmincon вычисляет Гессиан по крупномасштабному квазиньютоновскому приближению с ограниченной памятью. Положительное целое число определяет, сколько итераций в прошлом должно быть запомнено.

  • 'finite-difference'fmincon вычисляет Гессианский векторный продукт по конечным различиям градиента (ов). Необходимо задать градиент целевой функции, а также градиенты нелинейных ограничений (если они существуют). Установите 'SpecifyObjectiveGradient' опция для true и, если применимо, 'SpecifyConstraintGradient' опция для true. Вы должны задать 'SubproblemAlgorithm' на 'cg'.

Функция умножения Гессиана

The interior-point и trust-region-reflective алгоритмы позволяют вам задать функцию умножения Гессиана. Эта функция дает результат векторного продукта Гессиана, не вычисляя непосредственно Гессиана. Это может сохранить память. Для получения дополнительной информации смотрите Функция умножения Гессиана.

Алгоритмы

свернуть все

Выбор алгоритма

Для помощи с выбором алгоритма смотрите fmincon Algorithms. Чтобы задать алгоритм, используйте optimoptions для создания options, и использовать 'Algorithm' Пара "имя-значение".

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

Оптимизация внутренней точки

Этот алгоритм описан в fmincon Interior Point Algorithm. Более подробное описание приведено в [1], [41] и [9].

Оптимизация SQP и SQP-устаревших версий

Оптимизация Active-Set

fmincon использует метод последовательного квадратичного программирования (SQP). В этом методе функция решает квадратичную подпрограмму программирования (QP) при каждой итерации. fmincon обновляет оценку Гессиана Лагранжа при каждой итерации с помощью формулы BFGS (см. fminunc и ссылки [7] и [8]).

fmincon выполняет поиск по линии с помощью функции merit, подобной функции, предложенной в [6], [7] и [8]. Подпрограмма QP решается с помощью стратегии активного набора, подобной описанной в [5]. fmincon Active Set Algorithm подробно описывает этот алгоритм.

Для получения дополнительной информации об используемом алгоритме см. также раздел «Реализация SQP».

Оптимизация Trust- Области Reflective

The 'trust-region-reflective' алгоритм является подпространственным методом доверительной области и основан на интерьерно-отражающем методе Ньютона, описанном в [3] и [4]. Каждая итерация включает приблизительное решение большой линейной системы с использованием метода предварительно обусловленных сопряженных градиентов (PCG). См. Описание доверительной области и предварительно обусловленного сопряженного градиентного метода в fmincon Trust Region Reflective Algorithm.

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

Приложение

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

Ссылки

[1] Byrd, R. H., J. C. Gilbert, and J. Nocedal. Метод доверительной области на основе методов внутренней точки для нелинейного программирования. Математическое программирование, том 89, № 1, 2000, с. 149-185.

[2] Byrd, R. H., Mary E. Hribar, and Jorge Nocedal. Алгоритм внутренней точки для крупномасштабного нелинейного программирования. SIAM Journal по оптимизации, том 9, № 4, 1999, с. 877-900.

[3] Коулман, Т. Ф. и Я. Ли. Подход внутренней доверительной области для нелинейной минимизации с учетом границ. SIAM Journal on Optimization, Vol. 6, 1996, pp. 418-445.

[4] Коулман, Т. Ф. и Я. Ли. «О сходимости отражающих методов Ньютона для крупномасштабной нелинейной минимизации, подверженной границам». Математическое программирование, том 67, номер 2, 1994, стр. 189-224.

[5] Гилл, П. Е., У. Мюррей и М. Х. Райт. Практическая оптимизация, Лондон, Академическая пресса, 1981.

[6] Хан, С. П. «Глобально сходимый метод нелинейного программирования». Journal of Optimization Theory and Applications, Vol. 22, 1977, pp. 297.

[7] Пауэлл, М. Дж. Д. «Быстрый алгоритм для нелинейных вычислений оптимизации с ограничениями». Численный анализ, ред. Г. А. Ватсон, Лекционные заметки по математике, Springer-Verlag, том 630, 1978.

[8] Пауэлл, М. Дж. Д. «Сходимость методов переменной метрики для нелинейных вычислений оптимизации с ограничениями». Нелинейное программирование 3 (О. Л. Мангасарян, Р. Р. Meyer, and S. M. Robinson, eds.), Academic Press, 1978.

[9] Вальс, Р. А., Дж. Л. Моралес, Дж. Нокедал и Д. Орбан. Внутренний алгоритм нелинейной оптимизации, который объединяет линии шагов области поиска и доверия. Математическое программирование, том 107, № 3, 2006, стр. 391-408.

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

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