Линейное программирование
Лине́йное программи́рование, раздел математики, посвящённый теории и методам решения задач об экстремумах линейных функций на множествах, задаваемых системами линейных равенств и неравенств. Задачи линейного программирования являются математическими моделями различных задач технико-экономического содержания.
Типичной задачей линейного программирования является задача нахождения максимума по линейной функции при условияхгде и – заданные числа.
Такая задача возникает, например, при планировании работы предприятия. Пусть предприятие может выпускать видов продукции, единица продукции вида даёт прибыль , . В производстве используются ресурсы видов (сырьё, время работы станков, рабочая сила, энергия и т. п.). Расход ресурса на производство единицы продукции вида составляет . Общий ресурс вида ограничен величиной , . Требуется определить производственный план (программу; отсюда название), т. е. найти объёмы выпуска по каждому из видов продукции с тем, чтобы были выполнены ограничения , а суммарная прибыль была максимальной.
Функцию в линейном программировании принято называть целевой функцией (критерием оптимальности, критерием эффективности), вектор , удовлетворяющий условиям , , называется допустимым решением, или планом, а множество векторов , определяемое условиями , , называется допустимым множеством, или множеством планов. Допустимое решение , доставляющее максимум целевой функции , называется оптимальным. Ещё одним примером прикладных задач линейного программирования является транспортная задача.
В задачах линейного программирования более общего вида по сравнению с – некоторые (или все) из условий могут быть равенствами, а на некоторые (либо на все) переменные не налагаются условия неотрицательности. Любая задача линейного программирования может быть приведена к эквивалентной задаче вида –. В некоторых задачах линейного программирования возникает ограничение, связанное с целочисленностью величин . В этом случае говорят о задачах целочисленного линейного программирования.
Задачей линейного программирования, двойственной задаче –, называется задача минимизации функции при условияхЗадачи – и – либо обе имеют решения, либо обе неразрешимы. Значения целевых функций и на решениях совпадают.
Одним из основных методов решения задач линейного программирования является симплексный метод. Его идея состоит в следующем: допустимое множество планов, задаваемое ограничениями и , представляет собой выпуклое многогранное множество; если оно ограничено, то оно является выпуклым многогранником. Если задача линейного программирования имеет решение, то существует вершина этого многогранника, являющаяся оптимальным планом. Симплексный метод состоит в направленном переборе, при котором значения целевой функции возрастают от вершины к вершине. Каждой вершине соответствует система уравнений, получаемая из системы неравенств , , и вычислительная процедура симплексного метода состоит в последовательном решении систем линейных алгебраических уравнений. Простота алгоритма делает этот метод удобным для реализации. Для решения задач линейного программирования применяются также итерационные методы построения последовательности приближений, пределом которой является оптимальный план.
Существенное место в линейном программировании занимает проблема устойчивости. В реальных задачах (в особенности задачах технико-экономического содержания) исходная информация обычно известна лишь с определённой точностью, и даже малые возмущения (погрешности) в исходных данных могут вызывать существенные изменения решения. При численной реализации того или иного конечного метода возникают ошибки округления, накопление которых, особенно в задачах большой размерности, может привести к значительным отклонениям полученного приближённого решения от истинного. Обе эти ситуации описывают свойство неустойчивости и присущи некорректно поставленным задачам. В линейном программировании разработаны методы решения некорректных задач.
Развитие линейного программирования началось в 1939 г. с исследований Л. В. Канторовича, в которых он предложил универсальный математический метод для решения задач экономического характера, таких как задача о наилучшей загрузке машин, о раскрое материалов с наименьшими расходами, о распределении грузов по нескольким видам транспорта. Во 2-й половине 1940-х гг. Т. Купманс обращал внимание математиков на задачи, сводящиеся к нахождению экстремумов линейных функций на многогранниках. В это же время американский математик Дж. Данциг (ввёл термин «линейное программирование») и Канторович независимо друг от друга предложили эффективный метод решения таких задач, получивший название симплексного метода. Этот и другие методы решения задач линейного программирования требуют большого объёма вычислений; они стали эффективно реализовываться только с появлением быстродействующих ЭВМ в начале 1950-х гг.