17
Основная задача линейного программирования Симплекс-метод

Основная задача линейного программирования

  • Upload
    hisoki

  • View
    55

  • Download
    5

Embed Size (px)

DESCRIPTION

Основная задача линейного программирования. Симплекс-метод. Симплекс-таблица. Теперь мы в состоянии сформулировать алгоритм симплекс-метода для решения задач линейного программирования, заданных в канонической форме. Обычно он реализуется в виде так называемой симплекс-таблицы. - PowerPoint PPT Presentation

Citation preview

Page 1: Основная задача линейного программирования

Основная задача линейного программирования

Симплекс-метод

Page 2: Основная задача линейного программирования

Симплекс-таблица

Теперь мы в состоянии сформулировать алгоритм симплекс-метода для решения задач линейного программирования, заданных в канонической форме. Обычно он реализуется в виде так называемой симплекс-таблицы.

В первом столбце этой таблицы располагаются обозначения переменных, входящих в базис.

Второй столбец - коэффициенты целевой функции, соответствующие переменным, входящим в базис.

Третий столбец - компоненты опорного плана. В дополнительной строке в этом столбце пишется величина

Её легко вычислить перемножая числа из второго столбца и третьего столбца и складывая их.

Page 3: Основная задача линейного программирования

Симплекс-таблица

Далее идут столбцы, соответствующие всем переменным, и в этих столбцах записываются координаты этих переменных в рассматриваемом базисе. Заметим, что для базисных переменных эти координаты имеют вид (0,0, ... ,0,1,0, ..., 0), где единица стоит в той строке, где находится этота базисная переменная.

В дополнительной строке сверху обычно выписывают коэффициенты , соответствующие этим переменным в целевой функции.

В дополнительной строке снизу пишутся величины , вычисляемые по формулам:

Page 4: Основная задача линейного программирования

Симплекс-таблица

Заметим, что для векторов, входящих в базис, эти разности всегда равны нулю.

Далее идут следующие этапы, связанные с преобразованием этой таблицы. При ручном счете каждый раз эту таблицу лучше переписывать заново, при счете на ЭВМ (который, естественно, всегда используется при решении практических, а не учебных задач), эта таблица просто преобразуется в памяти ЭВМ.

Page 5: Основная задача линейного программирования

Этап 1

Просматривается дополнительная строка снизу, где записаны разности. Если все эти разности меньше, либо равны нулю, то план является оптимальным

Page 6: Основная задача линейного программирования

Этап 2

Если есть столбцы, где в нижней строке есть величина больше нуля, то выбирается столбец с максимальным значением этой величины. Индекс j определит вектор, вводимый в базис.

Пусть max(zj-cj)=zl-cl, то есть в базис надо вводить переменную xl. Назовем столбец, соответствующий этой переменной, направляющим столбцом. В дальнейшем мы будем направляющий столбец помечать символом ⇒.

Page 7: Основная задача линейного программирования

Этап 3

Просматривается направляющий столбец. Если все ail<0, то значения целевой функции неограничены снизу. Если есть ail>0, то находится min(i)(xi/ail), где просматриваются лишь те дроби, для которых ail>0.

Пусть этот минимум достигается для akl. Тогда именно переменная xk подлежит выводу из базиса. Строка, соответствующая этой переменной, называется направляющей строкой. В дальнейшем в примерах мы будем помечать ее символом ⇑.

Page 8: Основная задача линейного программирования

Этап 4

После того, как определены направляющие столбец и строка, начинает заполняться новая симплекс-таблица, в которой на месте направляющей строки будет стоять переменная xl. Обычно заполнение этой новой таблицы начинается именно с направляющей строки. В качестве компоненты опорного плана туда пишется величина xk/akl.

Остальные элементы этой строки заполняются величинами a’lj=akj/akl.

Page 9: Основная задача линейного программирования

Этап 4

Обратите внимание на особую роль элемента akl, стоящего на пересечении направляющей строки и направляющего столбца. Именно на него делятся все бывшие элементы направляющей строки. На месте бывшего элемента автоматически появляется единица.

Написанные выше формулы для пересчета элементов направляющей строки можно записать следующим правилом:

akl

Page 10: Основная задача линейного программирования

Этап 5

Далее начинается пересчет всех остальных строк таблицы, включая и дополнительную нижнюю строку для компонент плана; для координат разложения по базису; для дополнительной строки по следующему правилу

Далее итерации продолжаются.

Page 11: Основная задача линейного программирования

Пример

Решить задачу линейного программирования

Page 12: Основная задача линейного программирования

Исходная симплекс-таблица

Базис с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

Page 13: Основная задача линейного программирования

Пример

Обратите внимание на то, что из-за специфического вида системы ограничений в столбец "план" просто переписался вектор свободных членов системы ограничений.

Ну, а величины z0 и zj-cj приходится считать:

Page 14: Основная задача линейного программирования

Первая итерация

Просматривая дополнительную строку мы видим, что в ней всего один положительный элемент - в столбце, соответствующем переменной x3. Следовательно, эту переменную надо вводить в базис и этот столбец и будет направляющим столбцом.

В этом направляющем столбце есть два положительных числа - 4 и 3. Поэтому нужно рассмотреть два частных 12/4 и 10/3 и выбрать из них наименьшее. Так как min ((12/4), (10/3))=3 и он достигается на a43=4 , то этот вектор подлежит выводу из базиса и соответствующая ему строка и будет направляющей строкой.

Заполним теперь новую симплекс-таблицу, следуя сформулированным выше правилам.

Начинается заполнение, естественно, со второй строки (так как она была направляющей), а затем пересчитываются все остальные строки.

Page 15: Основная задача линейного программирования

Полученная симплекс-таблица

Базис с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

Page 16: Основная задача линейного программирования

Вторая итерация

Просматривая дополнительную строку мы вновь видим в ней всего один положительный элемент это 1/2, стоящая в столбце x2. Следовательно, этот вектор надо ввести в базис и этот столбец будет направляющим.

В столбце, соответствующем x2, всего один положительный элемент это 5/2в первой строке. Поэтому первая строка будет направляющей и переменная x1 должна быть выведена из базиса.

Page 17: Основная задача линейного программирования

Новая симплекс-таблица

Базис с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