quadprog

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

Описание

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

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

minx12xTHx+fTx таким , что {Axb,Aeqx=beq,lbxub.

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+x22-x1+2x222x1+x23.

В 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],

удовлетворяющее ограничениям

0x1, 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

при условии, что

0x1,

где

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

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

A*x <= b,

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

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

<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2  10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2  20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2  30,

введите следующие ограничения:

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

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

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

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

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

A*x <= b,

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

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

<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2  10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2  20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2  30.

Задайте неравенства, введя следующие ограничения.

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

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

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

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

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

Aeq*x = beq,

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

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

<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 3 = 20,

введите следующие ограничения:

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

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

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

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

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

Aeq*x = beq,

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

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

<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 3 = 20.

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

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

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

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

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

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

Если numel(lb) < numel(x0), затем lb определяет, что

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

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

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

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

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

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

Если numel(ub) < numel(x0), затем ub определяет, что

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

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

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

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

Начальная точка, заданная как вектор действительных чисел. Длина 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'

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

Диагностика

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

Display

Level of display (см. Итеративное отображение):

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

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

The '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.

Пример, который использует эту опцию, см. в разделе Квадратичная минимизация с плотным структурированным Гессианом.

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

MaxPCGIter

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

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

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

TypicalX

Типичные x значения. Количество элементов в TypicalX равен количеству элементов в x0, а начальная точка. Значение по умолчанию ones(numberOfVariables,1). quadprog использует TypicalX внутренне для масштабирования. TypicalX имеет эффект только тогда, когда x имеет неограниченные компоненты, и когда a 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 stop, возвращается как целое число, описанное в этой таблице.

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

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 в нулевое пространство 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

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

Для получения дополнительной информации смотрите Множитель Лагранжа Structures.

Алгоритмы

свернуть все

'interior-point-convex'

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

Алгоритм имеет различные реализации для разреженной Гессианской матрицы H и для плотной матрицы. Как правило, разреженная реализация происходит быстрее при больших, разреженных задачах, а плотная реализация быстрее при плотных или небольших задачах. Для получения дополнительной информации см. Interior-point-condex quadprog Algorithm.

'trust-region-reflective'

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

'active-set'

The 'active-set' алгоритм является проекционным методом, подобным описанному в [2]. Алгоритм не является масштабным; см. «Алгоритмы большого и среднего масштаба». Для получения дополнительной информации смотрите активный набор quadprog Algorithm.

Теплый старт

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

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

Приложение

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

Ссылки

[1] Коулман, Т. Ф. и Я. Ли. Отражающий метод Ньютона для минимизации квадратичной функции, удовлетворяющей границам некоторых переменных. SIAM Journal по оптимизации. Том 6, № 4, 1996, стр. 1040-1058.

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

[3] Gould, N., and P. L. Toint. Предварительная обработка для квадратичного программирования. Математическое программирование. Серия B, том 100, 2004, стр. 95-132.

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

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