Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций ЭММ.doc
Скачиваний:
24
Добавлен:
17.11.2018
Размер:
2.35 Mб
Скачать

3.2. Симплекс-метод решения задач линейного программи­рования

Выпишем еще раз задачу линейного программирования в общем виде:

z = с1x1 + …+ сnxn " min (max) (1)

a11x1 + …+ a1nxn £ (= ³) b1,

… (2)

am1x1 + …+ amnxn £ (= ³) bm;

x1 ³ 0, …, xn ³ 0. (3)

В матричной форме задача имеет вид (см. п. 2.1):

z = CX " min (max)

AX ≤ (= ³) B (4)

X ≥ 0.

Поскольку, как было показано в п. 3.1 решение задачи линейного программирования находится в одной из крайних (угловых) точек ОДЗ, важным вопросом является изучение не системы неравенств (2), а соответствующей системы уравнений AX = B, решение которой дает угловые точки ОДЗ.

В математике известно, что система из линейных уравнений, имеющих n переменных, имеет единственное решение тогда, когда количество уравнений тоже равно n (числу переменных) и уравнения линейно независимы. (Линейная независимость уравнений обозначает, что ни одно из уравнений нельзя выразить через линейную комбинацию остальных уравнений). Если число линейно независимых уравнений больше числа переменных – система несовместна и решения нет. Если число линейно независимых уравнений меньше числа переменных – решений бесконечное множество.

Следовательно, если уравнения системы АX = B независимы, то система имеет множество решений при n > m и единственное решение при n = m. При решении задачи линейного программирования симплекс-методом всегда будет выполняться n > m, поэтому для получения некоторого одного решения, «лишние» – m переменных приравниваются нулю.

Если приравнять к нулю n – m произвольных переменных (например, переменные xm+1, xm+2, …, xn) и, решив систему, найти значения оставшихся m переменных (x1x2, …, xm), то такое решение называется базисным.

Если нулю приравнять некоторые другие  m переменных – получим другое базисное решение. Любое базисное решение, у которого все переменные неотрицательные называется допустимым базисным решением.

Переменные, которые были приравнены нулю, называются небазисными. Оставшиеся т переменных, значение которых получены из решения системы, называются базисными.

Допустимое базисное решение представляет собой угловую вершину ОДЗ.

Решение задачи симплекс-методом сводится к направленному перебору смежных друг с другом угловых точек, которые представляют собой допустимые базисные решения.

Сформулируем в общем виде алгоритм симплекс-метода:

1: Приведение задачи к стандартной форме. Стандартной формой задачи линейного программирования будем называть задачу, у которой все ограничения записаны как равенства и при этом правые части ограничений неотрицательны.

2: Выделение исходного базисного решения (по возможности из стандартной формы). То есть определение тех переменных  m переменных, которые приравниваются нулю и нахождение значений оставшихся базисных переменных.

3: Определение, является ли полученное базисное решение оптимальным, если да, то решение окончено, иначе переходим к шагу 4.

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

5: Использование эквивалентных преобразований методом Жордана-Гаусса для нахождения нового допустимого базисного решения. Переход к шагу 3.

Чтобы привести задачу линейного программирования к стандартной форме необходимо:

1. Убедиться, что во всех ограничениях правые части bi неотрицательны. Если есть отрицательные правые части ограничений, такие ограничения нужно умножить на –1 (при этом учесть, что в ограничениях типа  или  знак ограничения изменится на противоположный).

2. К левой части ограничений типа  нужно прибавить новую, дополняющую переменную S, которая уравнивала бы левую и правую часть и показывала бы насколько левая часть ограничения меньше правой.

То есть ограничение

ai1x1 + …+ ainxn £ bi

в стандартном виде будет выглядеть так:

ai1x1 + …+ ainxn + Si = bi.

3. Из левой части ограничений типа  нужно вычесть новую, избыточную переменную e, которая уравнивала бы левую и правую часть и показывала бы насколько левая часть ограничения больше правой.

То есть ограничение

ai1x1 + …+ ainxnbi

в стандартном виде будет выглядеть так:

ai1x1 + …+ ainxnei = bi.

Дополняющие переменные S и избыточные e будем называть вспомогательными, в то время, как переменные xосновными.

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

Действительно, рассмотрим систему ограничений типа £, состоящую для определенности из трех уравнений и четырех переменных:

a11x1 + a12x2 + a13x3 + a14x4 £ b1,

a21x1 + a22x2 + a23x3 + a24x4 £ b2,

a31x1 + a32x2 + a33x3 + a34x4 £ b3.

В стандартном виде эта система будет выглядеть так:

a11x1 + a12x2 + a13x3 + a14x4 + S1 = b1,

a21x1 + a22x2 + a23x3 + a24x4 + S2 = b2,

a31x1 + a32x2 + a33x3 + a34x4 + S3 = b3.

Имеем систему из трех уравнений и семи переменных. Среди всех переменных нужно выбрать только три базисных. Возьмем в качестве базисных переменные S1, S2, S3 (каждая из них входит только в одно из уравнений и имеет коэффициент 1). Тогда остальные переменные (x1, x2, x3, x4) – небазисные и равны нулю. В этом случае базисное решение очевидно:

S1 = b1,

S2 = b2,

S3 = b3.

Если же в качестве базисных переменных мы взяли другие, например, x1x2x3, тогда небазисными были бы переменные x4, S1, S2, S3, но в этом случае базисное решение было бы не очевидным, так как для его получения необходимо было бы решить систему:

a11x1 + a12x2 + a13x3 = b1,

a21x1 + a22x2 + a23x3 = b2,

a31x1 + a32x2 + a33x3 = b3.

Таким образом, в качестве исходных базисных переменных в задачах с ограничениями  удобно брать переменные S1, …, Sn.

Реализацию алгоритма симплекс-метода проиллюстрируем на следующем примере.

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

Таблица 3.1 – Исходные данные к примеру 3.2

Ресурсы

Шкаф

Стол

Стул

Древесина

8 м2

6 м2

1 м2

Отделочные работы

4 часа

2 часа

1,5 часа

Столярные работы

2 часа

1,5 часа

0,5 часа

В распоряжении фабрики ежедневно имеется 48 м2 древесины, 20 часов времени на участке отделки, 8 часов на столярном участке. Известно также, что потребность в шкафах и стульях неограниченна. Однако не более 5 столов может быть продано ежедневно. Цены реализации продукции следующие: шкаф – 60 у.е., стол – 30 у.е., стул – 20 у.е.

Мебельная фабрика хотела бы использовать имеющиеся ресурсы наилучшим образом, приносящим наивысший доход.

Построим математическую модель. Обозначим х1 – количество производимых шкафов, х2 – число столов, х3 – количество стульев.

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

1) Целевая функция

2) Система ограничений

3) Ограничения на знак переменных

х1, х2, х3 0 .

Преобразуем модель к стандартной форме:

(5)

В качестве исходного базиса, очевидно, удобно выбрать переменные S1, S2, S3, S4, так как очевидно базисное решение:

S1 = 48, S2 = 20, S3 = 8, S4 = 5.

Говорят, что векторы S1, S2, S3, S4 образуют базис системы (5)

S1, S2, S3, S4

Дальнейшие шаги алгоритма симплекс-метода (шаг 3, 4, 5) удобно представить в специальной таблице, называемой симплекс-таблицей.

Построим первую симплекс-таблицу. В первом столбце укажем переменные, образующие базис, во втором столбце (cj) – коэффициенты целевой функции, при переменных, входящих в базис. В третьем столбце (bi) – правые части ограничений. В остальных столбцах (x1, x2, …, S4) записываются коэффициенты целевой функции и коэффициенты в ограничениях при соответствующих переменных.

Последняя строка симплекс-таблицы () особая. Она получается из целевой функции следующим образом. В целевой функции все переменные переносятся в левую часть. Получается . Полученные коэффициенты и правая часть целевой функции (0) записывается по аналогии с коэффициентами ограничений: в столбце bi – правая часть целевой функции, которая изначально равна нулю, в остальных столбцах – обратные значения коэффициентов целевой функции (–сj) при соответствующих переменных.

Таким образом, исходная симплекс-таблица имеет вид:

Таблица 3.2 – Исходная симплекс-таблица к примеру 3.2

Базис

cj

х1

х2

х3

S1

S2

S3

S4

с.о.

60

30

20

0

0

0

0

  1. S1

0

48

8

6

1

1

0

0

0

48:8 = 6

  1. S2

0

20

4

2

3/2

0

1

0

0

20:4 = 5

  1. S3

0

8

2

3/2

1/2

0

0

1

0

8:2 = 4

  1. S4

0

5

0

1

0

0

0

0

1

0

-60

-30

-20

0

0

0

0

max

Заметим, что столбец отражает не только правые части ограничений, он также показывает значение базисных переменных S1, …, S4. (Напомним, что значение небазисных переменных х1, х2, х3 равно нулю.) Тот же столбец в строке целевой функции отражает значение целевой функции при данном базисном решении. Ведь, действительно, целевая функция Z при х1 = х= х3 = 0, тоже равна нулю.

Последняя строка таблицы называется строкой целевой функции или индексной строкой.

Признаком оптимальности в задаче на максимум является наличие в индексной строке всех неотрицательных значений. В нашем примере индексная строка содержит отрицательные элементы (–60, –30, –20). Следовательно, текущее базисное решение неоптимально и его нужно улучшать.

В случае если решается задача на минимум, можно использовать один из двух вариантов:

1) умножить целевую функцию на –1 и решать задачу не на минимум, а на максимум;

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

Определив, что текущее базисное решение неоптимально, нужно выяснить какую из небазисных переменных х1, х2, х3 нужно включить в базис. Коэффициент –60 в индексной строке показывает, что при введении в базис переменной x1 в базис со значением 1, целевая функция улучшится на 60 единиц. При введении в базис x2 со значением 1, ЦФ улучшится на 30 единиц. При введении в базис x3 – на 20.

Наилучший прирост целевой функции дает введение в базис переменной x1.

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

Рассуждая аналогично, при решении задачи на минимум, используя вариант 2), в базис войдет та переменная, которая имеет положительное значение в индексной строке и из всех положительных значений, оно наибольшее.

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

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

Рассмотрим текущую систему уравнений при введении x1 в базис:

Предположим, что базис покинет S1, тогда если S1 = 0, из первого уравнения x1 = 48/8 = 6. То есть x1 должно войти в базис со значением 6.

Однако, это невозможно: подставим x1 = 6 во второе уравнение, получим 4∙6 + S2 = 20  S2 = –4. Но S2 по определению не может быть отрицательной. Такой базис недопустимый.

Предположим, что базис покинет S2, тогда если S2 = 0, из второго уравнения x1 = 20/4 = 5. То есть x1 должно войти в базис со значением 5.

Однако, и это невозможно: подставим x1 = 5 в третье уравнение, получим 2∙5 + S3 = 8  S2 = –2. Но S3 не может быть отрицательной.

Пусть, базис покинет S3, тогда если S3 = 0, из третьего уравнения x1 = 8/2 = 4. Подставив это значение в первое уравнение, получим, 32 + S1 = 48  S1 = 16, что допустимо. Подставив это значение во второе уравнение, получим, 16 + S2 = 20  S2 = 4, что тоже допустимо. На значение переменной S4 значение переменной x1 не влияет, так как x1 не входит в четвертое уравнение (входит с коэффициентом ноль).

Заметим, что переменная S4 не может покинуть базис, так как иначе при S4 = 0 в четвертом уравнении получим противоречие 0 = 5.

Таким образом, для определения того, какая переменная покинет базис, необходимо рассчитать отношения , где bi – значения коэффициентов правых частей ограничений в столбце bi симплекс-таблицы, aij – значения разрешающего столбца ( j):

48:8 = 6; 20:4 =5; 8:2 = 4.

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

Из полученных неотрицательных симплексных отношений выбираем наименьшее. В нашем случае наименьшее симплексное отношение получается в строке 3) S3, следовательно, переменная S3 покинет базис, а данная строка будет разрешающей строкой.

Элемент, стоящий на пересечении разрешающего столбца и разрешающей строки также называется разрешающим элементом.

Вместо S3 в третью строку новой симплекс-таблицы войдет х1 с коэффициентом cj равным 60, т.к. 60 – коэффициент целевой функции при x1.

Разрешающий столбец , который сейчас имеет вид

, нужно преобразовать к виду ,

то есть к такому же виду, какой имел столбец S3 в таблице 3.2.

Воспользуемся методом Жордана-Гаусса.

На месте разрешающего элемента нужно получить единицу. Следовательно, всю разрешающую строку (кроме столбца сj) нужно разделить на разрешающий элемент.

Строку 3) х1 разделим на 2, она примет вид:

3)

4

1

3/4

1/4

0

0

1/2

0

Строку 4) S4 переносим из первой симплекс-таблицы во вторую без изменений, так как в столбце х1 уже находится нулевой элемент.

Строку 1) S1 необходимо обновить таким образом, чтобы в столбце х1 был коэффициент 0. Для этого из строки S1 следует вычесть строку х1, умноженную на 8.

1) S1

1

S1-8х1

48

8

6

1

1

0

0

0

-32

-8

-6

-2

0

0

-4

0

16

0

0

-1

1

0

-4

0

Со строкой 2) S2 поступаем аналогично (из строки S2 следует вычесть 4 строки ):

2) S2

1

S2-4х1

20

4

2

3/4

0

1

0

0

-16

-4

-3

-1

0

0

-2

0

4

0

-1

1/2

0

1

-2

0

Для обновления строки к ней необходимо прибавить 60 строк .

0

-60

-30

-20

0

0

0

0

240

60

45

15

0

0

30

0

240

0

15

-5

0

0

30

0

Заполним вторую симплекс-таблицу.

Таблица 3.3 – Вторая симплекс-таблица к примеру 3.2

Базис

cj

х1

х2

х3

S1

S2

S3

S4

с. о.

60

30

20

0

0

0

0

1) S1

0

16

0

0

-1

1

0

-4

0

2) S2

0

4

0

-1

1/2

0

1

-2

0

8

3) х1

60

4

1

3/4

1/4

0

0

1/2

0

16

4) S4

0

5

0

1

0

0

0

0

1

240

0

15

-5

0

0

30

0

max

Из таблицы видно, что полученное новое базисное решение стало лучше предыдущего: выпуск 4 шкафов (x1 = 4) позволяет получить уже 240 у.е. дохода. Однако, это решение не оптимальное. Это видно из индексной строки таблицы: требование оптимальности не выполнено, так как имеется отрицательный элемент (–5). Будем улучшать план. В качестве разрешающего столбца теперь выбираем столбец , так как он содержит отрицательный элемент (–5). Разрешающую строку выберем, как и ранее, используя симплексное отношение (16 не делим на (-1), так как отрицательные значения не рассматриваются):

4: = 8; 4: = 16.

Из полученных симплексных отношений выбираем наименьшее, следовательно, в качестве разрешающей строки выбираем вторую строку. Переменная х3 вытесняет S2 из базиса. Вновь используем метод Жордана-Гаусса, добиваемся того, чтобы столбец х3 имел вид:

.

Обновляем в табл. 3.3. строки 1) S1, 2) х3, 3) х1, 5) . Значения разрешающей строки 2) S2 умножаются на 2, т.к. разрешающий элемент 1/2, а надо иметь разрешающим элементом 1, и вместо переменной S2 записывается переменная :

2) х3

8

0

-2

1

0

2

-4

0

Для обновления строки 1) S1 необходимо к ней прибавить одну разрешающую строку , так как вместо элемента –1 нужно получить значение, равное 0.

1) S1

S13

16

0

0

-1

1

0

-4

0

8

0

-2

1

0

2

-4

0

24

0

-2

0

1

2

-8

0

Аналогично для строки 3) , вместо элемента 1/4 в обновленной строке должен быть нуль. Значит, от 1/4 надо вычесть 1/4. Из строки х1 вычитаем 1/4 разрешающей строки:

3)

4

1

3/4

1/4

0

0

1/2

0

2

0

-1/2

1/4

0

1/2

-1

0

2

1

5/4

0

0

-1/2

3/2

0

Строка 4) S4 переписывается без изменений, так как в разрешающем столбце у нее нулевое значение.

Для обновления строки к ней следует прибавить пять разрешающих строк .

Z

240

0

15

-5

0

0

30

0

40

0

-10

5

0

10

-20

0

280

0

5

0

0

10

10

0

Заполним итоговую симплекс-таблицу.

Таблица 3.4 – Итоговая симплекс-таблица к примеру 3.2

Базис

cj

х1

х2

х3

S1

S2

S3

S4

60

30

20

0

0

0

0

1) S1

0

24

0

-2

0

1

2

-8

0

2) х3

20

8

0

-2

1

0

2

-4

0

3) х1

60

2

1

5/4

0

0

-1/2

3/2

0

4) S4

0

5

0

1

0

0

0

0

1

280

0

5

0

0

10

10

0

В строке целевой функции все коэффициенты при переменных неотрицательны, следовательно, мы нашли оптимальное из допустимых решений. Базис образуют переменные , то есть для получения максимального дохода следует выпускать продукцию и , так как переменная не входит в базис (а значит равна нулю). В столбце имеем оптимальные значения базисных переменных: x1 = 2, x3 = 8. Значения вспомогательных переменных S1 = 24, S4 = 5 можно интерпретировать следующим образом: 24 м2 древесины осталось не использовано, спрос на столы не удовлетворен на 5 единиц. Тот факт, что S2 = S3 = 0, говорит о том, что все ресурсы по участку отделки и столярному участку использованы полностью.

Целевая функция нашей задачи имеет вид:

.

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

Это же значение видно в последней симплекс-таблице на пересечении индексной строки и столбца .

Таким образом, наибольший доход 280 у.е. получается при производстве 2 единиц товара (шкафы) и 8 единиц товара (стулья).

Проанализируем полученное решение.

Каждая из вспомогательных переменных S1, …, S4 соответствовала одному из ограничений и показывала, насколько левая часть ограничения (фактические затраты ресурсов) меньше правой части (их запаса). Таким образом, в тех ограничениях, где левая часть равна правой (запас ресурсов исчерпан полностью), соответствующая вспомогательная переменная S будет равна нулю. Вспомним, что такое ограничение называется связующим и отражает критический (дефицитный) ресурс.

Запасы ресурсов на участке отделки и столярном участке использованы полностью S2 = S3 = 0. Древесина же осталось неиспользованной (S1 = 24). Если увеличить запас древесины (с 48 до, например, 68), приведет ли это к улучшению решения? Нет. Поскольку она и так осталась лишняя увеличение правой части несвязующего ограничения приведет к тому, что увеличится значение соответствующей вспомогательной переменной (станет S1 = 44), но оптимальный план не изменится.

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

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

Пример 3.3. Решить симплекс-методом задачу:

при ограничениях:

Приводим задачу к стандартному виду: второе ограничение умножаем на –1, чтобы в правой части было положительное значение, и в каждое из ограничений со знаком ≤ вводим добавочную переменную:

В качестве исходного базиса для каждого ограничения выбираем такую переменную, которая встречается только в этом ограничении и имеет коэффициент 1. Это переменные S1, S2, S3, x3. Однако, заметим, что переменная x3 входит в целевую функцию и ее из нее нужно исключить. Выпишем целевую функцию в виде Z – cj:

Z – 2x1 – 4x2 – x3 = 0.

К этому выражению прибавим четвертое ограничение, чтобы исключить переменную x3 из целевой функции. Получим:

Z – x1 – 4x2 = 8.

Число 8 в правой части полученного выражения отражает значение целевой функции при данном базисе.

Теперь построим симплексные таблицы и решим задачу.

Базис

cj

х1

х2

х3

S1

S2

S3

с. о.

2

4

1

0

0

0

1) S1

0

1

1

1

0

1

0

0

2) S2

0

3

–1

1

0

0

1

0

3

3) S3

0

3

1

0

0

0

0

1

4) x3

1

8

1

0

1

0

0

0

8

–1

4

0

0

0

0

max

Решение не оптимально, так как есть отрицательные значения в индексной строке. Переменная x2 должна войти в базис (она имеет наибольшее по модулю отрицательное значение в индексной строке). Покинуть базис должна переменная S2 (только для нее можно рассчитать неотрицательное симплекс-отношение).

Базис

cj

х1

х2

х3

S1

S2

S3

с. о.

2

4

1

0

0

0

1) S1

0

4

0

0

0

1

1

0

2) x2

4

3

1

1

0

0

1

0

3) S3

0

3

1

0

0

0

0

1

3

4) x3

1

8

1

0

1

0

0

0

8

20

5

0

0

0

4

0

max

Видим, что решение улучшилось (при x2 = 3, x1 = 8, Z = 20), однако решение не оптимально. Переменную x1 нужно ввести в базис. Покинет базис S3, так как у нее минимальное симплексное отношение.

Базис

cj

х1

х2

х3

S1

S2

S3

2

4

1

0

0

0

1) S1

0

4

0

0

0

1

1

0

2) x2

4

6

0

1

0

0

1

1

3) x1

0

3

1

0

0

0

0

1

4) x3

1

5

0

0

1

0

0

–1

35

0

0

0

0

4

5

Полученное решение (S1 = 4, x1 = 3, x2 = 6, x3 = 5) – оптимальное. При этом целевая функция принимает максимальное значение 35. Связующими являются второе, третье и четвертое ограничения (четвертое ограничение связующее, поскольку изначально было равенством, второе и третье – поскольку соответствующие переменные S2 и S3 не в базисе и равны нулю).

Числа 4 и 5 в индексной строке отражают теневые цены связующих ограничений 2 и 3 и показывают, насколько могло бы измениться решение (значение целевой функции), если изменить правую часть соответствующего ограничения на 1 единицу.