Квадратичное программирование
Решатель для квадратичных объективных функций с линейными ограничениями.
quadprog находит минимум для задачи, указанной
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,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 может работать быстрее.
Найти минимум
x22-x1x2-2x1-6x2
с учетом ограничений
В quadprog синтаксис, эта проблема заключается в минимизации
+ fTx,
где
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
Найти минимум
x22-x1x2-2x1-6x2
с учетом ограничения
В quadprog синтаксис, эта проблема заключается в минимизации
+ fTx,
где
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, который минимизирует квадратичное выражение
fTx
где
1-11-12-21-24]2-31],
с учетом ограничений
, .
Чтобы решить эту проблему, сначала введите коэффициенты.
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, задайте параметры для отображения итеративного дисплея и возврата четырех выходов. Проблема заключается в минимизации
fTx
подлежит
,
где
21-11312-1125]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: []
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);
tocMinimum 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около-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 - Линейные ограничения неравенстваЛинейные ограничения неравенства, заданные как действительный вектор. 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 - Линейные ограничения равенстваЛинейные ограничения равенства, заданные как вещественная матрица. 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 - Линейные ограничения равенстваЛинейные ограничения равенства, заданные как действительный вектор. 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
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 | Уровень отображения (см. Итерационный просмотр):
|
MaxIterations | Максимально допустимое число итераций; положительное целое число.
Для |
OptimalityTolerance | Допуск окончания на оптимальность первого порядка; положительный скаляр.
См. раздел Допуски и критерии остановки. Для |
StepTolerance | Допуск окончания на
Для |
'trust-region-reflective' Только алгоритм
FunctionTolerance | Допуск окончания для значения функции; положительный скаляр. Значение по умолчанию зависит от типа проблемы: использование связанных проблем Для |
| Функция умножения Гессена, заданная как дескриптор функции. Для крупномасштабных структурированных задач эта функция вычисляет матричное изделие Гессена W = hmfun(Hinfo,Y) где Пример использования этой опции см. в разделе Quadratic Minimization with Dense, Structured Hessian. Для |
| 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 stopped, возвращается как целое число, описанное в этой таблице.
Все алгоритмы | |
| Функция, сходящаяся к решению |
| Превышено число итераций |
| Проблема неосуществима. Или, для |
| Проблема безгранична. |
| |
| Размер шага был меньше |
| Обнаружена неконвексная проблема. |
| Не удалось вычислить направление шага. |
| |
| Найден локальный минимум; минимум не уникален. |
| Изменение значения целевой функции было меньше |
| Текущее направление поиска не было направлением спуска. Дальнейшего прогресса достичь не удалось. |
| |
| Обнаружена неконвексная проблема; проекция |
Примечание
Иногда, 'active-set' алгоритм останавливается с флагом выхода 0 когда проблема, по сути, безгранична. Установка более высокого предела итерации также приводит к появлению флага выхода 0.
output - Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенная в виде структуры со следующими полями:
| Количество выполненных итераций |
| Используемый алгоритм оптимизации |
| Общее количество итераций PCG ( |
constrviolation | Максимум функций ограничения |
firstorderopt | Мера оптимальности первого порядка |
linearsolver | Тип внутреннего линейного решателя, |
message | Выйти из сообщения |
lambda - Множители лагранжа в решенииМножители лагранжа в решении, возвращаемые как структура со следующими полями:
| Нижние границы |
| Верхние границы |
| Линейные неравенства |
| Линейные равенства |
Дополнительные сведения см. в разделе Структуры множителей Лагранжа.
'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.
Примечания и ограничения по использованию:
quadprog поддерживает генерацию кода с помощью codegen (MATLAB Coder) или MATLAB ® Coder™ app. Для создания кода необходимо иметь лицензию 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
Не загружать параметры из файла. Это может привести к сбою при создании кода. Вместо этого создайте параметры в коде.
Если указать неподдерживаемый параметр, он обычно игнорируется при создании кода. Для получения надежных результатов укажите только поддерживаемые параметры.
Пример см. в разделе Создание кода для квадрограммы.
linprog | lsqlin | Оптимизировать | optimoptions | optimwarmstart | prob2struct
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.