Линейного программирования

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

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

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

§ направляющий вектор (вектор нормали) перпендикулярен прямой функции цели и всегда указывает направление ее возрастания.

Схему применения графического метода проиллюстрируем на конкретном примере, рассматривая три этапа:

§ построение области допустимых решений;

§ построение направляющего вектора и определение оптимальных точек;

§ нахождение оптимальных значений переменных и целевой функции.

Найти максимальное и минимальное значение функции

Линейного программирования - student2.ru

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

Линейного программирования - student2.ru

І этап. Построение области допустимых решений

1. Каждому неравенству ставим в соответствие равенство, геометрическим образом которого является прямая линия. Для ее построения достаточно двух точек.

§ Линейного программирования - student2.ru - эта прямая пройдет через точки (2; 0) и (0; 3).

Линейного программирования - student2.ru Линейного программирования - student2.ru

§ Линейного программирования - student2.ru - эта прямая пройдет через точки (-3; 0) и (0; 2).

Линейного программирования - student2.ru Линейного программирования - student2.ru
– 3

§ Линейного программирования - student2.ru - эта прямая пройдет через точки (4; 0) и (0; -4).

Линейного программирования - student2.ru Линейного программирования - student2.ru
– 4

§ Линейного программирования - student2.ru - эта прямая пройдет через точки (7; 0) и (0; 4).

Линейного программирования - student2.ru Линейного программирования - student2.ru

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

Линейного программирования - student2.ru

Неравенства Линейного программирования - student2.ru и Линейного программирования - student2.ru означают, что область будет находиться в первой четверти. В нашем случае областью допустимых решений являются точки пятиугольника Линейного программирования - student2.ru .

ІІ этап. Определение оптимальных точек

1. Направляющий вектор проводят из начала координат в точку с координатами, равными коэффициентам целевой функции, то есть в точку Линейного программирования - student2.ru . Он всегда указывает направление возрастания функции, направление убывания целевой функции будет противоположным.

2. Перпендикулярно направляющему вектору на области допустимых решений проводят прямую Линейного программирования - student2.ru (она показана пунктиром).

3. Если в задаче требуется найти максимум, прямую Линейного программирования - student2.ru перемещают параллельно в сторону стрелки направляющего вектора до последней точки области – эта точка и будет точкой максимума. В примере наибольшее значение достигается в вершине Линейного программирования - student2.ru .

4. Если требуется найти минимум, то прямую Линейного программирования - student2.ru перемещают параллельно в противоположную сторону до последней точки области. В данном случае наименьшее значение достигается в вершине Линейного программирования - student2.ru .

ІІІ этап. Нахождение оптимальных значений

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

а) находим Линейного программирования - student2.ru б) находим Линейного программирования - student2.ru
Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru

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

Замечание 1. Если прямая функции Линейного программирования - student2.ru окажется параллельной какой-нибудь стороне многоугольника ограничений, то в этом случае задача имеет бесчисленное множество решений: координаты любой точки этой стороны многоугольника (в том числе и вершины) будут решением задачи.

Замечание 2. Если область решений не ограничена, то задача или не имеет решения, или целевая функция может принять только максимальное или только минимальное значение, или задача имеет бесконечное множество решений.

Симплексный метод

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

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

а) строится начальное решение;

6) проводится оценка найденного решения по соответствующему критерию оптимальности;

в) если условие оптимальности не выполняется, переходят к новому решению.

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

Все правила проиллюстрируем на примере:

Найти Линейного программирования - student2.ru , при ограничениях

Линейного программирования - student2.ru

Линейного программирования - student2.ru

I этап. Построение начального решения.

а) Приводим задачу к каноническому виду.

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

Линейного программирования - student2.ru

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

Линейного программирования - student2.ru

3. Если среди ограничений есть неравенства, то, вводя дополнительные переменные, преобразуют их в уравнения. В нашем случае:

Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru

Линейного программирования - student2.ru

Получили канонический вид задачи.

б) В ограничения, где дополнительные переменные вычитаются, добавляют искусственные переменные с последующими номерами. Эти искусственные неизвестные вносят и в целевую функцию с коэффициентом Линейного программирования - student2.ru . В результате таких преобразований задача приобретет вид:

Линейного программирования - student2.ru

Линейного программирования - student2.ru ,

где Линейного программирования - student2.ru – основные переменные;

Линейного программирования - student2.ru – дополнительные переменные;

Линейного программирования - student2.ru – искусственные переменные.

Все переменные – неотрицательны.

в) Выписывают векторы коэффициентов при неизвестных и вектор свободных членов.

Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru

Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru

г) строят первую симплексную таблицу следующего вида:

Таблица 1

Базис Линейного программирования - student2.ru Линейного программирования - student2.ru - 1 Линейного программирования - student2.ru Линейного программирования - student2.ru С.О.
Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru
Линейного программирования - student2.ru Линейного программирования - student2.ru -1
Линейного программирования - student2.ru Линейного программирования - student2.ru -1
Линейного программирования - student2.ru -1 -
Линейного программирования - student2.ru -строка -2  
Линейного программирования - student2.ru -строка -1 -1  

Заполняют таблицу по правилам:

1. Вносят все векторы Линейного программирования - student2.ru .

2. В самую верхнюю строку записывают коэффициенты целевой функции при соответствующих неизвестных.

3. В качестве первоначального базиса берут векторы, образующие единичную матрицу, - в данном случае это векторы Линейного программирования - student2.ru , Линейного программирования - student2.ru , Линейного программирования - student2.ru .

4. В столбец Линейного программирования - student2.ru переносят из верхней строки числа, соответствующие базисным векторам.

5. Чтобы получить элементы двух последних строк, вектор Линейного программирования - student2.ru умножают последовательно на векторы Линейного программирования - student2.ru , Линейного программирования - student2.ru ,…, Линейного программирования - student2.ru и от результата вычитают соответствующее число из верхней строки

Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru

В Линейного программирования - student2.ru -строку записывают коэффициенты при Линейного программирования - student2.ru , в Линейного программирования - student2.ru -строку – коэффициенты без Линейного программирования - student2.ru .

д) После того, как составлена симплекс-таблица, можно записать решение. Оно всегда содержится в столбце Линейного программирования - student2.ru и соответствует переменным с номерами базисных векторов. Неизвестные, векторы которых не входят в базис, равны нулю. В данном случае имеем:

Линейного программирования - student2.ru .

ІІ этап. Проверка оптимальности решения

а) Критерий оптимальности: функция достигает минимума, если среди элементов Линейного программирования - student2.ru -строки (а затем Линейного программирования - student2.ru -строки), начиная со второго, нет положительных чисел. В противном случае необходимо улучшать решение.

Следуя данному критерию, можем заключить, что полученное из таблицы 1 решение не является оптимальным: в Линейного программирования - student2.ru -строке есть 2 положительных числа – это 6 и 3.

б) В случае, когда критерий оптимальности не выполняется, выбирают ключевой столбец – по наибольшему положительному числу в Линейного программирования - student2.ru -строке (а затем в Линейного программирования - student2.ru -строке), начиная со второго. Ключевой столбец показывает, какой вектор войдет в новый базис. В таблице 1 – наибольшее число в Линейного программирования - student2.ru -строке (начиная со второго) равно 6, в новый базис войдет Линейного программирования - student2.ru .

в) Определяют симплексные отношения, для этого элементы Линейного программирования - student2.ru делят на положительные элементы ключевого столбца (на отрицательные и нули не делят). В таблице 1 симплексные отношения равны 4 и 1, в третьей строке ставят прочерк, т.к. на (– 1) не делят.

г) Ключевую строку выбирают по наименьшему симплексному отношению (С.О.), она показывает, какой вектор выйдет из базиса. Наименьшее симплексное отношение равно 1, ключевой будет вторая строка, из базиса уйдет искусственный вектор Линейного программирования - student2.ru .

д) Элемент, стоящий на пересечении ключевой строки и ключевого столбца, называется генеральным. В построенной таблице генеральный элемент равен 5.

III этап. Построение нового решения (таблицы 2).

а) Формируют новый базис, заменяя вектор Линейного программирования - student2.ru на вектор Линейного программирования - student2.ru . В данной задаче новый базис будет состоять из векторов Линейного программирования - student2.ru , Линейного программирования - student2.ru , Линейного программирования - student2.ru . Поскольку из базиса вышел искусственный вектор Линейного программирования - student2.ru , то соответствующий ему столбец следует отбросить. Когда из базиса уходит последний искусственный вектор, то отбрасывают и Линейного программирования - student2.ru -строку.

б) Столбец Линейного программирования - student2.ru заполняют по правилу, изложенному выше – из верхней строки.

Таблица 2

Базис Линейного программирования - student2.ru Линейного программирования - student2.ru - 1 Линейного программирования - student2.ru С.О.
Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru
Линейного программирования - student2.ru Линейного программирования - student2.ru 9/5 -1 1/5 5/3
Линейного программирования - student2.ru 1/5 -1/5
Линейного программирования - student2.ru 6/5 -1/5 10/3
Линейного программирования - student2.ru -строка 7/5 -2/5  
Линейного программирования - student2.ru -строка 9/5 -1 1/5  

в) Вычисления ведут по таким правилам.

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

2. Ключевой столбец дополняют нулями.

3. Если в ключевой строке есть нули, то соответствующие им столбцы переносят без изменения – это Линейного программирования - student2.ru .

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

Линейного программирования - student2.ru   Линейного программирования - student2.ru  
        Линейного программирования - student2.ru
Линейного программирования - student2.ru   Линейного программирования - student2.ru  

Линейного программирования - student2.ru – генеральный элемент, Линейного программирования - student2.ru – новый элемент, Линейного программирования - student2.ru – старый элемент, Линейного программирования - student2.ru – элемент ключевой строки, Линейного программирования - student2.ru – элемент ключевого столбца.

Новый элемент находят так: вычисляют произведение элементов диагонали, содержащей генеральный элемент, из него вычитают произведение элементов другой диагонали; полученною разность делят на генеральный элемент, и результат вносят в новую таблицу (см. табл. 2).

Например, для столбца Линейного программирования - student2.ru имеем:

Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru

Для столбца Линейного программирования - student2.ru получим:

Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru

Решение, соответствующее ІІ-й таблице, берем из Линейного программирования - student2.ru , оно имеет вид:

Линейного программирования - student2.ru .

Для анализа второго решения повторяют все действия, начиная со II этапа. Проверка показала, что во II таблице условие оптимальности не выполняется: есть два положительных числа – это 9/5 и 1/5. Берут наибольшее и выделяют ключевой столбец Линейного программирования - student2.ru , находят симплексные отношения и выбирают ключевою строку (первая), генеральный элемент равен 9/5. Все вычисления приводят к таблице 3. Из базиса уходит последний искусственный вектор Линейного программирования - student2.ru , поэтому таблица 3 не будет содержать столбец Линейного программирования - student2.ru и Линейного программирования - student2.ru -строку.

Таблица 3

Базис Линейного программирования - student2.ru Линейного программирования - student2.ru - 1 С.О.
Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru
Линейного программирования - student2.ru -1 5/3 -5/9 1/9 -
Линейного программирования - student2.ru 2/3 1/9 -2/9
Линейного программирования - student2.ru 2/3 -1/3
Линейного программирования - student2.ru -строка -1/3 7/9 -5/9  

Решение в соответствии с таблицей 3 имеет вид:

Линейного программирования - student2.ru .

Данное решение оптимальным не является – проверку ведем по Линейного программирования - student2.ru -строке, в ней содержится положительное число 7/9. Строим еще одну таблицу.

Таблица 4

Базис Линейного программирования - student2.ru Линейного программирования - student2.ru - 1
Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru Линейного программирования - student2.ru
Линейного программирования - student2.ru -1 10/3 -1/6 5/6
Линейного программирования - student2.ru 1/3 -1/6 -1/6
Линейного программирования - student2.ru -1/2 3/2
Линейного программирования - student2.ru -строка -8/3 -1/6 -7/6

В Линейного программирования - student2.ru -строке среди элементов, начиная со второго, нет положительных чисел, значит, в табл. 4 условие оптимальности выполнилось. Оптимальное решение имеет вид:

Линейного программирования - student2.ru .

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

Линейного программирования - student2.ru

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

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

Наши рекомендации