EssayAI
Блог
Блог
Математика и алгоритмы

Квадратичное программирование: решение задачи по шагам

11 июня 2026Время чтения: 8 минут
#квадратичное программирование#условия ккт#метод лагранжа#метод активных ограничений#выпуклая оптимизация

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

Общий вид задачи квадратичного программирования

В общем виде задача КП записывается так:

min⁡x  12x⊤Qx+c⊤xприAx≤b,  x≥0,\min_x \; \frac{1}{2} x^\top Q x + c^\top x \quad \text{при} \quad Ax \le b,\; x \ge 0,

где QQ - симметричная матрица (для выпуклой задачи - положительно полуопределённая), cc - вектор линейных коэффициентов, AA и bb задают линейные ограничения. Если QQ положительно определена, целевая функция строго выпукла и задача имеет единственный минимум. В этой статье разберём частный, но показательный случай - раздельно-квадратичную целевую функцию с одним ресурсным ограничением:

f(x,y)=12p(x−x0)2+12q(y−y0)2→min⁡,x+y≤S,  x,y≥0.f(x, y) = \frac{1}{2}p(x - x_0)^2 + \frac{1}{2}q(y - y_0)^2 \to \min, \qquad x + y \le S,\; x, y \ge 0.

Здесь x0,y0x_0, y_0 - целевые (желаемые) объёмы двух видов продукции, p,q>0p, q > 0 - коэффициенты, показывающие, насколько дорого обходится отклонение от плана, а SS - общий лимит ресурса, который тратят оба продукта поровну на единицу выпуска. Матрица Q=diag⁡(p,q)Q = \operatorname{diag}(p, q) здесь диагональна и положительно определена, поэтому задача строго выпукла - минимум единственный.

Условия Каруша-Куна-Таккера для задачи КП

Чтобы найти оптимум с ограничениями, составляем функцию Лагранжа с множителем λ≥0\lambda \ge 0 для ресурсного ограничения и множителями μ1,μ2≥0\mu_1, \mu_2 \ge 0 для неотрицательности:

L(x,y,λ,μ1,μ2)=f(x,y)+λ(x+y−S)−μ1x−μ2y.L(x, y, \lambda, \mu_1, \mu_2) = f(x, y) + \lambda(x + y - S) - \mu_1 x - \mu_2 y.

Целевая точка выходит за пределы треугольника, когда ресурс S сжимается: линия уровня растягивается, множитель лямбда растёт, а оптимум скользит по ребру x+y=S, пока не упрётся в вершину

Условия ККТ требуют одновременно четырёх вещей: стационарности (градиент Лагранжиана по x,yx, y равен нулю), допустимости прямой задачи (x+y≤Sx+y\le S, x,y≥0x,y\ge0), допустимости двойственной (λ,μ1,μ2≥0\lambda, \mu_1, \mu_2 \ge 0) и дополняющей нежёсткости (λ(x+y−S)=0\lambda(x+y-S)=0, μ1x=0\mu_1 x = 0, μ2y=0\mu_2 y = 0). Последнее условие - ключевое: множитель может быть положительным, только если соответствующее ограничение выполняется как равенство. Стационарность по xx и yy (при x,y>0x,y>0, то есть μ1=μ2=0\mu_1=\mu_2=0) даёт:

p(x−x0)+λ=0,q(y−y0)+λ=0⟹x=x0−λp,    y=y0−λq.p(x - x_0) + \lambda = 0, \qquad q(y - y_0) + \lambda = 0 \quad \Longrightarrow \quad x = x_0 - \frac{\lambda}{p}, \;\; y = y_0 - \frac{\lambda}{q}.

Метод активных ограничений

Метод активных ограничений решает задачу перебором гипотез о том, какие ограничения выполняются как равенства («активны»), а какие - нет:

  1. Гипотеза «ничего не активно». Проверяем безусловный минимум (x0,y0)(x_0, y_0). Если x0+y0≤Sx_0 + y_0 \le S - он же и есть решение, λ=0\lambda = 0.
  2. Гипотеза «активно только ресурсное ограничение». Подставляем x=x0−λ/px = x_0 - \lambda/p, y=y0−λ/qy = y_0 - \lambda/q в равенство x+y=Sx + y = S и находим множитель в замкнутой форме:

λ=pq (x0+y0−S)p+q.\lambda = \frac{pq\,(x_0 + y_0 - S)}{p + q}.

Если оба полученных x,y≥0x, y \ge 0 - гипотеза подтвердилась, это и есть оптимум. Если одна из координат получилась отрицательной - переходим к следующей гипотезе.

  1. Гипотеза «активны ресурс и одна из неотрицательностей». Например, если xx ушёл в минус - фиксируем x=0x = 0, тогда из ресурсного ограничения y=Sy = S: решение - вершина допустимого треугольника.
Допустимый треугольник задачи КП: линия уровня целевой функции касается ресурсного ограничения x+y=S в точке оптимума, расстояние от целевой точки до оптимума показано скобкой
Допустимый треугольник задачи КП: линия уровня целевой функции касается ресурсного ограничения x+y=S в точке оптимума, расстояние от целевой точки до оптимума показано скобкой

На рисунке видно, почему метод и называется «активных ограничений»: допустимое множество - треугольник с вершинами (0,0)(0,0), (S,0)(S,0), (0,S)(0,S), а линии уровня целевой функции - концентрические эллипсы вокруг целевой точки (x0,y0)(x_0,y_0). Оптимум - это самая маленькая (по значению ff) линия уровня, которая ещё касается треугольника. Если целевая точка уже внутри треугольника, касание происходит в самой этой точке. Если она снаружи, эллипс расширяется, пока не коснётся ближайшего ребра или вершины.

Разбор числового примера

Возьмём данные по умолчанию в калькуляторе: целевые объёмы x0=8x_0 = 8, y0=7y_0 = 7, коэффициенты издержек p=1p = 1, q=2q = 2, ресурс S=10S = 10. Сначала проверяем гипотезу «ничего не активно»: x0+y0=15>S=10x_0 + y_0 = 15 > S = 10, значит, целевая точка не помещается в допустимую область, и ресурсное ограничение обязано быть активным.

Считаем множитель Лагранжа по формуле:

λ=pq(x0+y0−S)p+q=1⋅2⋅(15−10)1+2=103≈3,33.\lambda = \frac{p q (x_0+y_0-S)}{p+q} = \frac{1 \cdot 2 \cdot (15 - 10)}{1 + 2} = \frac{10}{3} \approx 3{,}33.

Подставляем в выражения для координат:

x∗=x0−λp=8−10/31≈4,67,y∗=y0−λq=7−10/32≈5,33.x^\ast = x_0 - \frac{\lambda}{p} = 8 - \frac{10/3}{1} \approx 4{,}67, \qquad y^\ast = y_0 - \frac{\lambda}{q} = 7 - \frac{10/3}{2} \approx 5{,}33.

Обе координаты положительны, значит, гипотеза подтвердилась - вершину проверять не нужно. Проверка: x∗+y∗=4,67+5,33=10=Sx^\ast + y^\ast = 4{,}67 + 5{,}33 = 10 = S - сходится. Значение целевой функции в оптимуме:

f∗=12(4,67−8)2+12⋅2⋅(5,33−7)2≈5,56+2,78=8,33.f^\ast = \frac{1}{2}(4{,}67-8)^2 + \frac{1}{2}\cdot 2 \cdot (5{,}33-7)^2 \approx 5{,}56 + 2{,}78 = 8{,}33.

Экономический смысл множителя Лагранжа

Множитель λ\lambda - это не просто вспомогательное число, а теневая цена ресурса: он показывает, на сколько вырастут минимальные издержки, если ужесточить ограничение SS ровно на единицу. В примере выше λ≈3,33\lambda \approx 3{,}33 означает, что уменьшение ресурса на единицу (с 10 до 9) увеличит издержки примерно на 3,33 - и наоборот, ослабление ограничения на единицу настолько же их снизит. Именно поэтому в задачах планирования множитель Лагранжа читают как справедливую внутреннюю цену дефицитного ресурса: если внешняя цена его покупки ниже λ\lambda, выгодно докупить ресурс, если выше - не стоит.

Частые ошибки

  • Проверка знаков множителей пропускается. Если после решения системы стационарности получилась отрицательная координата, это не «странный ответ» - это сигнал, что гипотеза об активных ограничениях неверна, и нужно перейти к следующей (вершина треугольника).
  • Ограничение считается активным без проверки. Если целевая точка и так лежит в допустимой области (x0+y0≤Sx_0+y_0 \le S), ресурсное ограничение не активно, и множитель Лагранжа обязан быть равен нулю - принудительная подстановка в равенство x+y=Sx+y=S даст неверный, завышенный ответ.
  • Путаница знака при подстановке λ\lambda. В стационарности p(x−x0)+λ=0p(x-x_0)+\lambda=0 множитель входит со знаком «плюс» именно потому, что ограничение записано как x+y−S≤0x+y-S\le 0; при другой форме записи ограничения знак меняется - важно быть последовательным.
  • Игнорирование условия выпуклости. Метод активных ограничений в этой простой форме работает, только если QQ положительно (полу)определена. Если в матрице издержек встречаются отрицательные коэффициенты, задача может быть невыпуклой, и такого простого решения через стационарность недостаточно.

FAQ

Чем задача квадратичного программирования отличается от линейного программирования? В линейном программировании целевая функция линейна, и оптимум всегда находится в вершине допустимого многогранника. В квадратичном программировании целевая функция выпуклая (не линейная), поэтому оптимум может лежать и внутри ребра допустимой области, а не только в вершине.

Как понять, активно ли ограничение, не решая всю задачу? Достаточно проверить, попадает ли безусловный минимум целевой функции в допустимую область. Если да - ограничение не активно и его можно отбросить. Если нет - ограничение обязательно активно в оптимуме (для выпуклой задачи).

Что делать, если проекция на границу даёт отрицательную координату? Это означает, что оптимум лежит не на этом ребре, а в вершине допустимой области, где активны сразу два ограничения (например, ресурсное и неотрицательность одной из переменных). Нужно зафиксировать эту переменную равной нулю и пересчитать вторую из оставшегося ограничения.

Коротко

Задача квадратичного программирования решается методом активных ограничений: сначала проверяется, укладывается ли безусловный минимум в допустимую область, а если нет - строится система стационарности с множителем Лагранжа для активного ограничения. Если проекция на границу даёт отрицательные координаты, решение ищут в вершине допустимой области. Множитель Лагранжа λ\lambda при этом получает смысл теневой цены ресурса - меры того, насколько ужесточение ограничения увеличивает минимальные издержки.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также

Агрегатные функции SQL: COUNT, SUM, AVG и GROUP BY

Агрегатные функции SQL: COUNT, SUM, AVG и GROUP BY

Как работают агрегатные функции SQL: COUNT, SUM, AVG, MIN и MAX, группировка GROUP BY, порядок выполнения запроса, разница HAVING и WHERE и поведение NULL внутри агрегата.

24 сентября 20269 минут
Интегральный синус Si(x): ряд Тейлора и максимум

Интегральный синус Si(x): ряд Тейлора и максимум

Интегральный синус Si(x): почему интеграл sin t / t не берётся в элементарных функциях, разложение в ряд, предел π/2, максимум Si(π) и выброс Гиббса. С калькулятором.

24 сентября 202610 минут
Куча как структура данных: массив и просеивание

Куча как структура данных: массив и просеивание

Куча как структура данных: свойство кучи, хранение в обычном массиве и индексы 2i+1 и 2i+2, просеивание sift-up и sift-down, построение за O(n) и приоритетная очередь.

24 сентября 202610 минут
Линейная зависимость векторов: критерии и примеры

Линейная зависимость векторов: критерии и примеры

Что такое линейная зависимость векторов, как проверить её определителем и рангом матрицы, чем коллинеарность отличается от компланарности и как всё это связано с базисом.

24 сентября 202610 минут
Линейное уравнение второго порядка: общее решение

Линейное уравнение второго порядка: общее решение

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

24 сентября 202612 минут
Метод вариации постоянных: формулы и разбор примера

Метод вариации постоянных: формулы и разбор примера

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

24 сентября 202611 минут