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

Примечание

Передача Дополнительных Параметров объясняет, как передать дополнительные параметры целевой функции и нелинейным ограничительным функциям при необходимости.

пример

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], ограниченный иметь 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

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

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

$$ 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

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

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

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

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

problem.nonlcon = @unitdisk;

Решите задачу.

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

Local minimum possible. Constraints satisfied.

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

    0.7864    0.6177

Итеративное отображение и решение эквивалентны в Опциях Не по умолчанию.

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

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

Вызовите fmincon с fval выведите, чтобы получить значение целевой функции при решении.

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

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

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

    1.0000    2.0000

fval = -0.6667

Запустите проблему с помощью различной начальной точки x0.

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

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

    0.4000    0.4000

fval2 = 1.0000

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

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

Настройте проблему минимизации функции Розенброка на единичном диске$||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 использование fvalexitflag , и output выходные параметры .

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

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


x =

    0.7864    0.6177


fval =

    0.0457


exitflag =

     1


output = 

  struct with fields:

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

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

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

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

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

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

Создайте остающиеся проблемные технические требования.

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

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

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

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


x =

    0.7864    0.6177


fval =

    0.0457


exitflag =

     1


output = 

  struct with fields:

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


lambda = 

  struct with fields:

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


grad =

   -0.1911
   -0.1501


hessian =

  497.2903 -314.5589
 -314.5589  200.2392

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

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

  • hessian выход описан в fmincon Гессиане.

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

свернуть все

Функция, чтобы минимизировать в виде указателя на функцию или имени функции. fun функция, которая принимает вектор или массив x и возвращает действительный скалярный f, целевая функция выполнена в x.

Задайте fun как указатель на функцию для файла:

x = fmincon(@myfun,x0,A,b)

где myfun функция MATLAB® такой как

function f = myfun(x)
f = ...            % Compute function value at x

Можно также задать fun как указатель на функцию для анонимной функции:

x = fmincon(@(x)norm(x)^2,x0,A,b);

Если можно вычислить градиент fun и SpecifyObjectiveGradient опция установлена в true, как установлено

options = optimoptions('fmincon','SpecifyObjectiveGradient',true)
затем fun должен возвратить вектор градиента g(x) во втором выходном аргументе.

Если можно также вычислить матрицу Гессиана и HessianFcn опция установлена в 'objective' через optimoptions и Algorithm опцией является 'trust-region-reflective', fun должен возвратить значение Гессиана H(x), симметрическая матрица, в третьем выходном аргументе. fun может дать разреженный Гессиан. Смотрите Гессиан для fminunc доверительной области или области доверия fmincon отражающие алгоритмы для деталей.

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

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

Пример: fun = @(x)sin(x(1))*cos(x(2))

Типы данных: char | function_handle | string

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

  • 'interior-point' алгоритм — Если HonorBounds опцией является true (значение по умолчанию), fmincon сброс x0 компоненты, которые включены или вне ограничивают lb или ub к значениям строго между границами.

  • 'trust-region-reflective' алгоритм — fmincon сбрасывает неосуществимый x0 компоненты, чтобы быть выполнимым относительно границ или линейных равенств.

  • 'sqp', 'sqp-legacy', или 'active-set' алгоритм — fmincon сброс x0 компоненты, которые находятся вне границ к значениям соответствующих границ.

Пример: x0 = [1,2,3,4]

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

Линейные ограничения неравенства в виде действительной матрицы. A M- N матрица, где M количество неравенств и N количество переменных (число элементов в x0). Для больших проблем передайте A как разреженная матрица.

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

A*x <= b,

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

Например, чтобы задать

x 1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

введите эти ограничения:

A = [1,2;3,4;5,6];
b = [10;20;30];

Пример: Чтобы указать что x сумма компонентов к 1 или меньше, используйте A = ones(1,N) и b = 1.

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

Линейные ограничения неравенства в виде вектора действительных чисел. b M- вектор элемента связан с A матрица. Если вы передаете b как вектор-строка, решатели внутренне преобразуют b к вектор-столбцу b(:). Для больших проблем передайте b как разреженный вектор.

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

A*x <= b,

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

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

x 1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.

Задайте неравенства путем ввода следующих ограничений.

A = [1,2;3,4;5,6];
b = [10;20;30];

Пример: Чтобы указать что x сумма компонентов к 1 или меньше, используйте A = ones(1,N) и b = 1.

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

Линейные ограничения равенства в виде действительной матрицы. Aeq Me- N матрица, где Me количество равенств и N количество переменных (число элементов в x0). Для больших проблем передайте Aeq как разреженная матрица.

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

Aeq*x = beq,

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

Например, чтобы задать

x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 3 = 20,

введите эти ограничения:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Пример: Чтобы указать что x сумма компонентов к 1, используйте Aeq = ones(1,N) и beq = 1.

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

Линейные ограничения равенства в виде вектора действительных чисел. beq Me- вектор элемента связан с Aeq матрица. Если вы передаете beq как вектор-строка, решатели внутренне преобразуют beq к вектор-столбцу beq(:). Для больших проблем передайте beq как разреженный вектор.

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

Aeq*x = beq,

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

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

x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 3 = 20.

Задайте равенства путем ввода следующих ограничений.

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Пример: Чтобы указать что x сумма компонентов к 1, используйте Aeq = ones(1,N) и beq = 1.

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

Нижние границы в виде вектора действительных чисел или действительного массива. Если число элементов в x0 равно числу элементов в lb, затем lb задает это

x(i) >= lb(i) для всех i.

Если numel(lb) < numel(x0), затем lb задает это

x(i) >= lb(i) для 1 <= i <= numel(lb).

Если существует меньше элементов в lb чем в x0, решатели выдают предупреждение.

Пример: Чтобы указать, что все x компоненты положительны, используйте lb = zeros(size(x0)).

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

Верхние границы в виде вектора действительных чисел или действительного массива. Если число элементов в x0 равно числу элементов в ub, затем ub задает это

x(i) <= ub(i) для всех i.

Если numel(ub) < numel(x0), затем ub задает это

x(i) <= ub(i) для 1 <= i <= numel(ub).

Если существует меньше элементов в ub чем в x0, решатели выдают предупреждение.

Пример: Чтобы указать, что все x компоненты меньше 1, используйте ub = ones(size(x0)).

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

Нелинейные ограничения в виде указателя на функцию или имени функции. nonlcon функция, которая принимает вектор или массив x и возвращает два массива, c(x) и ceq(x).

  • c(x) массив нелинейных ограничений неравенства в x. fmincon попытки удовлетворить

    c(x) <= 0 для всех записей c.

  • ceq(x) массив нелинейных ограничений равенства в x. fmincon попытки удовлетворить

    ceq(x) = 0 для всех записей ceq.

Например,

x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

где mycon функция MATLAB такой как

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.
Если градиенты ограничений могут также быть вычислены и SpecifyConstraintGradient опцией является true, как установлено
options = optimoptions('fmincon','SpecifyConstraintGradient',true)
затем nonlcon должен также возвратиться, в третьих и четвертых выходных аргументах, GC, градиент c(x), и GCeq, градиент ceq(x). GC и GCeq может быть разреженным или плотным. Если GC или GCeq является большим, с относительно немногими ненулевыми записями, сэкономьте время выполнения и память в interior-point алгоритм путем представления их как разреженных матриц. Для получения дополнительной информации смотрите Нелинейные Ограничения.

Типы данных: char | function_handle | string

Опции оптимизации в виде выхода optimoptions или структура такой как optimset возвращается.

Некоторые опции применяются ко всем алгоритмам, и другие важны для конкретных алгоритмов. Дополнительную информацию см. в Ссылке Опций Оптимизации.

Некоторые опции отсутствуют в optimoptions отображение. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.

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

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

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

  • 'trust-region-reflective'

  • 'sqp'

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

  • 'active-set'

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

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

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

  • SpecifyObjectiveGradient быть установленным в true

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

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

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

CheckGradients

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

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

ConstraintTolerance

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

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

Диагностика

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

DiffMaxChange

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

DiffMinChange

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

Display

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

MaxFunctionEvaluations

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

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

MaxIterations

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

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

OptimalityTolerance

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

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

OutputFcn

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

PlotFcn

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

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

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

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

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

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

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

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

Пользовательские функции построения графика используют тот же синтаксис в качестве выходных функций. Смотрите Выходные функции для Optimization 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компонент th градиента fun зависит от x(j). fmincon может аппроксимировать H через разреженные конечные разности (градиента), если вы обеспечиваете sparsity structure H как значение для HessPattern. Другими словами, обеспечьте местоположения ненулей.

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

MaxPCGIter

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

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

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

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

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

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

MaxSQPIter

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

RelLineSrchBnd

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

RelLineSrchBndDuration

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

TolConSQP

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

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

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

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

  • 'finite-difference'

  • 'lbfgs'

  • {'lbfgs',Positive Integer}

Примечание

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

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

HessianFcn

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

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

HessianMultiplyFcn

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

Примечание

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

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

HonorBounds

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

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

InitBarrierParam

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

InitTrustRegionRadius

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

MaxProjCGIter

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

ObjectiveLimit

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

ScaleProblem

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

Для optimset, значениями является 'obj-and-constr' или 'none'. Смотрите текущие и устаревшие имена опции.

SubproblemAlgorithm

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

TolProjCG

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

TolProjCGAbs

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

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

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

ScaleProblem

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

Для optimset, значениями является 'obj-and-constr' или 'none'. Смотрите текущие и устаревшие имена опции.

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

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

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

objective

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

x0

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

Aineq

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

bineq

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

Aeq

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

beq

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

nonlcon

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

solver

'fmincon'

options

Опции, созданные с optimoptions

Необходимо предоставить, по крайней мере, objectivex0 , 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)+λi2ci(x)+λi2ceqi(x).(1)

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

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

interior-point алгоритм имеет несколько вариантов для 'HessianApproximation' опция; смотрите Выбирают Input Hessian Approximation для внутренней точки fmincon:

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

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

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

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

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

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

Алгоритмы

свернуть все

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

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

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

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

Этот алгоритм описан в fmincon Алгоритме Внутренней точки. Существует более обширное описание в [1], [41], и [9].

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

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

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

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

Доверительная область отражающая оптимизация

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

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

Приложение

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

Ссылки

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

[2] Бэрд, R. H. Мэри Э. Хрибэр и Хорхе Носедаль. “Алгоритм Внутренней точки для Крупномасштабного Нелинейного программирования”. SIAM Journal на Оптимизации, Vol 9, № 4, 1999, стр 877–900.

[3] Коулман, T. F. и И. Ли. “Внутренний, Доверительный Подход области для Нелинейной Минимизации Согласно Границам”. SIAM Journal на Оптимизации, Издании 6, 1996, стр 418–445.

[4] Коулман, T. F. и И. Ли. “На Сходимости Отражающих Методов Ньютона для Крупномасштабной Нелинейной Минимизации Согласно Границам”. Математическое программирование, Издание 67, Номер 2, 1994, стр 189–224.

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

[6] Ханьцы, S. P. “Глобально Конвергентный Метод для Нелинейного программирования”. Журнал Теории Оптимизации и Приложений, Издания 22, 1977, стр 297.

[7] Пауэлл, M. J. D. “Алгоритм FAST для Нелинейно Ограниченных Вычислений Оптимизации”. Числовой Анализ, редактор Г. А. Уотсон, Примечания Лекции в Математике, Springer-Verlag, Издании 630, 1978.

[8] Пауэлл, M. J. D. “Сходимость Переменных Метрических Методов Для Нелинейно Ограниченных Вычислений Оптимизации”. Нелинейное программирование 3 (О. Л. Мангасариэн, Р. Р. Мейер, и С. М. Робинсон, редакторы), Academic Press, 1978.

[9] Вальсируйте, R. A. Х. Л. Моралес, Дж. Носедэл и Д. Орбан. “Внутренний алгоритм для нелинейной оптимизации, которая комбинирует поиск линии и доверительные шаги области”. Математическое программирование, Vol 107, № 3, 2006, стр 391–408.

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

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