Учебная работа № 1907. Решение задач линейного программирования
|
ЛАБОРАТОРНАЯ РАБОТА № 11
РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ
Цель работы: изучение принципов составления оценочных характеристик для задач линейного программирования, получение навыков использования симплексметода для решения задач линейного программирования, усвоение различий получаемых результатов, изучение табличной формы применения симплексметода.
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ
Стандартная задача линейного программирования состоит из трех частей:
целевой функции (на максимум или минимум) формула (1.1), основных oграничений формула (1.2), ограничений не отрицательности переменных (есть, нет) формула (1.3)
(1.1)
i = 1,… m (1.2)
(1.3)
Алгоритм решения задач линейного программирования требует приведения их постановки в канонический вид , когда целевая функция стремится к максимуму (если стремилась к минимуму, то функцию надо умножить на 1, на станет стремиться к максимуму), основные ограничения имеют вид равенства (для приведения к равенствам в случае знака надо в правую часть каждогo такого kго неравенства добавить искусственную переменную uk
переменной комбинацией x1 k х 2 k = х k , где х 1 k
Первая оценка это дельтаоценка , для переменной х j она имеет вид:
Здесь выражение i
Т.е. по номеру k, найденному по дельтаоценке, мы получаем выход на переменную хk и элементы столбца ХB делим на соответствующие (только положи
тельные) элементы столбца матрицы А, соответствующего переменой xk . Из полученных результатов выбираем минимальный, он и будет теттаоценкой, аi й элемент столбца B , лежащий в одной строке с теттаоценкой, будет выводиться из базиса, заменяясь элементом xk , полученным по дельтаоценке. Для осуществления такой замены нужно в iой строке k гo столбца матрицы А сделать единицу, а в остальных элементах k гостолбца сделать нули. Такое преобразование и будет одним шагом итерационного процесса. Для осуществления такого преобразования используется метод Гаусса . В соответствии с ним iя строка всей матрицы А, а также iя координата Х B делятся на aik (получаем единицу в iой строке вводимого в базис элемента). Затем вся iя строка (если i не единица), а также iя координата ХB умножаются на элемент (а1k ). После этого производится поэлементное суммирование чисел в соответствующих столбцах 1ой и iой строк, суммируются также ХB 1 , и (а1k )*ХB i ;. Аналогичные действия производятся для всех остальных строк кроме iой (базисной) строки. В результате получается, что в iой строке kго элемента стоит 1, а во всех остальных его строках находится 0. Таким образом осуществляется шаг итерационального алгоритма, Шаги алгоритма симплексметода продолжаются до тех пор, пока не будет получен один из следующих результатов.
• Все небазисные дельтаоценки больше нуля — найдено решение задачи ли
нейного программирования, оно представляет из себя вектор компонент х;, значения которых либо равны нулю, либо равны элементам столбца Х, тав
кие компоненты стоят на базисных местах (скажем, если базис образуют переменные х2 , x4 , х5 , то ненулевые компоненты стоят в векторе решения задачи линейного программирования на 2м, 4м и 5м местах).
• Имеются небазисные дельтаоценки, равные нулю , тогда делается вывод о том, что задача линейного программирования имеет бесчисленное множество решений (представляемое лучом или отрезком). Подробно рассматривать случаи такого типа, а также отличия между решениями в виде луча и отрезка мы не будем.
• Возможен вариант получения столбца отрицательных элементов на отрицательной рассчитанной дельтаоценке, в такой ситуации нельзя вычислить теттаоценки. В этом случае делается вывод, что система ограничений задачи линейного программирования несовместна; следовательно, задача линейного программирования не имеет решения.
Решение задачи линейного программирования, если оно единственное, следует
записывать в виде Х* = (…, …, …) вектора решения и значения целевой функции в точке решения L *(Х*). В других случаях (решений много или они отсутствуют) следует словесно описать полученную ситуацию. Если решение задачи линейного программирования не будет получено в течение 1012 итераций симплексметода, то следует написать, что решение отсутствует в связи с неограчниченностью функции цели.
Для практического решения задачи линейного программирования симплексметодом удобно пользоваться таблицей вида (табл. 11.1):
Таблица 1.1
B | CB | XB | A1 | … | An | Q |
Базисные | Целевые | Правые | ||||
компоненты | Коэффиц. | Части | ||||
Базиса | ограничен | |||||
D | D1 | D n |
Задание
Необходимо решить задачу линейного программирования.
L(x) = x1 – 2x2 + 3x3
x1 – 3x2
2x1 – x2 + x3
x1 + 2x2 – 5x3
Все xi
1. Для начала приведем задачу к каноническому виду :
L(x) = x1 – 2x2 + 3x3
x1 – 3x2 + x4 = 3
2x1 – x2 + x3 + x5 = 3
x