Основная задача линейного программирования Симплекс-метод Симплекс-таблица Теперь мы в состоянии сформулировать алгоритм симплексметода для решения задач линейного программирования, заданных в канонической форме. Обычно он реализуется в виде так называемой симплекс-таблицы. В первом столбце этой таблицы располагаются обозначения переменных, входящих в базис. Второй столбец коэффициенты целевой функции, соответствующие переменным, входящим в базис. Третий столбец - компоненты опорного плана. В дополнительной строке в этом столбце пишется величина Её легко вычислить перемножая числа из второго столбца и третьего столбца и складывая их. Симплекс-таблица Далее идут столбцы, соответствующие всем переменным, и в этих столбцах записываются координаты этих переменных в рассматриваемом базисе. Заметим, что для базисных переменных эти координаты имеют вид (0,0, ... ,0,1,0, ..., 0), где единица стоит в той строке, где находится этота базисная переменная. В дополнительной строке сверху обычно выписывают коэффициенты , соответствующие этим переменным в целевой функции. В дополнительной строке снизу пишутся величины , вычисляемые по формулам: Симплекс-таблица Заметим, что для векторов, входящих в базис, эти разности всегда равны нулю. Далее идут следующие этапы, связанные с преобразованием этой таблицы. При ручном счете каждый раз эту таблицу лучше переписывать заново, при счете на ЭВМ (который, естественно, всегда используется при решении практических, а не учебных задач), эта таблица просто преобразуется в памяти ЭВМ. Этап 1 Просматривается дополнительная строка снизу, где записаны разности. Если все эти разности меньше, либо равны нулю, то план является оптимальным Этап 2 Если есть столбцы, где в нижней строке есть величина больше нуля, то выбирается столбец с максимальным значением этой величины. Индекс j определит вектор, вводимый в базис. Пусть max(zj-cj)=zl-cl, то есть в базис надо вводить переменную xl. Назовем столбец, соответствующий этой переменной, направляющим столбцом. В дальнейшем мы будем направляющий столбец помечать символом ⇒. Этап 3 Просматривается направляющий столбец. Если все ail<0, то значения целевой функции неограничены снизу. Если есть ail>0, то находится min(i)(xi/ail), где просматриваются лишь те дроби, для которых ail>0. Пусть этот минимум достигается для akl. Тогда именно переменная xk подлежит выводу из базиса. Строка, соответствующая этой переменной, называется направляющей строкой. В дальнейшем в примерах мы будем помечать ее символом ⇑. Этап 4 После того, как определены направляющие столбец и строка, начинает заполняться новая симплекстаблица, в которой на месте направляющей строки будет стоять переменная xl. Обычно заполнение этой новой таблицы начинается именно с направляющей строки. В качестве компоненты опорного плана туда пишется величина xk/akl. Остальные элементы этой строки заполняются величинами a’lj=akj/akl. Этап 4 Обратите внимание на особую роль элемента akl, стоящего на пересечении направляющей строки и направляющего столбца. Именно на него делятся все бывшие элементы направляющей строки. На месте бывшего элемента автоматически появляется единица. Написанные выше формулы для пересчета элементов направляющей строки можно записать следующим правилом: akl Этап 5 Далее начинается пересчет всех остальных строк таблицы, включая и дополнительную нижнюю строку для компонент плана; для координат разложения по базису; для дополнительной строки по следующему правилу Далее итерации продолжаются. Пример Решить задачу линейного программирования Исходная симплекс-таблица Базис ⇒ сi План 0 1 -3 0 2 0 x1 x2 x3 x4 x5 x6 x1 0 7 1 3 -1 0 2 0 x4 0 12 0 -2 4 1 0 0 x6 0 10 0 -4 3 0 8 1 0 0 -1 3 0 -2 0 ⇑ Пример Обратите внимание на то, что из-за специфического вида системы ограничений в столбец "план" просто переписался вектор свободных членов системы ограничений. Ну, а величины z0 и zj-cj приходится считать: Первая итерация Просматривая дополнительную строку мы видим, что в ней всего один положительный элемент в столбце, соответствующем переменной x3. Следовательно, эту переменную надо вводить в базис и этот столбец и будет направляющим столбцом. В этом направляющем столбце есть два положительных числа 4 и 3. Поэтому нужно рассмотреть два частных 12/4 и 10/3 и выбрать из них наименьшее. Так как min ((12/4), (10/3))=3 и он достигается на a43=4 , то этот вектор подлежит выводу из базиса и соответствующая ему строка и будет направляющей строкой. Заполним теперь новую симплекс-таблицу, следуя сформулированным выше правилам. Начинается заполнение, естественно, со второй строки (так как она была направляющей), а затем пересчитываются все остальные строки. Полученная симплекс-таблица Базис ⇒ сi План 0 1 -3 0 2 0 x1 x2 x3 x4 x5 x6 x1 0 10 1 5/2 0 1/4 2 0 x3 -3 3 0 -1/2 1 1/4 0 0 x6 0 1 0 -5/2 0 -3/4 8 1 -9 0 1/2 0 -3/4 -2 0 ⇑ Вторая итерация Просматривая дополнительную строку мы вновь видим в ней всего один положительный элемент это 1/2, стоящая в столбце x2. Следовательно, этот вектор надо ввести в базис и этот столбец будет направляющим. В столбце, соответствующем x2, всего один положительный элемент это 5/2в первой строке. Поэтому первая строка будет направляющей и переменная x1 должна быть выведена из базиса. Новая симплекс-таблица Базис сi План 0 1 -3 0 2 0 x1 x2 x3 x4 x5 x6 x2 1 4 2/5 1 0 1/10 4/5 0 x3 -3 5 1/5 0 1 3/10 2/5 0 x6 0 11 1 0 0 -1/2 10 1 -11 -1/5 0 0 -4/5 -12/5 0