exponenta event banner

mpcActiveSetSolver

Решение проблемы квадратичного программирования с помощью алгоритма active-set

Описание

Используя mpcActiveSetSolver, можно решить задачу квадратичного программирования (QP) с помощью алгоритма активного набора. Эта функция обеспечивает доступ к встроенному решателю QP «Управление предсказанием модели» (Model Predictive Control Toolbox™ active-set QP).

Использование решателя в активном наборе может обеспечить быструю и надежную производительность для задач оптимизации малого и среднего масштаба как с двойной, так и с одной точностью.

Этот решатель полезен для:

  • Расширенные приложения MPC, выходящие за рамки программного обеспечения Model Predictive Control Toolbox.

  • Пользовательские приложения QP, включая приложения, требующие создания кода.

Кроме того, можно получить доступ к встроенному решателю QP внутренней точки с помощью mpcInteriorPointSolver.

пример

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

J=12x⊺Hx+f⊺x

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

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

Примеры

свернуть все

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

f (x) = 0 .5x12 + x22-x1x2-2x1-6x2,

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

x1≥0x2≥0x1+x2≤2-x1+2x2≤22x1+x2≤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 для указания на отсутствие ограничений на равенство.

n = length(f);
Aeq = zeros(0,n);
beq = zeros(0,1);

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

opt = mpcActiveSetOptions;

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

iA0 = false(size(b));

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

[x,exitflag] = mpcActiveSetSolver(H,f,A,b,Aeq,beq,iA0,opt);

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

x
x = 2×1

    0.6667
    1.3333

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

[x,exitflag,iA,lambda] = mpcActiveSetSolver(H,f,A,b,Aeq,beq,iA0,opt);

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

iA
iA = 5x1 logical array

   0
   0
   1
   1
   0

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

lambda.ineqlin(1)
ans = 0

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

свернуть все

Гессенская матрица, заданная как симметричная матрица n-by-n, где n > 0 - число переменных оптимизации.

Алгоритм QP активного набора требует, чтобы матрица Гессена была положительной определенной. Чтобы определить, H является положительным определенным, используйте chol функция.

[~,p] = chol(H);

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

Алгоритм QP активного набора вычисляет низкотреугольное разложение Холеского (Linv) гессенской матрицы. Если приложение требует повторяющихся вызовов mpcInteriorPointSolver используя постоянную матрицу Гессена, можно повысить вычислительную эффективность за счет вычислений Linv один раз и передача его в mpcActiveSetSolver вместо гессенской матрицы. Для этого необходимо установить UseHessianAsInput поле options кому false.

options = mpcActiveSetOptions;
options.UseHessianAsInput = false;

Вычислить Linv, используйте следующий код.

[L,p] = chol(H,'lower');
Linv = linsolve(L,eye(size(L)),struct('LT',true));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

СтоимостьОписание
> 0x оптимален. В этом случае exitflag представляет количество итераций, выполненных во время оптимизации.
0

Достигнуто максимальное число итераций. Решение x может быть неоптимальным или неосуществимым.

Чтобы определить, x невозможно, проверьте, нарушает ли решение допуск ограничения, указанный в options.

feasible = (A*x-b) <= options.ConstraintTolerance;

Если какой-либо элемент feasible является false, то x неосуществим.

-1Проблема кажется неосуществимой, то есть Ax≤b ограничения не может быть удовлетворена.
-2Неустранимая числовая ошибка.

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

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

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

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

Совет

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

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

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

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

Алгоритмы

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

Ссылки

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

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

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