Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СА_пособие.doc
Скачиваний:
34
Добавлен:
28.04.2019
Размер:
2.19 Mб
Скачать

5.3. Решение задач линейного программирования

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

Метод полного исключения. Перейдем к изложению методов решения задач линейного программирования. Рассмотрим вначале один из вспомогательных методов, иллюстрирующий возможность преобра­зования системы линейных уравнений, а именно, приведения матрицы, составленной из параметров уравнений ограничений, к единичному виду. Обозначим свободные коэффициенты ограничений aj0 =bj.

Пусть имеется система ограничений в виде

Метод полного исключения состоит из конечного числа однотипных шагов и заключается в приведении матрицы А к единичному виду. Метод основан на следующих двух операциях.

Одну из строк расширенной матрицы умножают на число, отлич­ное от нуля.

Из каждой строки расширенной матрицы (Аp ) вычитают данную строку. Каждое такое преобразование называется преобразованием Гаусса. В результате получаем новую систему линейных уравнений, эквивалентную исходной.

Рассмотрим более подробно метод полного исключения.

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

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

Пример применения метода полного исключения. Рассмот­рим пример применения метода полного исключения Гаусса для иссле­дования системы уравнений

Расширенная матрица имеет вид

Первый шаг. В качестве первого направляющего элемента возьмем a11=1. Умножив первую строку матрицы А на 2, вычтем результат из второго уравнения и, умножив на 4, вычтем результат из третьего урав­нения; получим

Второй шаг. Поскольку главная часть матрицы Аз(1) содержит от­личные от нуля элементы, продолжим процесс исключения. Выберем элемент а22(1)= -3 в качестве направляющего элемента на втором шаге преобразования. Разделим вторую строку на -3, получим

Далее умножим вторую строку на 2 и вычтем результат из первой строки, умножим вторую строку на -3, результат вычтем из третьей строки, в итоге

Как видим, главная часть матрицы А(2)p, состоящая из элементов a33(2) и a34(2) содержит только нули. Следовательно, процесс исключения заканчивается. Исследуем матрицу А(2). Поскольку третья строка со­держит только нулевые элементы, это свидетельствует о том, что на­чальные уравнения были зависимыми, и, следовательно, она может быть отброшена. Тогда эквивалентная матрица системы уравнений будет выглядеть следующим образом:

Теперь можно записать базисное решение

х1 =1; х2 = 1; х3 = 0; х4 - 0,

а также соответствующее общее решение

где - произвольные скаляры.

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

где ei - единичный базис, для всех i= 1, 2,..,m.

Будем применять метод полного исключения к расширенной мат­рице ограничений. Выбираем направляющий элемент аij на данной ите­рации. В результате преобразования Гаусса, методика которого была только что описана, получим новые значения коэффициентов:

еслиL≠i, L= 1, 2,...,m

Преобразование Гаусса называется симплексным преобразовани­ем, когда направляющий элемент определяют по следующим правилам:

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

  • направляющую строку выбирают так, чтобы отношение ai0/aij было минимальным при условии, что аij> 0.

Задачи линейного программирования, решаемые с помощью симп­лекс-метода, основываются на представлении решения в табличной форме. Рассмотрим последовательность действий при решении зада­чи линейного программирования.

Пусть имеются линейная форма

и ограничения

Приведем матрицу ограничений к каноническому виду:

На следующем шаге составим таблицу (таблица 5.1). Нижняя строка элементов называется индексной. Элементы индексной строки вычисляются следующим образом: означает номер соответствующей строки. Поскольку на первом шаге заполнения таблицы все элементы с +. рав­ны нулю, то элементам индексной строки присваиваются значения со­ответствующих элементов целевой функции данного столбца, взятые с обратным знаком, т.е. a0k = -Ск. Последняя строка таблицы служит для определения направляющего столбца.

Таблица 5.1

С

С1

С2

С3

Сj

Сп

0

0

Bx

А0

А1

А2

Аз

Аj

Ап

Аn+1

Ап+т

Сn+1

Xn+1

a10

a11

a12

a13

a1j

a1n

1

0

Сn+2

Xn+2

a20

a21

a22

a23

a2j

a2n

0

0

Сn+i

Xn+i

ai0

ai1

ai2

ai3

aij

ain

0

0

Сn+m

Xn+m

am0

am1

am2

am3

amj

amn

0

1

a00

a01

a02

a03

...

a0j

a0n

a0m+1

a0m+n

Элемент а00 равен значению целевой функции, которое вычисляется по формуле а00 = , k - номер базисной переменной (индек­сация идет по строкам таблицы).

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

В столбец С записываются коэффициенты при хп+к, на первом шаге значения этих коэффициентов равны нулю.

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

  • в качестве направляющего столбца выбирают столбец Аj, для ко­торого выполняется условие при a0l <0, т.е. выбирается минимальный элемент, при условии, что этот элемент от­рицательный;

  • выбирают направляющую строку, для чего каждый элемент стол­бца свободных членов делится на соответствующий элемент направ­ляющего столбца, элемент столбца свободных членов находится в од­ной строке с элементом направляющего столбца - . Из всех возможных соотношений выбирается минимальное = min > при условии, что arj>0,1≤rm.

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

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

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

  1. Для всех элементов направляющей строки

где к - номер шага (к = 1, 2,...); i - номер направляющей строки;

у - номер направляющего столбца; , т.е. все элементы направ­ляющей строки делим на направляющий элемент, в итоге направляю­щий элемент стал равным единице; аr,j(k+1) = 1.

2. В направляющем столбце необходимо получить аr,j(k+1) =0, для всех при аij(k+1) = 1, т.е. в направляющем столбце должны быть все нули кроме направляющего элемента, который равен единице.

Для всех остальных элементов, включая индексную строку, произ­водим вычисления

Симплексные преобразования повторяют до тех пор, пока не реа­лизуется один из двух возможных исходов:

а) все а0i>0 – это условие оптимальности базиса последней таб­лицы;

б) найдется такой элемент а0j< 0, при котором все элементы стол­бца аrj < 0, - это признак неограниченности целевой функции на множе­стве допустимых решений.

Пример решения задачи линейного программирования. Рас­смотрим задачу линейного программирования в следующем виде: найти максимум линейной формы 4x1 + Зх2 при ограничениях х1 < 4000, х2 < 6000, х1+ < 6000, х12> 0.

Каноническая форма задачи линейного программирования будет иметь вид

1 +3x2 +0x3 +0x4 +0x5 —> max;

1х1 +0x2 + 0x3+0x4 + 0x5 = 4000;

0x1+ 1x2 + 0x3 + lx4 + 0x5 = 6000;

1x1 + x2 +0x3 +0x4 +1x5 =6000

Составим исходную симплекс-таблицу (таблицу 5.2).

Таблица 5.2

Ci

4

3

0

0

0

Bx

A0

A1

A2

A3

A4

A05

0

Х3

4000

1

0

1

0

0

0

Х4

6000

0

1

0

1

0

0

Х5

6000

1

2

3

0

0

1

0

-4

-3

0

0

0

Поскольку -4 < -3 < 0, то в качестве направляющего выбираем первый столбец. Составив отношение вида определяем направляющую строку. Для этого находим минимальное отношение. Следовательно, направляющая строка - первая, направляющий элемент – a11=1. Применив первый шаг симп­лексного преобразования, получим новую таблицу.

Таблица 5.3

Ci

4

3

0

0

0

Bx

A0

A1

A2

A3

A4

A05

4

Х3

4000

1

0

1

0

0

0

Х4

6000

0

1

0

1

0

0

Х5

2000

0

2

3

-1

0

1

16000

0

-3

4

0

0

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

Таблица 5.4

С1

4

3

0

0

0

Bx

А0

А1

А2

Аз

А4

А5

4

X1

4000

1

0

1

0

0

0

X4

3000

0

0

3

2

1

3

X2

3000

0

1

0

3

2

25000

0

0

0

9

2

Так как а03 = < 0, то направляющий столбец А3 направляющая строка - вторая, направляющий элемент а23 = -.

Выполним очередной шаг преобразования, получим еще одну таблицу (таблица 5.5).

Таблица 5.5

С1

4

3

0

0

0

Bx

А0

А1

А2

Аз

А4

А5

4

X1

2000

1

0

0

1

0

X4

2000

0

0

1

-1

3

X2

6000

0

1

0

1

0

26000

0

0

0

4

Поскольку в индексной строке все элементы положительны, это означает, что найдено оптимальное решение х10 = 2000, х20 = 6000, х30 = 2000. Искомое значение целевой функции равно 4 х1 + Зх2= 26000.

5.4. Метод искусственных переменных

Рассмотрим задачу линейного программирования, в которой огра­ничения имеют вид . Если все , i= 1, 2,..., т, то свободные векторы, образующие единичную подматрицу, составляют начальный базис, а соответствующие им переменные - начальное базисное реше­ние.

В более общем случае, когда ряд неравенств имеет знак «больше или равно», например, ai1x1+ai2x2+.. .+аinп bi, i= 1, 2,..., т, для приве­дения их к стандартной канонической форме свободные переменные надо вычесть. Тогда расширенная форма задачи имеет вид

Свободные переменные {xn+1, xn+2,..., xn+m} уже нельзя использовать в качестве начального базиса, так как х n+1 < 0, х n+2 < 0,..., хn+m < 0.

С целью формирования начального базиса в уравнения допол­нительно вводят искусственные переменные xn+m+1 xn+m+2,..., xn+m+k, которые не имеют ничего общего с реальной задачей, и должны быть выведены из базиса как можно скорее. Чтобы гарантировать их быст­рое выведение после начала итераций для задач максимизации, искус­ственным переменным в целевой функции приписывают очень большие по величине отрицательные коэффициенты (-М). В случае решения задач минимизации искусственные переменные вво­дят в целевую функцию с большими по величине положительными ко­эффициентами (+M).

Знаки вводимых в ограничения искусственных переменных xn+m+1 xn+m+2,..., xn+m+k должны совпадать со знаками соответствующих сво­бодных членов. Искусственные переменные образуют начальное ба­зисное решение. Применив симплекс-метод, решают задачу по выве­дению из базиса всех искусственных переменных. Если доказано, что от искусственных переменных избавиться нельзя, то это означает, что задача не имеет решения, т.е. ограничения задачи противоречивы.

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

Требуется минимизировать линейную форму вида

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

Вводя свободные переменные x3 ,х4, х5 приходим к расширенной форме задачи

Переменные х3, х4, х5 образуют недопустимое базисное решение

х = -6 < 0, x= -6 < 0, х = -1 < 0,

поэтому вводим в ограничения и в целевую функцию искусственные пе­ременные х6, x7 ,x8. Получим следующую запись задачи:

Очевидно, начальное базисное решение

Поскольку образуют единичный базис, а все ai0> 0, то для решения применим метод симплекс-таблиц. Исходная таблица имеет следующий вид (таблица 5.6).

Таблица 5.6

Первая итерация. Элементы индексной строки вычисляем сле­дующим образом: означает номер соответству­ющей строки

Поскольку решается задача минимизации, то направляющий стол­бец определяют по наибольшему положительному элементу индексной строки: a0jaх{а >0}. Направляющий столбец – А1; направля­ющая строка - вторая. Выполним один шаг преобразования. Разделим направляющую строку на направляющий элемент равный 6. Умножив пре­образованную направляющую строку на 3, вычтем ее из первой. Тре­тья строка остается без изменений, поскольку элемент направляюще­го столбца для нее равен нулю. Затем, умножив преобразованную на­правляющую строку на (9М-15), вычтем ее из индексной. В результа­те получим таблицу 5.7.

Таблица 5.7

Вторая итерация. Так как а02 = , т.е. являет­ся максимальным элементом из всех элементов индексной строки, то направляющий столбец - А2; направляющая строка - третья. Направ­ляющий элемент а82 = 1.

Выполним шаг симплекс-преобразования. Умножив направляющую строку на 1 , вычтем ее из первой строки. Затем, умножив направляющую строку на , вычтем ее из второй и, наконец, умножив направляющую строку на , вычтем ее из первой строки. Получим таблицу 5.8.

Таблица 5.8

Третья итерация. Поскольку а05 = , то направ­ляющий столбец – А5 Направляющая строка - первая, направляющий элемент а65 = 1 . Выполнив очередной шаг симплекс-преобразования, выведем из базиса последнюю искусственную переменную х6 и введем х5 .

Таким образом, приходим к таблице следующего вида (таблица 5.9).

Таблица 5.9

Четвертая итерация. Обратим внимание, что в этой таблице все искусственные переменные выведены из базиса. Направляющий стол­бец 4, направляющая строка - первая, направляющий элемент а14 = . Выполнив еще один шаг симплекс-преобразования, получим таблицу 5.10.

Таблица 5.10

Поскольку в индексной строке все оценки , то найдено оптимальное решение

.

Искомое значение целевой функции a00= min z = 53.

Проверим это: min(15x1+33x2) = 15x1 опт +33 x2опт = 53.

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