Линейное программирование: графический метод решения на плоскости
Область допустимых решений, линии уровня целевой функции и максимум в вершине: решаем задачу о производстве двумя переменными графическим методом, с проверкой каждой вершины.
Задача из жизни цеха. Продукция двух видов: изделия и . На изделие уходит единицы древесины, на — одна; всего древесины единиц в смену. На станке: занимает час, — часа; всего часов. Прибыль: рублей с изделия , — с . Сколько выпускать каждого, чтобы заработать больше всего? Две переменные — и это подарок: задача решается карандашом на листе бумаги, без единой итерации симплекса. Графический метод — не игрушка, а способ увидеть устройство всей линейной оптимизации: ответ всегда сидит в вершине.
Стандартная форма задачи#
Обозначим план выпуска (изделия ) и (изделия ). Ограничения по ресурсам и неотрицательность выпуска дают систему неравенств, а цель — функцию прибыли:
Слово «линейное» здесь буквальное: ни в цели, ни в ограничениях нет ни квадратов, ни произведений переменных. Именно линейность делает задачу решаемой до конца — каждая граница на плоскости превращается в прямую, а нарисовать прямую вы умеете. Каждое неравенство вырезает из плоскости полуплоскость; пересечение всех четырёх полуплоскостей — область допустимых решений (ОДР):
Выпуклость не случайность, а теорема: пересечение полуплоскостей всегда выпуклое множество — вместе с любыми двумя своими точками оно содержит отрезок между ними. Вершины многоугольника — это решения систем уравнений из пар граничных прямых; пересечение и считается как обычная СЛАУ: удвоим первое, вычтем второе, получим , откуда , .
Линии уровня: куда двигать прибыль#
Зафиксируем прибыль: . На плоскости это прямая, параллельная всем остальным линиям уровня — «карта высот» функции . Прибыль растёт в направлении вектора , сокращённо : это нормаль к линиям уровня, её направление связано со скалярным произведением — вдоль функция растёт быстрее всего. Геометрический алгоритм решения:
- Построить ОДР: по прямым-границам и полуплоскостям, с проверкой одной пробной точкой (обычно ).
- Провести линию уровня для какого-нибудь — она перпендикулярна вектору .
- Сдвигать линию уровня параллельно себе в сторону до последнего касания ОДР — у многоугольника это всегда вершина (или целое ребро).
- Вычислить во всех кандидатных вершинах и выбрать максимум — проверка, которая защищает от ошибок рисунка.
Вправо-вверх линию гоняет именно нормаль: если забыть про неё и двигать «на глазок», легко уйти не туда. Направления и их роль в разложении по базису — из самых основ работы с векторами; потренируйте глазомер:
Полное решение задачи о производстве#
За ответом стоит общий факт — основная теорема линейного программирования: если задача имеет конечный максимум, он достигается в вершине (возможно, и на всём ребре — тогда прибыль одинакова в обеих его вершинах). Поэтому перебор вершин — не эвристика, а полное решение: у многоугольника из четырёх вершин их четыре, у промышленных задач тысячи — и там работает симплекс, который ходит от вершины к вершине по рёбрам, но геометрическая картинка та же.
Ошибки, которые меняют ответ#
- Вершина не из ОДР: посчитали пересечение прямых, но не проверили остальные неравенства. Точка — пересечение оси с первой прямой, но второе ограничение там нарушено; включить её в перебор — испортить ответ.
- Линия уровня сдвигается против нормали: получили максимум там, где прибыль минимальна. Всегда отмечайте на чертеже стрелкой.
- Потерянная вершина: забыли осевые точки или — они тоже вершины ОДР, хотя на них не пересекаются две «наклонные» прямые.
- Арифметика пересечения: система из двух прямых решается в две строки, но знак минус при переносе — классическая потеря. Сверяйте пересечение подстановкой в оба уравнения.
Техническая поддержка урока: уравнения прямых и полуплоскости — в теме о прямой на плоскости; системы из двух уравнений освежает решатель Гаусса, определители для быстрых проверок — решатель определителей. Полный набор линейных формул лежит в шпаргалке. А если подгонка по точкам интересует в статистическом ключе, посмотрите МНК и нормальные уравнения — там функция тоже квадратичная, но без ограничений.
Координаты вершины пересечения прямых и :
Линии уровня целевой функции перпендикулярны вектору:
Числовой прогон: цех делает столы и стулья, ресурс — 20 часов столярного времени и 18 часов покраски. Стол требует 2 и 3 часа, стул — 2 и 1 час; прибыль 6 и 5 тысяч. Ограничения: , , целевая . Вершины области: , , , . Значения целевой: 50, 54, 32 и 0 — оптимум в точке : четыре стола и шесть стульев, прибыль 54 тысячи. Линия уровня в этой точке касается области последней — геометрия совпала с алгеброй.
В нашей задаче максимум прибыли достигается:
Частые вопросы
Графический метод работает в трёх измерениях?
Уже натянуто: вместо многоугольника будет многогранник, а линии уровня — плоскости. Рисовать можно, но быстро неудобно; для трёх и более переменных используют симплекс-метод, который реализует ту же идею «переходи к лучшей вершине» алгебраически.
Что если ограничение со знаком «≥»?
Ничего нового: полуплоскость с другой стороны прямой. Пробная точка помогает не путаться: если в ней неравенство выполняется — область тянется к началу координат, если нет — от него. Задача на минимум выглядит зеркально: линию уровня двигают против нормали.
Как понять, что максимум на всём ребре?
Если линия уровня параллельна одной из границ ОДР и «застревает» на ней целиком: значение одинаково во всех точках ребра. Проверка мгновенная — посчитайте в двух концах ребра; равенство значений и означает альтернативный оптимум.
Зачем проверять ресурсы «на впритык»?
Активные ограничения в оптимальной вершине говорят, какие ресурсы лимитируют рост прибыли: докупите ещё единицу древесины — оптимум сдвинется и прибыль подрастёт (это уже двойственные оценки, следующая глава теории). В нашем решении активны оба ограничения — редкий случай полной загрузки.
Курс линейной алгебры на этом сайте пройден от первых операций с матрицами до оптимизации; возвращайтесь к любому уроку через хаб курса или тренируйте технику в тренажёре по матрицам. Если задача роста вам ближе по вероятностной части — переходите к цепям Маркова в курсе теории вероятностей.
Готовитесь к контрольной?
Чеклист тем по «Линал»: что вы уже умеете, что повторить и в каком порядке.
Открыть чеклист предмета →
Проверьте себя в бою
Босс-экзамен по «Линал»: квизы всех уроков плюс бесконечный поток сгенерированных задач. Каждая попытка — новый расклад.
Начать босс-экзамен →