Решение задач линейного программирования (работа 3)

Министерство общего и профессионального образования

Российской Федерации

Воронежский Государственный Архитектурно – Строительный

Университет

Кафедра Экономики и управления строительством

ЛАБОРАТОРНАЯ РАБОТА

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

Выполнил:

Студент 4 курса

ФЗО ЭУС

Сидоров В.В.

Руководитель:

Богданов Д. А.

Воронеж – 2002 г.


ЛАБОРАТОРНАЯ РАБОТА № 11

РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ

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

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ

Стандартная задача линейного программирования состоит из трех частей:

целевой функции (на максимум или минимум) - формула (1.1), основных oграничений - формула (1.2), ограничений не отрицательности переменных (есть, нет) - формула (1.3)





i = 1,… m (1.2)



Алгоритм решения задач линейного программирования требует приведения их постановки в канонический вид, когда целевая функция стремится к максимуму (если стремилась к минимуму, то функцию надо умножить на -1, на станет стремиться к максимуму), основные ограничения имеют вид равенства (для приведения к равенствам в случае знака надо в правую часть каждогo такого k-го неравенства добавить искусственную переменную u>k> , а в случае знака , u>k> надо отнять ее из правой части основных ограничений), присутствуют ограничения не отрицательности переменных (если их нет для некоей переменной х>k>, то их можно ввести путем замены всех вхождений этой

переменной комбинацией x1>k> - х2>k> = х>k>, где х1>k> и х2>k> ). При этом для решения задачи линейного программирования необходимо иметь базис, т.е. набор переменных х>i>, в количестве, равным числу основных ограничений, причем чтобы каждая из этих переменных присутствовала лишь в одном основном oграничении и имела свой множитель а>ij> = 1. Если таких переменных нет, то они искусственно добавляются в основные ограничения и получают индексы х>m+1>, x>m+2> и т.д. Считается при этом, что они удовлетворяют условиям не отрицательности переменных. Заметим, что если базисные переменные (все) образуются в результате приведения задачи к каноническому виду, то целевая функция задачи остается без изменений, а если переменные добавляются искусственно к основным ограничениям, имеющим вид равенств, то из целевой функции вычитается их сумма, умноженная на М, т.е. (так называемый модифицированный симплекс-метод). Мы не будем рассматривать задачи, относящиеся к модифицированному симплекс-методу. Для практической рабо-ты по нахождению решения задачи линейного программирования (по варианту простого симплекс-метода) будут использоваться алгоритм итерационного (многошагового) процесса нахождения решения и два типа оперативных оце-нок, позволяющих делать переходы от одного шага к другому, а также показы-вающих, когда итерационный процесс остановится и результат будет найден.

Первая оценка - это дельта-оценка, для переменной х>j> она имеет вид:

(1.4)

З
десь выражение i B означает, что в качестве коэффициентов целевой функ-ции, представленных в сумме выражения (1.4), используются коэффициенты переменных, входящих в базис на данном шаге итерационного процесса. Пере-менными а>ij> являются множители матрицы коэффициентов А при основных ог-раничениях, рассчитанные на данном шаге итерационного процесса. Дельта-оценки рассчитываются по всем переменным х>i>, имеющимся в задаче. Следует отметить; что дельта-оценки базисных переменных равны нулю. После нахож-дения дельта-оценок из них выбирается наибольшая по модулю отрицательная оценка, переменная х>k>, ей соответствующая, будет вводиться в базис. Другой важной оценкой является тетта-оценка, имеющая вид:

(1.5)

Т.е. по номеру k, найденному по дельта-оценке, мы получаем выход на пере-менную х>k> и элементы столбца ХB делим на соответствующие (только положи

тельные) элементы столбца матрицы А, соответствующего переменой x>k>. Из полученных результатов выбираем минимальный, он и будет тетта-оценкой, а>i>-й элемент столбца B, лежащий в одной строке с тетта-оценкой, будет выво-диться из базиса, заменяясь элементом x>k>, полученным по дельта-оценке. Для осуществления такой замены нужно в i-ой строке k - гo столбца матрицы А сде-лать единицу, а в остальных элементах k-го столбца сделать нули. Такое преоб-разование и будет одним шагом итерационного процесса. Для осуществления такого преобразования используется метод Гаусса. В соответствии с ним i-я строка всей матрицы А, а также i-я координата ХB делятся на a>ik> (получаем единицу в i-ой строке вводимого в базис элемента). Затем вся i-я строка (если i не единица), а также i-я координата ХB умножаются на элемент (>1k>). После этого производится поэлементное суммирование чисел в соответствующих столбцах 1-ой и i-ой строк, суммируются также ХB>1>, и (>1k>)B>i>;. Аналогичные действия производятся для всех остальных строк кроме i-ой (базисной) строки. В результате получается, что в i-ой строке k-го элемента стоит 1, а во всех ос-тальных его строках находится 0. Таким образом осуществляется шаг итерационального алгоритма, Шаги алгоритма симплекс-метода продолжаются до тех пор, пока не будет получен один из следующих результатов.
Все небазисные дельта-оценки больше нуля — найдено решение задачи ли-

нейного программирования, оно представляет из себя вектор компонент х;, значения которых либо равны нулю, либо равны элементам столбца Х, та-в

кие компоненты стоят на базисных местах (скажем, если базис образуют пе-ременные х>2>, x>4>, х>5>, то ненулевые компоненты стоят в векторе решения зада-чи линейного программирования на 2-м, 4-м и 5-м местах).

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

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

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

записывать в виде Х* = (..., ..., ...) - вектора решения и значения целевой функ-ции в точке решения L*(Х*). В других случаях (решений много или они отсут-ствуют) следует словесно описать полученную ситуацию. Если решение задачи линейного программирования не будет получено в течение 10-12 итераций симплекс-метода, то следует написать, что решение отсутствует в связи с неог-рачниченностью функции цели.

Для практического решения задачи линейного программирования симплекс-методом удобно пользоваться таблицей вида (табл. 11.1):

Таблица 1.1

B

CB

XB

A>1>

A>n>

Базисные

Целевые

Правые

компоненты

Коэффиц.

Части

Базиса

ограничен



n

Задание

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

L(x) = x>1> – 2x>2> + 3x>3>

x>1> – 3x>2> 3

2x>1> – x>2> + x>3> 3

-x>1> + 2x>2> – 5x>3> 3

Все x>i> 0 i = 1, …3

    Для начала приведем задачу к каноническому виду:

L(x) = x>1> – 2x>2> + 3x>3>

x>1> – 3x>2> + x>4> = 3

2x>1> – x>2> + x>3> + x>5> = 3

-x>1> + 2x>2> – 5x>3> + x>6> = 3

Все x>i> 0 i = 1, …6

    Составляем таблицу симплекс-метода (табл. 1.2). Видно, что базис образуют компаненты x>4>, x>5>, x>6>:

B

CB

XB

A>1>

A>2>

A>3>

A>4>

A>5>

A>6>

A>4>

0

3

1

-3

0

1

0

0

-

A>5>

0

3

2

-1

1

0

1

0

3

A>6>

0

3

-1

2

-5

0

0

1

-

-1

2

-3

0

0

0

A>4>

0

3

1

-3

0

1

0

0

A>3>

3

3

2

-1

1

0

1

0

A>6>

0

3

-1

2

0

0

0

1

9

5

2

0

0

3

0

Таким образом, уже на втором шаге расчетов (вычислений дельта-оценок) получено, что все небазисные дельта оценки положительны, а это означает, что данная задача имеет единственное решение:

    Решение задачи запишем в виде:

X* = (0, 0, 3, 3 ,0, 3), L*(X*) = 9.