Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция по линейному прграммированию.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
999.94 Кб
Скачать

Алгоритм симплекс-метода

Этот алгоритм целесообразно рассмотреть на конкретном примере.

Пример. Решить симплекс-методом следующую ЗЛП:

(1)

(2)

(3)

Эта задача относится к задаче об использовании ресурсов. Здесь в качестве свободных членов в правой части нетривиальных ограничений стоят запасы сырья трех видов. Такая задача удобна тем, что каноническая форма совпадает с симплексной, и не нужно прибегать к специальным приемам для её получения. Исходная задача в каноническом виде выглядит так:

(4)

(5)

(6)

Систему отграничений-равенств можно записать в векторной форме

+ + + + = ,

где = ; = ; = ; = ; = ; = .

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

Для решения задачи (4)-(6) симплекс - методом необходимо иметь опорный план, т.е. допустимое базисное решение системы (5). Для этого все векторы надо разделить на две группы – базисные и свободные. Сначала выбираем базисные. Поскольку нетривиальных ограничений всего три, то и базисных векторов будет тоже три. В качестве базисных выбирают вектора, имеющие предпочтительный вид, т.е. в данном случае , и . Им соответствуют базисные переменные х3, х4, х5 системы (5). Остальные переменные (х1 и х2 ) будут свободными. При получении базисного решения все свободные переменные приравниваются к нулю. Подставив в (5) х1= х2=0, легко получаем остальные компоненты опорного плана:

х3 = 400; х4 = 900; х5 = 600.

В векторном виде этот опорный план выглядит так:

= ( 0 ; 0 ; 400 ; 900 ; 600 ).

Подставив компоненты в целевую функцию (4), получим значение целевой функции для этого плана:

Z ( )=0.

Теперь составим первоначальную симплексную таблицу:

Сб

Б

0

60

40

0

0

0

0

400

2

1

1

0

0

=200

0

900

3

4

0

1

0

=300

0

600

1

3

0

0

1

=600

zj - cj

0

- 60

- 40

0

0

0

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

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

Последний столбец рассмотрим позже.

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

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

Найдем эту пару векторов. Сначала определим вектор, который войдет в базис. Это должен быть один из свободных векторов, т.е. или . Выбираем тот вектор, которому в индексной строке соответствует самое отрицательное число (-60, обведено пунктиром). Значит, вектор становится базисным.

Теперь определим вектор, “покидающий” базис. Это делается с помощью симплексных отношений, обозначенных в последнем столбце симплекс–таблицы. Как видно из заголовка столбца, числителем симплексного отношения является свободный член ограничения, а знаменателем – положительные коэффициенты ведущего столбца, т.е. столбца (вектора, который теперь войдет в базис). Строка, в которой находится минимальное симплексное отношение, называется ведущей строкой. В той же строке находится вектор , покидающий наш первоначальный базис. Только при этом условии гарантируется неотрицательность свободных членов при пересчете таблицы. Отметим также, что при симплексные отношения являются недопустимыми или не существуют; их не следует рассматривать при определении минимального отношения.

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

Теперь приступим к пересчету таблицы. Это делается в три этапа. Сначала ведущая строка делится на ведущий элемент:

Сб

Б

0

60

40

0

0

0

60

200

1

0

0

0

0

zj - cj

Обратите внимание, что во втором столбце вместо уже стоит новый базисный вектор с коэффициентом 60 в столбце Сб.

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

Сб

Б

0

60

40

0

0

0

60

200

1

0

0

0

0

1

0

0

0

0

1

zj - cj

0

0

0

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

Чтобы сформулировать это правило, снова посмотрим на первоначальную симплекс-таблицу. Обратите внимание, что оставшиеся неизвестными элементы новой таблицы в первоначальной таблице соответствуют элементам, стоящим наискосок к ведущему элементу (поскольку ведущая строка и ведущий столбец уже построены).

Для любого элемента первоначальной таблицы можно определить прямоугольник

а* В

А а

Здесь - ведущий элемент, а - искомый элемент, А, В – элементы, находящиеся с ними на пересечении строк и столбцов.

Н овое значение элемента а получается из формулы:

Это и есть правило прямоугольника.

Например, для прямоугольника, обозначенного в первоначальной таблице, в новой таблице получаем значение:

0 - = -

Все остальные значения пересчитываются аналогично. Получаем таблицу первой итерации симплекс-метода:

Сб

Б

0

60

40

0

0

0

60

200

1

0

0

400

0

300

0

- 1,5

1

0

=120

0

400

0

-

0

1

160

zj - cj

12000

0

- 10

30

0

0

Произошел переход к новому базису: , , . При этом переменные х2, х3 являются свободными, и в опорном плане их значения равны нулю. Значения остальных переменных получаем из нового столбца свободных членов:

х1 = 200; х4 = 300; х5 = 400.

Запишем опорный план в векторной форме:

= ( 200 ; 0 ; 0 ; 300 ; 400 ).

Этому плану соответствует значение целевой функции, равное 12000 (проверьте подстановкой компонент в выражение (4)). В новой таблице это значение зафиксировано в индексной строке в столбце свободных членов.

Как видим, в индексной строке остался один отрицательный элемент, поэтому полученный план не является оптимальным. Значение -10 находится в столбце , поэтому войдет в новый базис. Минимальное симплексное отношение достигается в строке базисного вектора , который выходит из базиса.

Теперь пересчитываем таблицу первой итерации и получаем таблицу второй итерации:

Сб

Б

0

60

40

0

0

0

60

140

1

0

4/5

- 1/5

0

40

120

0

1

- 3/5

2/5

0

0

100

0

0

1

- 1

1

zj - cj

13200

0

0

24

4

0

Аналогично определяем новый опорный план:

= ( 140 ; 120 ; 0 ; 0 ; 100 ).

Ему соответствует значение целевой функции, равное 13200. Поскольку в индексной строке уже нет отрицательных элементов, план является оптимальным:

; =13200.

Итак, задача линейного программирования решена.