mpcqpsolver

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

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

Описание

пример

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

J=12xHx+fx

подвергните ограничениям неравенства Axb, и ограничения равенства Aeqx=beqСостояние указывает на валидность 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 команда.

Множитель линейного члена целевой функции в виде вектор-столбца длины 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 th активное ограничение неравенства. Используйте дополнительный выходной аргумент 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 th неравенство активен для решения 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 с помощью активного метода установки, алгоритма KWIK, на основе [1]. Для получения дополнительной информации см. Решатели QP.

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

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

Предупреждает запуск в R2020a

Ссылки

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

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

Введенный в R2015b