mpcqpsolver

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

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

Описание

пример

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

J=12xHx+fx

удовлетворяющее ограничениям неравенства Axb, и ограничения равенства 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);

Найдем нижне-треугольное Холецкое разложение 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);

Найдем нижне-треугольное Холецкое разложение 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 -by - n матрица, которая должна быть симметричной и положительно определенной. Если p = 0, то H положительно определено.

Примечание

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

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

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

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

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

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

Линейные коэффициенты ограничения равенства, заданные как q -by - 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Задача представляется недопустимой, то есть ограничением Axb не может быть удовлетворен.
-2Произошла неустранимая числовая ошибка.

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

Использование iA чтобы тепло начать последующее mpcqpsolver решение.

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

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

Совет

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

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

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

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

Алгоритмы

mpcqpsolver решает задачу QP с помощью метода active-set, алгоритма KWIK, основанного на [1]. Для получения дополнительной информации см. Раздел «Решатели QP».

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

расширить все

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

Ссылки

[1] Schmid, C. and L.T. Biegler. «Quadratic Programming Methods for Reduced Hessian SQP». Компьютеры и химическая техника 18, № 9 (сентябрь 1994): 817-32. https://doi.org/10.1016/0098-1354 (94) E0001-4.

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

.
Введенный в R2015b