Квадратичное программирование
Решатель для квадратичных целевых функций с линейными ограничениями.
quadprog находит минимум для задачи, заданной
H, A, и Aeq являются матрицами и f, b, beq, lb, ub, и x векторы.
Можно передать f, lb и ub как векторы или матрицы; см. Матричные аргументы.
Примечание
quadprog
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите Первый выбор Основанного на проблеме или Основанный на решателе подход.
решает предыдущую задачу с учетом дополнительных ограничений 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
описание опции и алгоритм интерьерно-точечно-выпуклого квадпрога.
Пример: [2,1;1,3]
Типы данных: double
f
- Линейный целевой терминЛинейный целевой термин, заданный как вектор действительных чисел. f
представляет линейный термин в выражении 1/2*x'*H*x + f'*x
.
Пример: [1;3;2]
Типы данных: double
A
- Линейные ограничения неравенстваЛинейные ограничения неравенства, заданные как действительная матрица. 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
- Линейные ограничения неравенстваЛинейные ограничения неравенства, заданные как вектор действительных чисел. 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
- Линейные ограничения равенстваЛинейные ограничения равенства, заданные как действительная матрица. 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
- Линейные ограничения равенстваЛинейные ограничения равенства, заданные как вектор действительных чисел. 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
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 | Выберите алгоритм:
The |
Диагностика | Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбор следующий |
Display | Level of display (см. Итеративное отображение):
The
|
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
stop, возвращается как целое число, описанное в этой таблице.
Все алгоритмы | |
| Функция сходится к решению |
| Превышено количество итераций |
| Проблема недопустима. Или, для |
| Задача неограниченна. |
| |
| Размер шага был меньше |
| Обнаружена неконвексная проблема. |
| Не удается вычислить направление шага. |
| |
| Локальный минимум найден; минимум не является уникальным. |
| Изменение значения целевой функции было меньше |
| Текущее направление поиска не было направлением спуска. Дальнейшего прогресса достичь не удалось. |
| |
| Обнаружена неконвексная проблема; проекция |
Примечание
Иногда, 'active-set'
алгоритм останавливается с выходным флагом 0
когда проблема, по сути, неограниченна. Установка более высокого предела итерации также приводит к выходному флагу 0
.
output
- Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенная как структура с этими полями:
| Количество проделанных итераций |
| Используемый алгоритм оптимизации |
| Общее количество итераций PCG ( |
constrviolation | Максимум ограничительных функций |
firstorderopt | Мера оптимальности первого порядка |
linearsolver | Тип внутреннего линейного решателя, |
message | Выходное сообщение |
lambda
- множители Лагранжа в решенииМножители Лагранжа в решении, возвращенные как структура с этими полями:
| Нижние границы |
| Верхние границы |
| Линейное неравенство |
| Линейные равенства |
Для получения дополнительной информации смотрите Множитель Лагранжа 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.
Указания и ограничения по применению:
quadprog
поддерживает генерацию кода, используя codegen
(MATLAB Coder) или MATLAB® Coder™ приложения. Для генерации кода необходимо иметь лицензию MATLAB Coder.
Целевой компьютер должно поддерживать стандартные расчеты с плавающей точностью. Вы не можете сгенерировать код для расчетов с одной точностью или с фиксированной точкой.
Цели генерации кода не используют те же библиотеки математических ядер, что и решатели MATLAB. Поэтому решения генерации кода могут варьироваться от решений решателя, особенно для плохо обусловленных задач.
quadprog
не поддерживает problem
аргумент для генерации кода.
[x,fval] = quadprog(problem) % Not supported
Все quadprog
входные матрицы, такие как A
, Aeq
, lb
, и ub
должно быть полным, а не разреженным. Вы можете преобразовать разреженные матрицы в полные с помощью full
функция.
The 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.