Рассмотренный геометрический метод решения задач линейного программирования достаточно прост и нагляден для случая двух и даже трех переменных. Для большего числа переменных применение геометрического метода становится невозможным.
Правда, мы видели, что оптимальные значения целевой функции достигаются на границе области допустимых решений. Поэтому в случае неизвестных () можно построить - мерный многогранник решений, найти его вершины и вычислить значения целевой функции в этих точках. Наименьшее среди полученных значений можно принять за искомое, а координаты соответствующей вершины - за оптимальные значения проектных параметров.
Однако решение задачи линейного программирования не так просто, как может показаться на первый взгляд. Сложность состоит в том, что количество проектных параметров в реальных задачах (особенно в экономических) может достигать сотен и даже тысяч. При этом число вершин многогранника может быть настолько большим, что перебор вершин и вычисление в них значений целевой функции приведет к такому объему вычислений, который практически невозможно осуществить в течение разумного времени даже с помощью ЭВМ.
Одним из методов, позволяющих эффективно решать подобные задачи, причем с гораздо меньшим числом операций, является симплекс-метод.
Симплексом называется простейший выпуклый многогранник при данном числе измерений. В частности, при - произвольный треугольник, - произвольный тетраэдр.
Идея симплекс-метода состоит в следующем. Примем в качестве начального приближения координаты некоторой вершины многогранника допустимых решений и найдем все ребра, выходящие из этой вершины. Двигаемся вдоль того ребра, по которому линейная целевая функция убывает. Приходим в новую вершину, находим все выходящие из нее ребра, двигаемся по одному из них и т.д. В конце концов мы придем в такую вершину, движение из которой вдоль любого ребра приведет к возрастанию целевой функции. Следовательно, минимум достигнут, и координаты этой последней вершины принимаются в качестве оптимальных значений рассматриваемых проектных параметров.
Отметим, что (поскольку — линейная функция, а многогранник выпуклый) данный вычислительный процесс сходится к решению задачи, причем за конечное число шагов . В данном случае их число порядка , т.е. значительно меньше числа шагов в методе простого перебора вершин, где может быть порядка .
Пусть задача линейного программирования состоит в том, что нужно найти такие неотрицательные значения проектных параметров , которые минимизируют линейную целевую функцию
(1)
при заданных ограничениях в виде системы линейных уравнений
(2).
Если в качестве ограничений заданы неравенства, то их можно преобразовать в равенства путем введения дополнительных неотрицательных переменных, которые называются балансовым. Например, имея некоторое неравенство , можно всегда ввести новую переменную такую, что после ее прибавления к левой части данного неравенства получим равенство .
Будем считать, что все уравнения системы (2) линейно независимы, т.е. ни одно из них нельзя получить как линейную комбинацию других. В противном случае линейно зависимые уравнения можем отбросить. И кроме того, эта система совместна, т.е. среди уравнений системы нет противоречивых. Ясно, что при этих предположениях число уравнений меньше числа переменных , поскольку при система (2) имеет единственное решение, что исключает всякую оптимизацию; при не выполняются сделанные выше предположения.
Выразим первые переменных через остальные с помощью уравнений (2):
(3).
Переменные называются базисными, а вектор - базисом; - свободные переменные.
Используя соотношения (3), можно выразить линейную целевую функцию (1) через свободные переменные:
(4).
Процесс оптимизации начнем с некоторого начального (опорного) решения, например при нулевых значениях свободных переменных. Тогда получим
(5).
При этом целевая функция (4) принимает значение .
Дальнейшее решение задачи симплекс-методом распадается на ряд этапов, заключающихся в том, что от одного решения нужно перейти к другому с таким условием, чтобы целевая функция не возрастала. Это достигается выбором нового базиса и значений свободных переменных.
Выясним, является ли опорное решение (5) оптимальным. Для этого проверим, можно ли уменьшить соответствующее этому решению значение целевой функции при изменении каждой свободной переменной. Поскольку , то мы можем лишь увеличивать их значения. Если коэффициенты в формуле (4) неотрицательны, то при увеличении любой свободной переменной целевая функция не может уменьшиться. В этом случае решение (5) окажется оптимальным.
Пусть теперь среди коэффициентов формулы (4) хотя бы один отрицательный, например . Это означает, что при увеличении переменной целевая функция уменьшается по сравнению со значением , соответствующим решению (5). Поэтому в качестве нового опорного выбирается решение при следующих значениях свободных параметров:
(6).
При этом базисные переменные, вычисляемые по формулам (3), равны
(7).
Если все коэффициенты неотрицательны, то можно увеличивать неограниченно; в этом случае не существует оптимального решения задачи. Однако на практике такие случаи, как правило, не встречаются. Обычно среди коэффициентов имеются отрицательные, а это влечет за собой угрозу сделать некоторые переменные в (7) отрицательными из-за большого значения . Следовательно, переменную можно увеличивать лишь до тех пор, пока базисные переменные остаются неотрицательными. Это и является условием выбора значения . Его можно записать в виде
(8).
Среди всех отрицательных коэффициентов найдем наибольший по модулю. Пусть его значение равно , а соответствующее ему значение равно . Тогда из (8) получим максимально возможное значение переменной на данном шаге оптимизации: , и новое опорное решение запишем в виде
, ,
, (9).
целевая функция при этих значениях проектных параметров равна
(10).
Полученное значение целевой функции меньше предыдущего, поскольку в данной формуле второй член правой части больше нуля ().
На этом заканчивается первый шаг оптимизации. Теперь нужно сделать второй шаг, используя аналогичную процедуру. Для этого необходимо выбрать новый базис, принимая в качестве базисных переменных параметры . После второго шага мы либо найдем новые оптимальные значения переменных и соответствующее им значение целевой функции , либо покажем, что решение (9) является оптимальным. В любом случае после конечного числа шагов мы придем к оптимальному решению. Еще раз подчеркнем, что в отличие от метода перебора симплекс-метод дает возможность вести поиск целенаправленно, уменьшая на каждом шаге значение целевой функции.
В качестве примера, иллюстрирующего симплекс-метод, рассмотрим задачу об использовании ресурсов.