Линейное программирование: постановка задачи и графический метод
Что такое ЗЛП и как решать её графически: полуплоскости, линии уровня, перебор вершин. Разбираем план производства стола и тумб с полной проверкой ответа.
Цех получил заказ: нужны столы и тумбы, сколько сможет сделать — столько заберут. Один стол приносит 2 тысячи прибыли, одна тумба — 3 тысячи. Ресурсов впритык: станок А отработает до конца месяца не больше 8 часов, причём стол требует час его работы, тумба — два; у станка Б остаётся 6 часов, и он тратит по часу на любое изделие. Запускать одни тумбы? Выходит 4 тумбы и 12 тысяч. Одни столы? 6 столов и те же 12 тысяч. А если смешать? Оказывается, 4 стола и 2 тумбы дадут 14 тысяч — больше любой крайности. Как получать такие ответы не перебором догадок, а алгоритмом, и есть вопрос линейного программирования.
Что такое ЗЛП: три обязательных ингредиента#
Задача линейного программирования (ЗЛП) — задача об оптимизации линейной функции на множестве, заданном линейными неравенствами и равенствами. В общем виде она записывается так:
На переменные наложены ограничения — по одному на каждый ресурс:
Наконец, третий ингредиент — неотрицательность: . Отрицательный выпуск не имеет смысла. Слово «линейное» в названии означает: ни одна переменная не возводится в степень, не умножается на другую, под неё не подставляется синус. Благодаря этому каждое ограничение вырезает из пространства полуплоскость, а целевая функция задаёт семейство параллельных прямых — на этом и построен графический метод.
- линейная целевая функция — то, что максимизируем или минимизируем;
- линейные ограничения — неравенства или равенства, задающие границы плана;
- неотрицательность переменных — её иногда снимают, тогда меняется техника, но не идея.
Жизненные постановки: план, рацион и раскрой#
План производства — постановка, с которой мы начали: продукты, ресурсы, прибыли. Найти ассортимент, при котором прибыль максимальна, а фонды времени не превышены. Это старейшая и самая узнаваемая задача исследования операций: в военное время так распределяли программу между заводами, сегодня — так планируют состав бетона или портфель заказов.
Задача о рационе (диете) — зеркальная: не прибыль максимизировать, а затраты минимизировать при обязательных требованиях. Есть корма с ценами и содержанием питательных веществ; нужно смешать их так, чтобы животное получило норму белка, жиров и витаминов, а смесь стоила дешевле всех остальных допустимых смесей.
Задача о раскрое: на складе прутки по 6 метров, а нужны заготовки двух сортов — по 2 и по 3 метра. Каждый способ разрезания даёт свой набор заготовок и свои обрезки. Переменные — сколько прутков резать каждым способом, критерий — минимум отходов или минимум израсходованных прутков. Похожа на неё и транспортная постановка про склады и магазины — у неё отдельный урок.
| Постановка | Переменные | Что оптимизируем |
|---|---|---|
| План производства | объёмы выпуска каждого продукта | прибыль → max |
| Рацион (диета) | количество каждого корма в смеси | стоимость → min |
| Раскрой материала | сколько прутков кроить каждым способом | отходы → min |
Общий знаменатель один: ищем неотрицательные числа, которые при заданных ресурсах дают наилучший результат. Различаются только «легенды» и коэффициенты.
Стандартная и каноническая форма: зачем две#
Стандартной (или симметричной) формой называют запись, где все ограничения — неравенства «≤», целевая функция максимизируется, переменные неотрицательны. Наша задача про цех записана именно так.
Каноническая форма требует равенств: каждое неравенство дополняют балансовой переменной. Ограничение превращается в , где — недогрузка станка А, простой в часах. Ограничение со знаком «≥» приводят умножением строки на , а переменную без ограничения знака заменяют разностью двух неотрицательных. Зачем возня? Каноническая форма — стартовая площадка симплекс-метода: в ней сразу читается начальный базис.
Как нарисовать задачу: полуплоскости и линия уровня#
Пока переменных две, задачу можно нарисовать. Каждое линейное неравенство на плоскости — полуплоскость: прямая-граница плюс одна из двух сторон. Пересечение всех полуплоскостей и условий неотрицательности называют областью допустимых решений (ОДР). Это выпуклый многоугольник — возможно, пустой или неограниченный, но всегда выпуклый, если не пуст.
Целевая функция рисуется линиями уровня — прямыми с разными значениями . Все они параллельны, а направление роста задаёт вектор — градиент. Двигаем линию уровня по стрелке; последняя точка, где она ещё касается ОДР, — оптимум.
На чертеже видна и главная теорема метода: если ОДР ограничена, линейная функция достигает максимума и минимума в вершинах многоугольника. Доказательство короткое: линия уровня либо касается многоугольника вершиной, либо сливается с целой стороной — но и тогда концы стороны, тоже вершины, дают то же значение. Практический вывод: вместо бесконечного множества точек достаточно посчитать в конечном числе вершин.
Полный пример: 2x + 3y → max с перебором вершин#
Вернёмся к цеху. Обозначим — столы, — тумбы. Прибыль и два ресурса дают систему:
- Прямая проходит через точки и . Подстановка даёт — верно, значит, берём полуплоскость с началом координат.
- Прямая проходит через и ; проверка нулём снова работает.
- Условия , оставляют первый квадрант.
- ОДР — четырёхугольник с вершинами , , , ; точка — пересечение прямых и : вычтем второе из первого, получим , затем .
| Вершина | Как получена | $F = 2x + 3y$ |
|---|---|---|
| (0, 0) | пересечение осей | 0 |
| (6, 0) | и | 12 |
| (4, 2) | и | 14 |
| (0, 4) | и | 12 |
Максимум равен 14 при , : четыре стола и две тумбы. Проверка честная: станок А загружен целиком — часов, станок Б тоже — часов. Оба ресурса прижаты к границе. Если бы какая-то полуплоскость «болталась» в стороне, стоило бы перепроверить арифметику.
Заметьте, как легли числа: чистые тумбы дают 12, чистые столы — тоже 12, а смесь выжимает 14. Интуиция «бери самое прибыльное» ошибается, потому что тумба съедает два дефицитных часа станка А. Редкий случай, когда «немножко всего» математически честнее, чем удар в одну точку.
Когда метод молчит: пустая ОДР и вечный рост#
Первый патологический случай — ОДР пуста: ограничения противоречивы. Например, и не выполняются одновременно ни в какой точке. На чертеже полуплоскости не пересекаются, допустимых планов нет вовсе. В жизни это значит, что заказ невыполним физически, и чинить надо постановку — ресурсы или обещания, — а не алгоритм.
Второй случай — неограниченность. Возьмём при единственном ограничении и . План допустим при любом , а растёт без предела. ОДР — бесконечный клин, линия уровня уезжает по нему вечно, максимума не существует. Симплекс-метод сообщает об этом отдельным сигналом — увидим его в уроке про симплекс-метод.
В практических моделях неограниченность — почти всегда симптом забытого ограничения: спроса, бюджета, ёмкости рынка. Математика честно говорит «можно зарабатывать вечно» — значит, вы забыли, что покупатели кончаются.
Что дальше#
При трёх переменных рисовать уже тесно, при десяти — невозможно. Но вывод «оптимум прячется в вершине» никуда не уходит: симплекс-метод перебирает вершины алгебраически, без единого чертежа. Систему ограничений удобно держать в матричной записи — об этом матрицы и операции, а решать систему руками научит СЛАУ и метод Гаусса; сам термин закреплён в статье про систему линейных уравнений. Корни всей линии — введение в теорию игр: исследование операций выросло из игр как их вырожденный случай с «природой» вместо противника.
Следующий шаг конкретный: возьмите задачу из урока и поменяйте прибыли местами — при тех же ограничениях. Пройдите графический метод от начала до конца и сверьтесь: оптимум должен переехать в вершину со значением 18. Сошлось — вы готовы к симплекс-методу.
В задаче при , , максимальная прибыль равна:
Линия уровня целевой функции — это:
ОДР задачи неограничена. Что можно сказать о целевой функции?
Частые вопросы
Как найти область допустимых решений графически?
Постройте прямую по каждому ограничению: найдите её пересечения с осями и проведите линию. Заштрихуйте нужную полуплоскость — ту, где лежит проверочная точка , если она удовлетворяет неравенству. Пересечение всех штриховок и условий , и есть ОДР.
Почему оптимум линейной функции достигается в вершине?
Линия уровня при движении в направлении градиента покидает выпуклый многоугольник ОДР. Последнее касание приходится на вершину; если линия параллельна стороне, касание длится всюду по стороне, включая её концы — а это тоже вершины с тем же значением функции. Поэтому перебор вершин даёт гарантированный ответ, и проверять каждую точку области не нужно.
Чем каноническая форма отличается от стандартной?
Стандартная форма — неравенства «≤», максимум и неотрицательные переменные. Каноническая — равенства: к каждому неравенству добавляют балансовую переменную, недогрузку ресурса, а «≥» разворачивают умножением строки на минус единицу. Каноническая форма нужна симплекс-методу, потому что из равенств сразу читается начальный базис и первые значения базисных переменных.
Что делать, если целевая функция не ограничена на ОДР?
Сначала перепроверьте модель: на практике неограниченность означает забытое ограничение — спрос, бюджет, фонд времени или ёмкость склада. Если модель верна, честный ответ такой: максимума не существует, план можно улучшать бесконечно, и численные алгоритмы сообщают об этом отдельным диагностическим признаком, а не зацикливаются молча.
Готовитесь к контрольной?
Чеклист тем по «Теория игр»: что вы уже умеете, что повторить и в каком порядке.
Открыть чеклист предмета →
Проверьте себя в бою
Босс-экзамен по «Теория игр»: квизы всех уроков плюс бесконечный поток сгенерированных задач. Каждая попытка — новый расклад.
Начать босс-экзамен →