exponenta event banner

fmincon

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

Описание

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

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

minxf (x ) так , что {c (x) ≤0ceq (x) =0A⋅x≤bAeq⋅x=beqlb≤x≤ub,

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 может быть скаляром, вектором или матрицей.

Примечание

В разделе Передача дополнительных параметров (Passing Extra Parameters) объясняется, как передать дополнительные параметры целевой функции и, при необходимости, нелинейным функциям ограничения.

пример

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. Смотри fmincon Гессен.

Примеры

свернуть все

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

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

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

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

В примере Свернуть с ограничивающими ограничениями (Minimize with Bound Constraints) показаны два решения. Что лучше? Выполните пример, запрашивающий 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]

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

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

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

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

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

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

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

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

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

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


x =

    0.7864    0.6177


fval =

    0.0457


exitflag =

     1


output = 

  struct with fields:

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


lambda = 

  struct with fields:

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


grad =

   -0.1911
   -0.1501


hessian =

  497.2903 -314.5589
 -314.5589  200.2392

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

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

  • hessian выход описан в fmincon 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-region-reflective.

Если вы также можете вычислить матрицу Гессена и Algorithm параметр имеет значение 'interior-point', есть другой способ передать гессен fmincon. Дополнительные сведения см. в разделе Hessian для алгоритма внутренней точки fmincon. Пример использования символьных математических Toolbox™ для вычисления градиента и гессена см. в разделе Расчет градиентов и гессенов с помощью символьных математических 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около-N матрица, где M - количество неравенств, и N - количество переменных (количество элементов в x0). По большим проблемам проходите A в виде разреженной матрицы.

A кодирует M линейные неравенства

A*x <= b,

где x - вектор столбца N переменные x(:), и b - вектор столбца с M элементы.

Например, для указания

x1 + 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около-N.

Например, рассмотрим эти неравенства:

x1 + 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около-N матрица, где Me - количество уравнений, и N - количество переменных (количество элементов в x0). По большим проблемам проходите Aeq в виде разреженной матрицы.

Aeq кодирует Me линейные равенства

Aeq*x = beq,

где x - вектор столбца N переменные x(:), и beq - вектор столбца с Me элементы.

Например, для указания

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 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около-N.

Например, рассмотрим следующие равенства:

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 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'

Сведения о выборе алгоритма см. в разделе Выбор алгоритма.

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

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

PlotFcn

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

  • 'optimplotx' выводит на график текущую точку

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

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

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

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

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

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

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

Для 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-й компонент градиента fun зависит от x(j). fmincon может аппроксимировать H через разреженные конечные разности (градиента), если вы предоставляете структуру разреженности H в качестве значения для HessPattern. Другими словами, укажите местоположения ненулевых значений.

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

MaxPCGIter

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

PrecondBandWidth

Верхняя полоса пропускания устройства предварительного кондиционирования для PCG, неотрицательное целое число. По умолчанию используется диагональное предварительное кондиционирование (верхняя полоса пропускания 0). При некоторых проблемах увеличение полосы пропускания уменьшает количество итераций PCG. Настройка PrecondBandWidth кому Inf использует прямую факторизацию (Cholesky), а не сопряженные градиенты (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· max (| x (i) |, | typicalx (i) |). Эта опция обеспечивает управление величиной смещений в x для случаев, когда решатель выполняет шаги, которые считаются слишком большими. По умолчанию границы отсутствуют ([]).

RelLineSrchBndDuration

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

TolConSQP

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

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

Выбирает способ fmincon обновляет параметр барьера (см. fmincon Алгоритм внутренних точек). Возможны следующие варианты:

  • '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

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

Типы данных: 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

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

bestfeasible

Наилучшая (наименьшая целевая функция) возможная точка. Структура со следующими полями:

  • x

  • fval

  • firstorderopt

  • constrviolation

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

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.

  • '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) +∑λi∇2ci (x) +∑λi∇2ceqi (x).(1)

Для получения подробной информации о том, как поставить гессен trust-region-reflective или interior-point алгоритмы, смотри «Включая гессенов

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

interior-point алгоритм имеет несколько вариантов для 'HessianApproximation' вариант; см. раздел Выбор входного гессенского приближения для внутренней точки 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 Interior Point Algorithm. Более подробное описание приведено в [1], [41] и [9].

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

Оптимизация активного набора

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

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

Дополнительные сведения об используемом алгоритме см. также в разделе Реализация SQP.

Оптимизация, отражающая область доверия

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

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

Приложение

Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для fmincon.

Ссылки

[1] Бэрд, R. H., Дж. К. Гильберт и Дж. Носедэл. «Метод доверительной области, основанный на методах внутренних точек для нелинейного программирования». Математическое программирование, том 89, № 1, 2000, стр. 149-185.

[2] Берд, Р. Х., Мэри Э. Хрибар и Хорхе Нокедаль. «Алгоритм внутренней точки для крупномасштабного нелинейного программирования». Журнал СИАМ по оптимизации, том 9, № 4, 1999, стр. 877-900.

[3] Коулман, Т. Ф. и Я. Ли. «Подход» Внутренняя область, область доверия «для нелинейной минимизации с учетом ограничений». Журнал СИАМ по оптимизации, том 6, 1996, стр. 418-445.

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

[5] Жабры, P. E., В. Мюррей и М. Х. Райт. Практическая оптимизация, Лондон, Академическая пресса, 1981 год.

[6] Хан, С. П. «Глобально конвергентный метод нелинейного программирования». Журнал теории и приложений оптимизации, том 22, 1977, стр. 297.

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

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

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

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

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