Квадратичное программирование
Решатель для квадратичных целевых функций с линейными ограничениями.
quadprog находит минимум для проблемы заданным
H, A и Aeq являются матрицами, и f, b, beq, lb, ub, и x является векторами.
Можно передать f, lb и ub как векторы или матрицы; смотрите Матричные аргументы.
Примечание
quadprog
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите, Сначала Выбирают Problem-Based or Solver-Based Approach.
решает предыдущую задачу, удовлетворяющую дополнительным ограничениям 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(problem
)problem
, структура описана в problem
. Создайте problem
структура с помощью записи через точку или struct
функция. В качестве альтернативы создайте problem
структура от OptimizationProblem
объект при помощи prob2struct
.
[
запускается wsout
,fval
,exitflag
,output
,lambda
]
= quadprog(H
,f
,A
,b
,Aeq
,beq
,lb
,ub
,ws
)quadprog
из данных в объекте ws
горячего запуска, использование опций в
ws
. Возвращенный аргумент wsout
содержит точку решения в wsout.X
. При помощи wsout
как начальный горячий запуск возражают в последующем вызове решателя, quadprog
может работать быстрее.
Найдите минимум
удовлетворяющее ограничениям
В quadprog
синтаксис, эта проблема состоит в том, чтобы минимизировать
,
где
подвергните линейным ограничениям.
Чтобы решить эту задачу, сначала введите содействующие матрицы.
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
Найдите минимум
подвергните ограничению
В quadprog
синтаксис, эта проблема состоит в том, чтобы минимизировать
,
где
подвергните линейному ограничению.
Чтобы решить эту задачу, сначала введите содействующие матрицы.
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, который минимизирует квадратичное выражение
где
, ,
удовлетворяющее ограничениям
, .
Чтобы решить эту задачу, сначала введите коэффициенты.
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
prob2struct
Создайте 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
quadprog
Значение целевой функцииРешите квадратичную программу и возвратите и решение и значение целевой функции.
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
Процесс оптимизацииВидеть процесс оптимизации для quadprog
, установите опции показывать итеративное отображение и возвращать четыре выходных параметра. Проблема состоит в том, чтобы минимизировать
при ограничениях
,
где
, .
Введите проблемные коэффициенты.
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: []
quadprog
Множители ЛагранжаРешите задачу квадратичного программирования и возвратите множители Лагранжа.
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
— Квадратичный объективный терминКвадратичный объективный термин в виде симметричной действительной матрицы. H
представляет квадратичное в выражении 1/2*x'*H*x + f'*x
. Если H
не симметрично, quadprog
выдает предупреждение и использует симметрированную версию (H + H')/2
вместо этого.
Если квадратичный матричный H
разреженно, затем по умолчанию, 'interior-point-convex'
алгоритм использует немного отличающийся алгоритм чем тогда, когда H
является плотным. Обычно разреженный алгоритм быстрее на больших, разреженных проблемах, и плотный алгоритм быстрее на плотных или небольших проблемах. Для получения дополнительной информации смотрите LinearSolver
описание опции и выпуклый внутренней точкой quadprog Алгоритм.
Пример: [2,1;1,3]
Типы данных: double
f
— Линейный объективный терминЛинейный объективный термин в виде вектора действительных чисел. f
представляет линейный член в выражении 1/2*x'*H*x + f'*x
.
Пример: [1;3;2]
Типы данных: double
A
— Линейные ограничения неравенстваЛинейные ограничения неравенства в виде действительной матрицы. 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
— Линейные ограничения неравенстваЛинейные ограничения неравенства в виде вектора действительных чисел. 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
— Линейные ограничения равенстваЛинейные ограничения равенства в виде действительной матрицы. 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
— Линейные ограничения равенстваЛинейные ограничения равенства в виде вектора действительных чисел. 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
lb
— Нижние границыНижние границы в виде вектора действительных чисел или действительного массива. Если число элементов в 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
ub
— Верхние границыВерхние границы в виде вектора действительных чисел или действительного массива. Если число элементов в 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
— Начальная точкаНачальная точка в виде вектора действительных чисел. Длина 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
options
— Опции оптимизацииoptimoptions
| структура, такая как optimset
возвращаетсяОпции оптимизации в виде выхода optimoptions
или структура такой как optimset
возвращается.
Некоторые опции отсутствуют в optimoptions
отображение. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.
Все алгоритмы
Algorithm | Выберите алгоритм:
|
Диагностика | Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбором является |
Display | Level of display (см. Итеративное Отображение):
|
MaxIterations | Максимальное количество итераций позволено; положительное целое число.
Для |
OptimalityTolerance | Допуск завершения на оптимальности первого порядка; положительная скалярная величина.
Смотрите допуски и критерий остановки. Для |
StepTolerance | Допуск завершения на
Для |
'trust-region-reflective'
Алгоритм только
FunctionTolerance | Допуск завершения на значении функции; положительная скалярная величина. Значение по умолчанию зависит от проблемного типа: связано ограниченные проблемы используют Для |
| Функция умножения Гессиана в виде указателя на функцию. Для крупномасштабных структурированных проблем эта функция вычисляет матричное произведение Гессиана W = hmfun(Hinfo,Y) где Смотрите Квадратичную Минимизацию с Плотным, Структурированным Гессианом для примера, который использует эту опцию. Для |
MaxPCGIter | Максимальное количество PCG (предобусловленный метод сопряженных градиентов) итерации; положительная скалярная величина. Значением по умолчанию является |
PrecondBandWidth | Верхняя пропускная способность предварительного формирователя для PCG; неотрицательное целое число. По умолчанию, |
SubproblemAlgorithm | Определяет, как шаг итерации вычисляется. Значение по умолчанию, |
TolPCG | Допуск завершения на итерации PCG; положительная скалярная величина. Значением по умолчанию является |
TypicalX | Типичный |
'interior-point-convex'
Алгоритм только
ConstraintTolerance | Допуск на нарушении ограничений; положительная скалярная величина. Значением по умолчанию является Для |
LinearSolver | Тип внутреннего линейного решателя в алгоритме:
|
'active-set'
Алгоритм только
ConstraintTolerance | Допуск на нарушении ограничений; положительная скалярная величина. Значением по умолчанию является Для |
ObjectiveLimit | Допуск (останавливающий критерий), который является скаляром. Если значение целевой функции понижается |
problem
— Структура задачиСтруктура задачи в виде структуры с этими полями:
| Симметрическая матрица в 1/2*x'*H*x |
| Вектор в линейном члене f'*x |
| Матрица в линейных ограничениях неравенства Aineq*x ≤ bineq |
| Вектор в линейных ограничениях неравенства Aineq*x ≤ bineq |
| Матрица в линейных ограничениях равенства Aeq*x = beq |
| Вектор в линейных ограничениях равенства Aeq*x = beq |
lb | Вектор из нижних границ |
ub | Вектор из верхних границ |
| Начальная точка для x |
| 'quadprog' |
| Опции создали использование optimoptions или optimset |
Обязательными полями является H
F
, solver
, и options
. При решении, quadprog
игнорирует любые поля в problem
кроме перечисленных.
Примечание
Вы не можете использовать горячий запуск с problem
аргумент.
Типы данных: struct
ws
— Объект горячего запускаoptimwarmstart
Объект горячего запуска в виде объекта, созданного с помощью optimwarmstart
. Объект горячего запуска содержит стартовую точку и опции и дополнительные данные для емкости памяти в генерации кода. Смотрите Лучшые практики Горячего запуска.
Пример: ws = optimwarmstart(x0,options)
x
РешениеРешение, возвращенное как вектор действительных чисел. x
вектор, который минимизирует 1/2*x'*H*x + f'*x
подвергните всем границам и линейным ограничениям. x
может быть локальный минимум для невыпуклых проблем. Для выпуклых проблем, x
глобальный минимум. Для получения дополнительной информации смотрите Локальный по сравнению с Глобальными оптимумами.
wsout
— Объект горячего запуска решенияQuadprogWarmStart
объектОбъект горячего запуска решения, возвращенный как QuadprogWarmStart
объект. Точкой решения является wsout.X
.
Можно использовать wsout
как входной горячий запуск возражают в последующем quadprog
вызвать.
fval
— Значение целевой функции в решенииЗначение целевой функции в решении, возвращенном как действительный скаляр. fval
значение 1/2*x'*H*x + f'*x
в решении x
.
exitflag
— Обоснуйте quadprog
остановленныйОбоснуйте quadprog
остановленный, возвращенный как целое число, описанное в этой таблице.
Все алгоритмы | |
1 | Функция сходилась к решению |
0 | Количество итераций превысило |
-2 | Проблема неосуществима. Или, для |
-3 | Проблема неограниченна. |
| |
2 | Размер шага был меньшим, чем |
-6 | Невыпуклая проблема обнаруживается. |
-8 | Не мог вычислить направление шага. |
| |
4 | Локальный минимум найден; минимум не уникален. |
3 | Изменение в значении целевой функции было меньшим, чем |
-4 | Текущее поисковое направление не было направлением спуска. Никакие дальнейшие успехи не могли быть сделаны. |
| |
-6 | Невыпуклая проблема обнаруживается; проекция |
Примечание
Иногда, 'active-set'
алгоритм останавливается с выходным флагом 0
когда проблема, на самом деле, неограниченна. Установление более высокого предела итерации также приводит к выходному флагу 0
.
output
— Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенном как структура с этими полями:
| Количество проделанных итераций |
| Алгоритм оптимизации используется |
| Общее количество итераций PCG ( |
constrviolation | Максимум ограничительных функций |
firstorderopt | Мера оптимальности первого порядка |
linearsolver | Тип внутреннего линейного решателя, |
message | Выходное сообщение |
lambda
— Множители Лагранжа в решенииМножители Лагранжа в решении, возвращенном как структура с этими полями:
| Нижние границы |
| Верхние границы |
| Линейные неравенства |
| Линейные равенства |
Для получения дополнительной информации смотрите Структуры множителя Лагранжа.
'interior-point-convex'
'interior-point-convex'
алгоритм пытается следовать за путем, который является строго в ограничениях. Это использует предварительно решить модуль, чтобы удалить сокращение и упростить проблему путем решения для компонентов, которые являются прямыми.
Алгоритм имеет различные реализации для разреженной матрицы Гессиана H
и для плотной матрицы. Обычно разреженная реализация быстрее на больших, разреженных проблемах, и плотная реализация быстрее на плотных или небольших проблемах. Для получения дополнительной информации см. выпуклый внутренней точкой quadprog Алгоритм.
'trust-region-reflective'
'trust-region-reflective'
алгоритм является методом доверительной области подпространства на основе внутреннего отражающего метода Ньютона, описанного в [1]. Каждая итерация включает приближенное решение большой линейной системы с помощью метода предобусловленных методов сопряженных градиентов (PCG). Для получения дополнительной информации см. "доверительную область, отражающую" quadprog Алгоритм.
'active-set'
'active-set'
алгоритм является методом проекции, похожим на тот, описанный в [2]. Алгоритм не является крупномасштабным; смотрите Крупномасштабный по сравнению с Алгоритмами Средней шкалы. Для получения дополнительной информации смотрите активный набор quadprog Алгоритм.
Объект горячего запуска ведет список активных ограничений от предыдущей решенной задачи. Решатель переносит как можно больше активной информации об ограничении, чтобы решить текущую задачу. Если предыдущая проблема слишком отличается от текущей, никакая активная информация о наборе не снова используется. В этом случае решатель эффективно выполняет холодный запуск для того, чтобы восстановить список активных ограничений.
Оптимизировать задача Live Editor обеспечивает визуальный интерфейс для quadprog
.
[1] Коулман, T. F. и И. Ли. “Отражающий Метод Ньютона для Минимизации Квадратичной Функции Согласно Границам на Некоторых Переменных”. SIAM Journal на Оптимизации. Издание 6, Номер 4, 1996, стр 1040–1058.
[2] Жабры, P. E. В. Мюррей и М. Х. Райт. Практическая оптимизация. Лондон: Academic Press, 1981.
[3] Гулд, N. и П. Л. Тойнт. “Предварительно обрабатывая для квадратичного программирования”. Математическое программирование. Серии B, Издание 100, 2004, стр 95–132.
Указания и ограничения по применению:
quadprog
генерация кода поддержек, использующая любого codegen
(MATLAB Coder) функция или приложение MATLAB® Coder™. У вас должна быть лицензия MATLAB Coder, чтобы сгенерировать код.
Целевой компьютер должен поддержать стандартные расчеты с плавающей точкой с двойной точностью. Вы не можете сгенерировать код для расчетов или фиксированной точки с одинарной точностью.
Цели генерации кода не пользуются теми же математическими библиотеками ядра как решатели MATLAB. Поэтому решения генерации кода могут варьироваться из решений для решателя, особенно для плохо обусловленных проблем.
quadprog
не поддерживает problem
аргумент для генерации кода.
[x,fval] = quadprog(problem) % Not supported
Все quadprog
введите матрицы, такие как A
, Aeq
, lb
, и ub
должно быть полным, не разреженным. Можно преобразовать разреженные матрицы в полный при помощи full
функция.
lb
и ub
аргументы должны иметь то же количество записей как количество столбцов в H
или должен быть пустой []
.
Для усовершенствованной оптимизации кода, включающей встраиваемые процессоры, вам также нужна лицензия Embedded Coder®.
Необходимо включать опции для quadprog
и задайте их использование optimoptions
. Опции должны включать Algorithm
опция, набор к 'active-set'
.
options = optimoptions('quadprog','Algorithm','active-set'); [x,fval,exitflag] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options);
Генерация кода поддерживает эти опции:
Algorithm
— Должен быть 'active-set'
ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
Сгенерированный код ограничил проверку ошибок на опции. Рекомендуемый способ обновить опцию состоит в том, чтобы использовать optimoptions
, не запись через точку.
opts = optimoptions('quadprog','Algorithm','active-set'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Не загружайте опции из файла. Выполнение так может заставить генерацию кода перестать работать. Вместо этого создайте опции в своем коде.
Если вы задаете опцию, которая не поддерживается, опция обычно игнорируется во время генерации кода. Для надежных результатов задайте только поддерживаемые опции.
Для примера смотрите, Генерируют Код для quadprog.
linprog
| lsqlin
| Оптимизировать | optimoptions
| optimwarmstart
| prob2struct
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.