Квадратичное программирование: решение задачи по шагам
Квадратичное программирование (КП) - это задача оптимизации, в которой целевая функция квадратичная, а ограничения линейные. Такие задачи встречаются в планировании производства, портфельной теории и регрессии с ограничениями: везде, где издержки растут не пропорционально отклонению от плана, а квадратично. В отличие от линейного программирования, где оптимум всегда лежит в вершине допустимого многогранника, в КП оптимум может оказаться и внутри ребра, и в вершине - это и делает задачу интереснее и чуть сложнее. Ниже разберём общий вид задачи, условия Каруша-Куна-Таккера, метод активных ограничений и решим конкретный пример с проверкой знаков. Чтобы сразу увидеть, как меняется решение при разных данных, покрути калькулятор ниже - он показывает допустимую область, линию уровня целевой функции и найденный оптимум одновременно.
Общий вид задачи квадратичного программирования
В общем виде задача КП записывается так:
где - симметричная матрица (для выпуклой задачи - положительно полуопределённая), - вектор линейных коэффициентов, и задают линейные ограничения. Если положительно определена, целевая функция строго выпукла и задача имеет единственный минимум. В этой статье разберём частный, но показательный случай - раздельно-квадратичную целевую функцию с одним ресурсным ограничением:
Здесь - целевые (желаемые) объёмы двух видов продукции, - коэффициенты, показывающие, насколько дорого обходится отклонение от плана, а - общий лимит ресурса, который тратят оба продукта поровну на единицу выпуска. Матрица здесь диагональна и положительно определена, поэтому задача строго выпукла - минимум единственный.
Условия Каруша-Куна-Таккера для задачи КП
Чтобы найти оптимум с ограничениями, составляем функцию Лагранжа с множителем для ресурсного ограничения и множителями для неотрицательности:
Условия ККТ требуют одновременно четырёх вещей: стационарности (градиент Лагранжиана по равен нулю), допустимости прямой задачи (, ), допустимости двойственной () и дополняющей нежёсткости (, , ). Последнее условие - ключевое: множитель может быть положительным, только если соответствующее ограничение выполняется как равенство. Стационарность по и (при , то есть ) даёт:
Метод активных ограничений
Метод активных ограничений решает задачу перебором гипотез о том, какие ограничения выполняются как равенства («активны»), а какие - нет:
- Гипотеза «ничего не активно». Проверяем безусловный минимум . Если - он же и есть решение, .
- Гипотеза «активно только ресурсное ограничение». Подставляем , в равенство и находим множитель в замкнутой форме:
Если оба полученных - гипотеза подтвердилась, это и есть оптимум. Если одна из координат получилась отрицательной - переходим к следующей гипотезе.
- Гипотеза «активны ресурс и одна из неотрицательностей». Например, если ушёл в минус - фиксируем , тогда из ресурсного ограничения : решение - вершина допустимого треугольника.

На рисунке видно, почему метод и называется «активных ограничений»: допустимое множество - треугольник с вершинами , , , а линии уровня целевой функции - концентрические эллипсы вокруг целевой точки . Оптимум - это самая маленькая (по значению ) линия уровня, которая ещё касается треугольника. Если целевая точка уже внутри треугольника, касание происходит в самой этой точке. Если она снаружи, эллипс расширяется, пока не коснётся ближайшего ребра или вершины.
Разбор числового примера
Возьмём данные по умолчанию в калькуляторе: целевые объёмы , , коэффициенты издержек , , ресурс . Сначала проверяем гипотезу «ничего не активно»: , значит, целевая точка не помещается в допустимую область, и ресурсное ограничение обязано быть активным.
Считаем множитель Лагранжа по формуле:
Подставляем в выражения для координат:
Обе координаты положительны, значит, гипотеза подтвердилась - вершину проверять не нужно. Проверка: - сходится. Значение целевой функции в оптимуме:
Экономический смысл множителя Лагранжа
Множитель - это не просто вспомогательное число, а теневая цена ресурса: он показывает, на сколько вырастут минимальные издержки, если ужесточить ограничение ровно на единицу. В примере выше означает, что уменьшение ресурса на единицу (с 10 до 9) увеличит издержки примерно на 3,33 - и наоборот, ослабление ограничения на единицу настолько же их снизит. Именно поэтому в задачах планирования множитель Лагранжа читают как справедливую внутреннюю цену дефицитного ресурса: если внешняя цена его покупки ниже , выгодно докупить ресурс, если выше - не стоит.
Частые ошибки
- Проверка знаков множителей пропускается. Если после решения системы стационарности получилась отрицательная координата, это не «странный ответ» - это сигнал, что гипотеза об активных ограничениях неверна, и нужно перейти к следующей (вершина треугольника).
- Ограничение считается активным без проверки. Если целевая точка и так лежит в допустимой области (), ресурсное ограничение не активно, и множитель Лагранжа обязан быть равен нулю - принудительная подстановка в равенство даст неверный, завышенный ответ.
- Путаница знака при подстановке . В стационарности множитель входит со знаком «плюс» именно потому, что ограничение записано как ; при другой форме записи ограничения знак меняется - важно быть последовательным.
- Игнорирование условия выпуклости. Метод активных ограничений в этой простой форме работает, только если положительно (полу)определена. Если в матрице издержек встречаются отрицательные коэффициенты, задача может быть невыпуклой, и такого простого решения через стационарность недостаточно.
FAQ
Чем задача квадратичного программирования отличается от линейного программирования? В линейном программировании целевая функция линейна, и оптимум всегда находится в вершине допустимого многогранника. В квадратичном программировании целевая функция выпуклая (не линейная), поэтому оптимум может лежать и внутри ребра допустимой области, а не только в вершине.
Как понять, активно ли ограничение, не решая всю задачу? Достаточно проверить, попадает ли безусловный минимум целевой функции в допустимую область. Если да - ограничение не активно и его можно отбросить. Если нет - ограничение обязательно активно в оптимуме (для выпуклой задачи).
Что делать, если проекция на границу даёт отрицательную координату? Это означает, что оптимум лежит не на этом ребре, а в вершине допустимой области, где активны сразу два ограничения (например, ресурсное и неотрицательность одной из переменных). Нужно зафиксировать эту переменную равной нулю и пересчитать вторую из оставшегося ограничения.
Коротко
Задача квадратичного программирования решается методом активных ограничений: сначала проверяется, укладывается ли безусловный минимум в допустимую область, а если нет - строится система стационарности с множителем Лагранжа для активного ограничения. Если проекция на границу даёт отрицательные координаты, решение ищут в вершине допустимой области. Множитель Лагранжа при этом получает смысл теневой цены ресурса - меры того, насколько ужесточение ограничения увеличивает минимальные издержки.
Читайте также

Атрибуты сущности в ER-модели: пять типов и примеры
Разбираем пять типов атрибутов сущности в ER-модели: простой, составной, ключевой, многозначный, производный, с примерами и переходом к столбцам и таблицам реляционной схемы.

Циркуляция векторного поля по контуру: формула и смысл
Циркуляция векторного поля по контуру: что это такое, как вычислить линейный интеграл по параметризации и через ротор поля с теоремой Грина, разбор типичных ошибок и примеров расчёта.

Динамическое программирование: основы и идея мемоизации
Что такое динамическое программирование простыми словами: перекрывающиеся подзадачи, оптимальная подструктура, мемоизация и табуляция на примере чисел Фибоначчи, разница с наивной рекурсией.

Кодировка Unicode и UTF-8: как кодируются символы
Кодировка Unicode и UTF-8 простыми словами: как код символа превращается в байты, почему кириллица и эмодзи занимают 2-4 байта и как устроены префиксы 110, 1110, 10.

Начальные и центральные моменты случайной величины: формулы
Разбираем начальные и центральные моменты случайной величины: как выразить дисперсию, асимметрию и эксцесс через ν_k и вычислить их на примере дискретного распределения.

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