exponenta event banner

quadprog

Квадратичное программирование

Описание

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

quadprog находит минимум для задачи, указанной

minx12xTHx +  fTx , так что {A⋅x≤b,Aeq⋅x=beq,lb≤x≤ub.

H, A и Aeq являются матрицами, а f, b, beq, lb, ub и x - векторами.

Вы можете передать f, lb и ub как векторы или матрицы; см. Аргументы матрицы.

Примечание

quadprog применяется только к подходу, основанному на решателе. Обсуждение двух подходов к оптимизации см. в разделе Первый выбор подхода на основе проблем или подхода на основе решателей.

x = quadprog(H,f) возвращает вектор x что сводит к минимуму 1/2*x'*H*x + f'*x. Вход H должен быть положительным, определенным для того, чтобы задача имела конечный минимум. Если H является положительным определенным, то решение x = H\(-f).

пример

x = quadprog(H,f,A,b) минимизирует 1/2*x'*H*x + f'*x с учетом ограничений A*x  b. Вход A является матрицей двойников, и b является вектором двойников.

пример

x = quadprog(H,f,A,b,Aeq,beq) решает предыдущую проблему с учетом дополнительных ограничений Aeq*x = beq. Aeq является матрицей двойников, и beq является вектором двойников. Если неравенства не существует, установите A = [] и b = [].

пример

x = quadprog(H,f,A,b,Aeq,beq,lb,ub) решает предыдущую проблему с учетом дополнительных ограничений lb  x  ub. Исходные данные lb и ub являются векторами двойников, и ограничения сохраняются для каждого x компонент. Если равенства отсутствуют, установите Aeq = [] и beq = [].

Примечание

Если указанные входные границы для проблемы противоречивы, вывод x является x0 и выходные данные fval является [].

quadprog сбрасывает компоненты x0 которые нарушают границы lb  x  ub к внутренней части рамки, определяемой границами. quadprog не изменяет компоненты, соответствующие границам.

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) решает предыдущую задачу, начиная с вектора x0. Если границ не существует, установите lb = [] и ub = []. Некоторые quadprog алгоритмы игнорируют x0; посмотрите x0.

Примечание

x0 является обязательным аргументом для 'active-set' алгоритм.

пример

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) решает предыдущую задачу, используя опции оптимизации, указанные в options. Использовать optimoptions создать options. Если не требуется задавать начальную точку, установите x0 = [].

пример

x = quadprog(problem) возвращает минимальное значение для problem, структура, описанная в problem. Создать problem структура с использованием точечной нотации или struct функция. Либо создайте problem структура из OptimizationProblem объект с помощью prob2struct.

пример

[x,fval] = quadprog(___), для любых входных переменных, также возвращает fval, значение целевой функции при x:

fval = 0.5*x'*H*x + f'*x

пример

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

пример

[x,fval,exitflag,output,lambda] = quadprog(___) также возвращает lambda, структура, поля которой содержат множители Лагранжа в решении x.

пример

[wsout,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub,ws) запуски quadprog из данных в теплом начальном объекте ws, используя опции в ws. Возвращенный аргумент wsout содержит точку решения в wsout.X. С помощью wsout в качестве начального объекта теплого начала в последующем вызове решателя, quadprog может работать быстрее.

Примеры

свернуть все

Найти минимум

f (x) = 12x12 + x22-x1x2-2x1-6x2

с учетом ограничений

x1+x2≤2-x1+2x2≤22x1+x2≤3.

В quadprog синтаксис, эта проблема заключается в минимизации

f (x) = 12xTHx + fTx,

где

H = [1-1-12] f = [-2-6],

с учетом линейных ограничений.

Для решения этой задачи сначала введите матрицы коэффициентов.

H = [1 -1; -1 2]; 
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];

Звонить quadprog.

[x,fval,exitflag,output,lambda] = ...
   quadprog(H,f,A,b);
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,fval,exitflag
x = 2×1

    0.6667
    1.3333

fval = -8.2222
exitflag = 1

Флаг выхода 1 означает, что результат является локальным минимумом. Поскольку H является положительной определенной матрицей, эта задача является выпуклой, поэтому минимум является глобальным минимумом.

Подтвердить, что H является положительным определенным путем проверки его собственных значений.

eig(H)
ans = 2×1

    0.3820
    2.6180

Найти минимум

f (x) = 12x12 + x22-x1x2-2x1-6x2

с учетом ограничения

x1+x2=0.

В quadprog синтаксис, эта проблема заключается в минимизации

f (x) = 12xTHx + fTx,

где

H = [1-1-12] f = [-2-6],

с учетом линейной зависимости.

Для решения этой задачи сначала введите матрицы коэффициентов.

H = [1 -1; -1 2]; 
f = [-2; -6];
Aeq = [1 1];
beq = 0;

Звонить quadprog, ввод [] для вводов A и b.

[x,fval,exitflag,output,lambda] = ...
   quadprog(H,f,[],[],Aeq,beq);
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,fval,exitflag
x = 2×1

   -0.8000
    0.8000

fval = -1.6000
exitflag = 1

Флаг выхода 1 означает, что результат является локальным минимумом. Поскольку H является положительной определенной матрицей, эта задача является выпуклой, поэтому минимум является глобальным минимумом.

Подтвердить, что H является положительным определенным путем проверки его собственных значений.

eig(H)
ans = 2×1

    0.3820
    2.6180

Найти x, который минимизирует квадратичное выражение

12xTHx + fTx

где

H = [1-11-12-21-24], f = [2-31],

с учетом ограничений

0≤x≤1, ∑x=1/2.

Чтобы решить эту проблему, сначала введите коэффициенты.

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [2;-3;1];
lb = zeros(3,1);
ub = ones(size(lb));
Aeq = ones(1,3);
beq = 1/2;

Звонить quadprog, ввод [] для вводов A и b.

x = quadprog(H,f,[],[],Aeq,beq,lb,ub)
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 = 3×1

    0.0000
    0.5000
    0.0000

Установка параметров для мониторинга хода выполнения quadprog.

options = optimoptions('quadprog','Display','iter');

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

H = [1 -1; -1 2]; 
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];

Чтобы помочь написать quadprog вызов функции, установка ненужных входов в [].

Aeq = [];
beq = [];
lb = [];
ub = [];
x0 = [];

Звонить quadprog для решения проблемы.

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
 Iter            Fval  Primal Infeas    Dual Infeas  Complementarity  
    0   -8.884885e+00   3.214286e+00   1.071429e-01     1.000000e+00  
    1   -8.331868e+00   1.321041e-01   4.403472e-03     1.910489e-01  
    2   -8.212804e+00   1.676295e-03   5.587652e-05     1.009601e-02  
    3   -8.222204e+00   8.381476e-07   2.793826e-08     1.809485e-05  
    4   -8.222222e+00   3.019807e-14   1.352696e-12     7.525735e-13  

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 = 2×1

    0.6667
    1.3333

Создать problem структура с использованием рабочего процесса оптимизации на основе проблем. Создайте задачу оптимизации, эквивалентную задаче «Квадратичная программа с линейными ограничениями».

x = optimvar('x',2);
objec = x(1)^2/2 + x(2)^2 - x(1)*x(2) - 2*x(1) - 6*x(2);
prob = optimproblem('Objective',objec);
prob.Constraints.cons1 = sum(x) <= 2;
prob.Constraints.cons2 = -x(1) + 2*x(2) <= 2;
prob.Constraints.cons3 = 2*x(1) + x(2) <= 3;

Новообращенный prob в problem структура.

problem = prob2struct(prob);

Решить проблему с помощью quadprog.

[x,fval] = quadprog(problem)
Warning: Your Hessian is not symmetric. Resetting H=(H+H')/2.
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 = 2×1

    0.6667
    1.3333

fval = -8.2222

Решите квадратичную программу и верните как решение, так и значение целевой функции.

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [-7;-12;-15];
A = [1,1,1];
b = 3;
[x,fval] = quadprog(H,f,A,b)
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 = 3×1

   -3.5714
    2.9286
    3.6429

fval = -47.1786

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

fval2 = 1/2*x'*H*x + f'*x
fval2 = -47.1786

Просмотр процесса оптимизации для quadprog, задайте параметры для отображения итеративного дисплея и возврата четырех выходов. Проблема заключается в минимизации

12xTHx + fTx

подлежит

0≤x≤1,

где

H = [21-11312-1125], f = [4-712].

Введите коэффициенты проблемы.

H = [2 1 -1
    1 3 1/2
    -1 1/2 5];
f = [4;-7;12];
lb = zeros(3,1);
ub = ones(3,1);

Задайте опции для отображения итеративного хода выполнения решателя.

options = optimoptions('quadprog','Display','iter');

Звонить quadprog с четырьмя выходами.

[x fval,exitflag,output] = quadprog(H,f,[],[],[],[],lb,ub,[],options)
 Iter            Fval  Primal Infeas    Dual Infeas  Complementarity  
    0    2.691769e+01   1.582123e+00   1.712849e+01     1.680447e+00  
    1   -3.889430e+00   0.000000e+00   8.564246e-03     9.971731e-01  
    2   -5.451769e+00   0.000000e+00   4.282123e-06     2.710131e-02  
    3   -5.499997e+00   0.000000e+00   1.221903e-10     6.939689e-07  
    4   -5.500000e+00   0.000000e+00   5.842173e-14     3.469847e-10  

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 = 3×1

    0.0000
    1.0000
    0.0000

fval = -5.5000
exitflag = 1
output = struct with fields:
            message: '...'
          algorithm: 'interior-point-convex'
      firstorderopt: 1.5921e-09
    constrviolation: 0
         iterations: 4
       linearsolver: 'dense'
       cgiterations: []

Решите проблему квадратичного программирования и верните множители Лагранжа.

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [-7;-12;-15];
A = [1,1,1];
b = 3;
lb = zeros(3,1);
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb);
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.

Изучение структуры множителя Лагранжа lambda.

disp(lambda)
    ineqlin: 12.0000
      eqlin: [0x1 double]
      lower: [3x1 double]
      upper: [3x1 double]

Ограничение линейного неравенства имеет связанный множитель Лагранжа 12.

Отображение множителей, связанных с нижней границей.

disp(lambda.lower)
    5.0000
    0.0000
    0.0000

Только первый компонент lambda.lower имеет ненулевой множитель. Это обычно означает, что только первый компонент x находится на нижней границе нуля. Подтвердите, выведя на экран компоненты x.

disp(x)
    0.0000
    1.5000
    1.5000

Чтобы ускорить последующие quadprog вызовы, создайте теплый начальный объект.

options = optimoptions('quadprog','Algorithm','active-set');
x0 = [1 2 3];
ws = optimwarmstart(x0,options);

Решение квадратичной программы с помощью ws.

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [-7;-12;-15];
A = [1,1,1];
b = 3;
lb = zeros(3,1);
tic
[ws,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],ws);
toc
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.
Elapsed time is 0.021717 seconds.

Измените целевую функцию и снова решите проблему.

f = [-10;-15;-20];

tic
[ws,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],ws);
toc
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.
Elapsed time is 0.018485 seconds.

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

свернуть все

Квадратичный целевой член, определяемый как симметричная вещественная матрица. H представляет квадратичное значение в выражении 1/2*x'*H*x + f'*x. Если H не является симметричным, quadprog выдает предупреждение и использует симметричную версию (H + H')/2 вместо этого.

Если квадратичная матрица H разрежен, то по умолчанию 'interior-point-convex' алгоритм использует несколько другой алгоритм, чем когда H плотный. Обычно разреженный алгоритм быстрее при больших, разреженных проблемах, а плотный алгоритм быстрее при плотных или малых проблемах. Дополнительные сведения см. в разделе LinearSolver описание опции и внутренний-точка-выпуклый квадпрог Алгоритм.

Пример: [2,1;1,3]

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

Линейный целевой член, заданный как действительный вектор. f представляет линейный член в выражении 1/2*x'*H*x + f'*x.

Пример: [1;3;2]

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

Начальная точка, заданная как действительный вектор. Длина x0 - количество строк или столбцов H.

x0 относится к 'trust-region-reflective' алгоритм, когда проблема имеет только связанные ограничения. x0 также относится к 'active-set' алгоритм.

Примечание

x0 является обязательным аргументом для 'active-set' алгоритм.

Если не указать x0, quadprog устанавливает все компоненты x0 до точки во внутренней части рамки, определяемой границами. quadprog игнорирует x0 для 'interior-point-convex' и для 'trust-region-reflective' алгоритм с ограничениями равенства.

Пример: [1;2;1]

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

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

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

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

Algorithm

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

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

  • 'trust-region-reflective'

  • 'active-set'

'interior-point-convex' алгоритм обрабатывает только выпуклые проблемы. 'trust-region-reflective' алгоритм обрабатывает проблемы только с границами или только линейными ограничениями равенства, но не с обоими. 'active-set' алгоритм обрабатывает неопределенные проблемы при условии, что проекция H на пространство NULL Aeq является положительным полуопределением. Дополнительные сведения см. в разделе Выбор алгоритма.

Диагностика

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

Display

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

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

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

'interior-point-convex' и 'active-set' алгоритмы допускают дополнительные значения:

  • 'iter' задает итеративное отображение.

  • 'iter-detailed' указывает итеративное отображение с подробным сообщением о выходе.

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

MaxIterations

Максимально допустимое число итераций; положительное целое число.

  • Для 'trust-region-reflective' проблема с ограничением равенства, значением по умолчанию является 2*(numberOfVariables – numberOfEqualities).

  • 'active-set' имеет значение по умолчанию 10*(numberOfVariables + numberOfConstraints).

  • Для всех остальных алгоритмов и проблем значением по умолчанию является 200.

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

OptimalityTolerance

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

  • Для 'trust-region-reflective' проблема с ограничением равенства, значением по умолчанию является 1e-6.

  • Для 'trust-region-reflective' проблема с зависимостью, значение по умолчанию: 100*epsО нас 2.2204e-14.

  • Для 'interior-point-convex' и 'active-set' алгоритмы, значение по умолчанию: 1e-8.

См. раздел Допуски и критерии остановки.

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

StepTolerance

Допуск окончания на x; положительный скаляр.

  • Для 'trust-region-reflective', значением по умолчанию является 100*epsО нас 2.2204e-14.

  • Для 'interior-point-convex', значением по умолчанию является 1e-12.

  • Для 'active-set', значением по умолчанию является 1e-8.

Для optimset, имя опции: TolX. См. раздел Имена текущих и устаревших опций.

'trust-region-reflective' Только алгоритм

FunctionTolerance

Допуск окончания для значения функции; положительный скаляр. Значение по умолчанию зависит от типа проблемы: использование связанных проблем 100*epsи использование линейных проблем, связанных с равенством 1e-6. См. раздел Допуски и критерии остановки.

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

HessianMultiplyFcn

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

W = hmfun(Hinfo,Y)

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

Пример использования этой опции см. в разделе Quadratic Minimization with Dense, Structured Hessian.

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

MaxPCGIter

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

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

Допуск окончания на итерации PCG; положительный скаляр. Значение по умолчанию: 0.1.

TypicalX

Типичный x значения. Количество элементов в TypicalX равно количеству элементов в x0, отправная точка. Значение по умолчанию: ones(numberOfVariables,1). quadprog использование TypicalX внутренне для масштабирования. TypicalX имеет эффект только тогда, когда x имеет неограниченные компоненты, и когда TypicalX значение для неограниченного компонента превышает 1.

'interior-point-convex' Только алгоритм

ConstraintTolerance

Допуск на нарушение ограничения; положительный скаляр. Значение по умолчанию: 1e-8.

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

LinearSolver

Тип внутреннего линейного решателя в алгоритме:

  • 'auto' (по умолчанию) - Использовать 'sparse' если H матрица разрежена и 'dense' в противном случае.

  • 'sparse' - Использовать разреженную линейную алгебру. См. раздел Разреженные матрицы.

  • 'dense' - Использовать плотную линейную алгебру.

'active-set' Только алгоритм

ConstraintTolerance

Допуск на нарушение ограничения; положительный скаляр. Значение по умолчанию: 1e-8.

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

ObjectiveLimit

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

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

H

Симметричная матрица в 1/2*x'*H*x

f

Вектор в линейном члене f'*x

Aineq

Матрица в линейных ограничениях неравенства Aineq*x  bineq

bineq

Вектор в линейных ограничениях неравенства Aineq*x  bineq

Aeq

Матрица в линейных ограничениях равенства Aeq*x = beq

beq

Вектор в линейных ограничениях равенства Aeq*x = beq
lbВектор нижних границ
ubВектор верхних границ

x0

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

solver

'quadprog'

options

Параметры, созданные с помощью optimoptions или optimset

Обязательные поля: H, f, solver, и options. При решении, quadprog игнорирует любые поля в problem кроме перечисленных.

Примечание

Нельзя использовать теплое начало с problem аргумент.

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

Теплый начальный объект, заданный как объект, созданный с помощью optimwarmstart. Объект теплого начала содержит начальную точку и параметры, а также дополнительные данные для размера памяти при создании кода. См. раздел Передовые практики «Теплый старт».

Пример: ws = optimwarmstart(x0,options)

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

свернуть все

Решение, возвращенное как реальный вектор. x является вектором, который минимизирует 1/2*x'*H*x + f'*x со всеми границами и линейными ограничениями. x может быть локальным минимумом для неконвексных проблем. Для выпуклых проблем, x является глобальным минимумом. Дополнительные сведения см. в разделе Локальная и глобальная оптимизация.

Теплый начальный объект решения, возвращенный как QuadprogWarmStart объект. Точка решения: wsout.X.

Вы можете использовать wsout в качестве входного теплого стартового объекта в последующем quadprog звоните.

Значение целевой функции в решении, возвращаемое как вещественный скаляр. fval - значение 1/2*x'*H*x + f'*x на решении x.

Причина quadprog stopped, возвращается как целое число, описанное в этой таблице.

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

1

Функция, сходящаяся к решению x.

0

Превышено число итераций options.MaxIterations.

-2

Проблема неосуществима. Или, для 'interior-point-convex', размер шага был меньше, чем options.StepTolerance, но ограничения не были удовлетворены.

-3

Проблема безгранична.

'interior-point-convex' Алгоритм

2

Размер шага был меньше options.StepTolerance, ограничения были удовлетворены.

-6

Обнаружена неконвексная проблема.

-8

Не удалось вычислить направление шага.

'trust-region-reflective' Алгоритм

4

Найден локальный минимум; минимум не уникален.

3

Изменение значения целевой функции было меньше options.FunctionTolerance.

-4

Текущее направление поиска не было направлением спуска. Дальнейшего прогресса достичь не удалось.

'active-set' Алгоритм

-6

Обнаружена неконвексная проблема; проекция H на пространство NULL Aeq не является положительным полуопределением.

Примечание

Иногда, 'active-set' алгоритм останавливается с флагом выхода 0 когда проблема, по сути, безгранична. Установка более высокого предела итерации также приводит к появлению флага выхода 0.

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

iterations

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

algorithm

Используемый алгоритм оптимизации

cgiterations

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

constrviolation

Максимум функций ограничения

firstorderopt

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

linearsolver

Тип внутреннего линейного решателя, 'dense' или 'sparse' ('interior-point-convex' только алгоритм)

message

Выйти из сообщения

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

lower

Нижние границы lb

upper

Верхние границы ub

ineqlin

Линейные неравенства

eqlin

Линейные равенства

Дополнительные сведения см. в разделе Структуры множителей Лагранжа.

Алгоритмы

свернуть все

'interior-point-convex'

'interior-point-convex' алгоритм пытается следовать по пути, который находится строго внутри ограничений. Он использует модуль предварительного решения для устранения избыточности и упрощения задачи путем решения простых компонентов.

Алгоритм имеет различные реализации для разреженной гессенской матрицы H и для плотной матрицы. Обычно разреженная реализация происходит быстрее при больших, разреженных проблемах, а плотная реализация - быстрее при плотных или малых проблемах. Дополнительные сведения см. в разделе Алгоритм квадропрога внутренней точки и выпуклости.

'trust-region-reflective'

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

'active-set'

'active-set' алгоритм является проекционным методом, аналогичным описанному в [2]. Алгоритм не масштабен; см. Крупномасштабные и среднемасштабные алгоритмы. Дополнительные сведения см. в разделе Алгоритм квадрограммы активного набора.

Теплый старт

Объект теплого начала сохраняет список активных ограничений из предыдущей решенной задачи. Решатель переносит как можно больше информации об активных ограничениях для решения текущей задачи. Если предыдущая проблема слишком отличается от текущей, информация об активном наборе не используется повторно. В этом случае решатель эффективно выполняет холодный запуск, чтобы перестроить список активных ограничений.

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

Приложение

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

Ссылки

[1] Коулман, T. F. и И. Ли. «Метод отражения Ньютона для минимизации квадратичной функции, зависящей от границ некоторых переменных». Журнал SIAM по оптимизации. Том 6, номер 4, 1996, стр. 1040-1058.

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

[3] Гулд, Н. и П. Л. Тоунт. «Предварительная обработка для квадратичного программирования». Математическое программирование. Серия B, том 100, 2004, стр. 95-132.

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

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