exponenta event banner

mpcqpsolver

(Подлежит удалению) Решите проблему квадратичного программирования с помощью алгоритма KWIK

mpcqpsolver будет удален в следующем выпуске. Использовать mpcActiveSetSolver вместо этого. Дополнительные сведения см. в разделе Вопросы совместимости.

Описание

пример

[x,status] = mpcqpsolver(Linv,f,A,b,Aeq,beq,iA0,options) находит оптимальное решение, x, к проблеме квадратичного программирования путем минимизации целевой функции:

J=12x⊺Hx+f⊺x

с учетом ограничений неравенства Ax≥b и ограничений равенства Aeqx = beq .status указывает на действительность x.

пример

[x,status,iA,lambda] = mpcqpsolver(Linv,f,A,b,Aeq,beq,iA0,options) также возвращает активное неравенство, iA, в решении, и множители Лагранжа, lambda, для решения.

Примеры

свернуть все

Найти значения x, которые минимизируют

f (x) = 0. 5 x 1 2 + x 2 2 - x 1 x 2 - 2 x 1 - 6 x 2,

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

x 1 ≥ 0 x 2 ≥ 0 x 1 + x 2 ≤ 2 - x 1 + 2 x 2 ≤ 2 2 x 1 + x 2 ≤ 3.

Задайте вектор Гессена и линейный множитель для целевой функции.

H = [1 -1; -1 2];
f = [-2; -6];

Задайте параметры ограничения неравенства.

A = [1 0; 0 1; -1 -1; 1 -2; -2 -1];
b = [0; 0; -2; -2; -3];

Определить Aeq и beq для указания на отсутствие ограничений на равенство.

Aeq = [];
beq = zeros(0,1);

Найти нижнетреугольной Cholesky разложения H.

[L,p] = chol(H,'lower');
Linv = inv(L);

Рекомендуется проверить, что H является положительным определенным путем проверки p = 0.

p
p = 0

Создание набора опций по умолчанию для mpcActiveSetSolver.

opt = mpcqpsolverOptions;

Для холодного запуска решателя определите все ограничения неравенства как неактивные.

iA0 = false(size(b));

Решите проблему QP.

[x,status] = mpcqpsolver(Linv,f,A,b,Aeq,beq,iA0,opt);

Осмотрите решение, x.

x
x = 2×1

    0.6667
    1.3333

Найти значения x, которые минимизируют

f (x) = 3 x 1 2 + 0. 5 x 2 2 - 2 x 1 x 2 - 3 x 1 + 4 x 2,

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

x 1 ≥ 0 x 1 + x 2 ≤ 5 x 1 + 2 x 2 ≤ 7.

Задайте вектор Гессена и линейный множитель для целевой функции.

H = [6 -2; -2 1];
f = [-3; 4];

Задайте параметры ограничения неравенства.

A = [1 0; -1 -1; -1 -2];
b = [0; -5; -7];

Определить Aeq и beq для указания на отсутствие ограничений на равенство.

Aeq = [];
beq = zeros(0,1);

Найти нижнетреугольной Cholesky разложения H.

[L,p] = chol(H,'lower');
Linv = inv(L);

Убедитесь, что H является положительным определенным путем проверки p = 0.

p
p = 0

Создание набора опций по умолчанию для mpcqpsolver.

opt = mpcqpsolverOptions;

Для холодного запуска решателя определите все ограничения неравенства как неактивные.

iA0 = false(size(b));

Решите проблему QP.

[x,status,iA,lambda] = mpcqpsolver(Linv,f,A,b,Aeq,beq,iA0,opt);

Проверьте активные ограничения неравенства. Активным ограничением неравенства является равенство для оптимального решения.

iA
iA = 3x1 logical array

   1
   0
   0

Существует одно активное ограничение неравенства.

Просмотрите множитель Лагранжа для этого ограничения.

lambda.ineqlin(1)
ans = 5.0000

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

свернуть все

Обратное нижнетреугольное разложение Холеского гессенской матрицы, указанное как матрица n-by-n, где n > 0 - число оптимизационных переменных. Для данной матрицы Гессена H, Linv можно вычислить следующим образом:

[L,p] = chol(H,'lower');
Linv = inv(L);

H - матрица n-на-n, которая должна быть симметричной и положительной определённой. Если p = 0, то Н является положительным определенным.

Примечание

Алгоритм KWIK требует вычисления Linv вместо использования H непосредственно, как в quadprog(Панель инструментов оптимизации).

Множитель линейного члена целевой функции, определяемый как вектор столбца длиной n.

Коэффициенты ограничения линейного неравенства, заданные как матрица m-на-n, где m - число ограничений неравенства.

Если у вашей проблемы нет ограничений неравенства, используйте [].

Правая сторона ограничений неравенства, заданная как вектор столбца длиной m.

Если у вашей проблемы нет ограничений неравенства, используйте zeros(0,1).

Коэффициенты ограничения линейного равенства, заданные как матрица q-на-n, где q - число ограничений равенства, и q < = nОграничения равенства должны быть линейно независимы отrank(Aeq) = q.

Если проблема не имеет ограничений равенства, используйте [].

Правая сторона ограничений равенства, заданная как вектор столбца длиной q.

Если проблема не имеет ограничений равенства, используйте zeros(0,1).

Начальные активные неравенства, где одинаковая часть неравенства истинна, определяются как логический вектор длины m в соответствии со следующим:

  • Если у вашей проблемы нет ограничений неравенства, используйте false(0,1).

  • Для холодного запуска, false(m,1).

  • Для теплого старта установите iA0(i) == true для запуска алгоритма с активным ограничением i-го неравенства. Использовать необязательный выходной аргумент iA из предыдущего решения для указания iA0 таким образом. Если оба iA0(i) и iA0(j) являются true, затем строки i и j из A должен быть линейно независимым. В противном случае решение может потерпеть неудачу status = -2.

Набор опций для mpcqpsolver, задается как структура, созданная с помощью mpcqpsolverOptions.

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

свернуть все

Оптимальное решение проблемы QP, возвращаемое в виде вектора столбца длиной n. mpcqpsolver всегда возвращает значение для x. Чтобы определить, является ли решение оптимальным или выполнимым, проверьте решение. status.

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

СтоимостьОписание
> 0x оптимален. status представляет количество итераций, выполненных во время оптимизации.
0Достигнуто максимальное число итераций. Решение, x, может быть неоптимальным или неосуществимым.
-1Проблема кажется неосуществимой, то есть Ax≥b ограничения не может быть удовлетворена.
-2Неустранимая числовая ошибка.

Активные неравенства, где одинаковая часть неравенства верна, возвращаются как логический вектор длины м. Если iA(i) == true, то i-е неравенство активно для решения x.

Использовать iA для теплого запуска последующего mpcqpsolver решение.

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

ОбластьОписание
ineqlinМножители ограничений неравенства, возвращаемые в виде вектора длины n. Когда решение является оптимальным, элементы ineqlin являются неотрицательными.
eqlinМножители ограничений равенства, возвращаемые как вектор длины q. В оптимальном решении нет никаких ограничений по знакам.

Совет

  • Алгоритм KWIK требует, чтобы матрица Гессена, H, была положительной определенной. При расчете Linv, использовать:

    [L, p] = chol(H,'lower');

    Если p = 0, то Н является положительным определенным. В противном случае p является положительным целым числом.

  • mpcqpsolver предоставляет доступ к решателю QP, используемому программным обеспечением Model Predictive Control Toolbox™. Эта команда используется для решения проблем QP в собственных пользовательских приложениях MPC.

Алгоритмы

mpcqpsolver решает задачу QP с помощью метода активного набора, алгоритма KWIK, основанного на [1]. Дополнительные сведения см. в разделе Решатели QP.

Вопросы совместимости

развернуть все

Предупреждает, начиная с R2020a

Ссылки

[1] Шмид, К. и Л. Т. Биглер. «Квадратичные методы программирования для уменьшенного гессенского SQP». Computers & Chemical Engineering 18, No 9 (сентябрь 1994 года): 817-32. https://doi.org/10.1016/0098-1354 (94) E0001-4.

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

.
Представлен в R2015b