Глава 5 - Sciyouth.ru

реклама
5 ЛИНЕЙНОЕ ПРОГРАММИРОВАНИЕ И ТРАНСПОРТНАЯ ЗАДАЧА
5.1
СИМПЛЕКС-МЕТОД
Рассмотрим задачу нелинейного программирования, в которой
оптимизируемая функция и левые части всех ограничений линейны и,
кроме того, в число ограничений входит обязательное требование
неотрицательности всех переменных
y
j
 0 , j=1,..,n .
(5.1)
Благодаря этому требованию задача может быть
эквивалентно
преобразована так, что ее ограничения, помимо (5.1), будут содержать
только равенства или только неравенства. Для того, чтобы превратить в
ней неравенства вида  ( y )  0 в равенства, достаточно их левые части
обозначить как новые переменные. Тем самым будут введены равенства, а
смысл неравенств отразят наложенные на новые переменные условия (5.1).
Для того, чтобы превратить равенства в неравенства, следует решить
систему равенств относительно соответствующего количества переменных
и затем исключить эти переменные из условий задачи: подставить их
выражения в критерий, а также исключить сами равенства и условия
неотрицательности
этих
переменных,
заменив
условиями
неотрицательности их выражений.
Мы будем рассматривать задачу линейного программирования "в
равенствах":
f = су ,
(5.2)
Ay + b = 0 ,
(5.3)
где:
f – критерий,
c - n - мерный вектор;
b - k - мерный вектор;
A - невырожденная матрица размерности k x n ( k < n ).
Наиболее сложной
и увлекательной процедурой является перевод
содержательной задачи в термины модели линейного программирования.
Потренируйтесь в ней на задачах 24-40 главы 1.
Обратим внимание, что из (5.3) можно k переменных выразить через
остальные n-k. Назовем эти переменные соответственно базисными и
свободными. Если при нулевых значениях свободных переменных базисные
неотрицательны, такое допустимое решение называется базисным.
Доказано, что точка минимума в задаче линейного программирования
всегда может быть представлена как допустимое базисное решение. Идея
72
симплекс-метода состоит в том, чтобы, начав с некоторого начального
допустимого базисного решения, переходить от одного такого решения к
другому при монотонном уменьшении значения критерия, пока мы не
придем к решению, которое улучшить нельзя, оно является оптимальным.
Переход осуществляется следующим образом. Пусть критерий и базисные
переменные уже выражены через свободные. Выберем свободную
переменную, входящую в выражение для критерия с отрицательным
коэффициентом (если такие переменные не найдутся, то текущее
допустимое базисное решение задает точку минимума). При ее увеличении
от исходного нулевого значения критерий убывает. Одновременно
изменяются и значения базисных переменных: те из них, в выражения для
которых свободная переменная входит с отрицательным коэффициентом,
убывают. Увеличивать значение свободной переменной можно до тех пор,
пока первая из убывающих базисных переменных не превратится в нуль:
при дальнейшем увеличении она стала бы отрицательной, а все решение недопустимым. Теперь можно перейти к новому допустимому базисному
решению, переведя базисную переменную, обратившуюся в нуль, в
разряд свободных, а изменявшуюся свободную - в разряд базисных.
Критерий и базисные переменные выражаем через новый набор свободных
переменных, и процесс продолжается.
Переход от одной системы базисных переменных к другой
осуществляется весьма просто при табличной реализации симплекс-метода.
На каждом шаге строят таблицу из k + 1 строки и n - k + 1 столбца
(табл. 5.1). Первые k строк соответствуют базисным переменным, k + 1 -я
строка - критерию. В первом столбце проставляются значения свободных
членов из выражений, связывающих базисные переменные и критерий со
свободными, а в остальных столбцах - взятые с обратным знаком
коэффициенты, с которыми соответствующие свободные переменные
входят в эти выражения. Выбирают свободную переменную с
положительным коэффициентом в нижней строке (если она отсутствует,
решение оптимально) и находят в этом столбце другой положительный
коэффициент, который характеризуется наименьшим отношением к нему
свободного члена из строки этого коэффициента (если он отсутствует,
решения не существует, так как критерий неограничен снизу). Обозначим
этот коэффициент через a . Он называется генеральным элементом.
Переменная,
соответствующая строке генерального элемента, будет
переводиться из базисных в свободные.
В нижней части клетки
генерального элемента в таблице записывается обратная ему величина
l=1/a , затем все элементы столбца генерального элемента умножаются на
(-l) , а строки - на l и записываются в нижней части соответствующих
клеток. Окружаются числа в верхней части клеток строки и нижней части
клеток столбца генерального элемента, после чего в нижней части каждой
еще не заполненной клетки записывается произведение окруженных
элементов соответствующих ей строки и столбца. Теперь легко построить
симплекс-таблицу для следующего шага симплекс-метода. Она имеет ту же
73
размерность, в ее "шапке" размещены те же переменные, кроме переменных,
отвечающих строке и столбцу генерального элемента, которые меняются
местами. В эту строку и столбец переносятся числа из нижней части
соответствующих клеток предыдущей таблицы, а остальные клетки
заполняются суммой чисел, стоящих в соответствующих клетках
предыдущей таблицы.
Таблица 5.1
Базисные Свободные
переменные
члены
Коэффициенты при свободных
переменных
в
базисные



в своб.

а
1=1/а


*1

критерий
>0

*(-1)
Открытым остается вопрос о выборе начального приближения, т.е.
построении самой первой симплекс-таблицы. Для его решения предложен
следующий метод.
ОТЫСКАНИЕ ДОПУСТИМОГО БАЗИСНОГО РЕШЕНИЯ
5.2
Преобразуем (5.3) так, чтобы все компоненты вектора b были
неотрицательны (для этого, если нужно, умножим отдельные уравнения на
-1, и введем k - мерный вектор вспомогательных неотрицательных
1
k
переменных q = ( q ,... q ). Решим задачу линейного программирования:
л
 q  min
i
i 1
q=Ay+b,
74
j
y >= 0 , q i  0 ,
j=1,..,n , i=1,..,k .
Для этой задачи начальное допустимое базисное решение очевидно: y i
свободные переменные, а q - базисные (напомним, что b  0 , i=1,..,k ),
поэтому она легко решается симплекс-методом. При этом вспомогательные
переменные, переходя в разряд свободных, из таблицы исключаются. Если
полученное оптимальное значение критерия в ней равно нулю, то вектор
y удовлетворяет уравнению (5.3), т.е. является допустимым решением; если
же оно больше нуля, значит, условию (5.3) удовлетворить невозможно и
исходная задача линейного программирования не имеет решения, так как
множество допустимых решений пусто.
Полученное допустимое решение исходной задачи может оказаться
небазисным, если некоторые из вспомогательных переменных не
перешли в разряд свободных. Его можно преобразовать в базисное по
следующим правилам. Если в строке итоговой симплекс-таблицы для
вспомогательной переменной имеется положительный коэффициент, его
следует принять за генеральный элемент и сделать еще один шаг симплексметода. Данная свободная переменная тогда перейдет в базисные. Если же
в ее строке положительные коэффициенты отсутствуют, это означает, что
на всех допустимых решениях равны нулю те компоненты y , которым в
этой строке соответствуют отрицательные коэффициенты. Их можно
исключить из числа неизвестных, а саму строку отбросить.
5.3 ДВОЙСТВЕННЫЙ СИМПЛЕКС-МЕТОД
Для задачи линейного программирования "в неравенствах":
c y  min
A yb ,
i
y  0 , i=1,..,n
можно сформулировать так называемую двойственную задачу:
b x  max
T
A
x c ,
j
x  0 , j=1,..,k .
75
Заметим, что исходная задача двойственна своей двойственной.
Показано, что оптимальные значения критериев в этих задачах равны, если
же в одной из них он не ограничен, то другая задача противоречива. Между
оптимальными решениями существует следующая связь: если решение
исходной задачи обращает какое-либо неравенство в строгое, то
соответствующая по номеру переменная двойственной задачи равна нулю;
если же какая-либо переменная этого решения положительна, то
соответствующее по номеру неравенство двойственной задачи обращается в
равенство. Таким образом, зная решение двойственной задачи, можно легко
найти решение исходной.
Метод решения задачи линейного
программирования путем решения двойственной ей задачи симплексметодом называется двойственным симплекс-методом. По трудоемкости
он в точности соответствует симплекс-методу (правда, иногда для него
легче найти начальное приближение),
однако он обладает
одним
достоинством. Им удобнее решать задачи, в которых по ходу решения
появляются дополнительные ограничения. В двойственном симплекс-методе
это приводит к появлению дополнительных свободных переменных, т.е.
просто к симплекс-таблице дописываются новые столбцы без изменения
уже выполненных расчетов.
5.4
ЦЕЛОЧИСЛЕННОЕ ЛИНЕЙНОЕ ПРОГРАММИРОВАНИЕ.
АЛГОРИТМ ГОМОРИ
Целочисленным линейным программированием называют задачу линейного
программирования, дополненную требованием целочисленности всех
переменных. Построим решение такой задачи, игнорируя требование
целочисленности, как обычной задачи линейного программирования. Если
оно целочисленно, то решена и задача целочисленного линейного
программирования. Если оно нецелочисленно, то добавим к условиям
задачи еще одно ограничение, которое, сделав недопустимым полученное
решение, сохранит в классе допустимых все находящиеся там
целочисленные решения. В новой задаче линейного программирования
снова найдем оптимальное решение и проверим его на целочисленность и
т.д. Доказано, что через конечное число шагов мы или придем к
целочисленному решению, или не сможем построить очередное
ограничение, что свидетельствует об отсутствии решения к задаче.
Ясно, что задачи линейного программирования здесь удобно решать
двойственным симплекс—методом, хорошо приспособленным для учета
дополнительно появляющихся ограничений. Опишем правило построения
дополнительных ограничений. Пусть нецелой оказалась базисная
переменная η, выраженная через свободные y¹,...,y k :
k
  b   ai y i ,
i 1
76
где ai - коэффициенты симплекс-таблицы. Тогда
{b}>0
(напомним, что через [х], {х} обозначаются целая и дробная части числа х и
х= [х]+{х},{х}  0). Имеем:
k
k
i 1
i 1
  b  b   ai y i   ai y i .
Запишем его в виде
k
k
i 1
i 1
 {b}   {ai } y i  [b]     [a ] y i  S .
По левой части равенства,
S≥-{b}.
Для целочисленного решения, по средней части равенства, S целочисленно.
Объединяя это свойство с
S>-{b},
т.е.
S>-1,
получим ,что S может быть равно 0,1,2 и т.д., т.е.
S≥0.
В то же время для полученного нецелочисленного решения, ввиду У i =0,
i=1,...k,
S=-{b},
т.е.
S<0.
Таким образом, условие
k
 b   ai y i  0
i 1
является искомым.
5.5 ОПТИМИЗАЦИЯ ДРОБНО-ЛИНЕЙНОЙ ФУНКЦИИ
С ЛИНЕЙНЫМИ ОГРАНИЧЕНИЯМИ
Пусть критерий оптимальности имеет вид
f y 
k1 y  p1
,
k 2 y  p2
где k1  q11 ,..., q1n , k 2  q12 ,..., q2n , k 2 y  p2  0, n - мерные векторы, р 1 , p 2 - числа,
а ограничения имеют тот же вид, что_ и в задаче линейного
программирования. Вместо переменных y i , i=1,...,n введем новые
переменные
77
zi 
yi
k 2 y  p2
i  1,..., n
и переменную
z n 1 
1
.
k 2 y  p2
Очевидно,
Z i ≥0,i=1,...,n, Z n 1 ≥0.
Тогда критерий будет линейно зависеть от новых переменных:


f z   k1 z  p1 z n1 , z= z 1 ,..., z n .
Разделим каждое ограничение на знаменатель критерия и перейдем к новым
переменным. Тогда и каждое ограничение относительно новых переменных
будет линейно. Добавим к ограничениям тривиальное соотношение
k 2 z  p2 z n1  1
с тем, чтобы ограничить множество допустимых решений, и условие
Z n 1 ≤Q,
где Q - весьма большое число. Это условие введено для того, чтобы
избежать возможного решения Ζ n 1 →∞. Итак, мы перешли к
вспомогательной задаче линейного программирования. Решив ее, получим
решение исходной задачи по формуле
yi 
5.6
zi
z n1
i  1,..., n.
ТРАНСПОРТНАЯ ЗАДАЧА. РАСПРЕДЕЛИТЕЛЬНЫЙ МЕТОД
Частным, но часто встречающимся на практике случаем задачи
линейного программирования является транспортная задача. Учитывая
специфику, ее решают более простыми методами, чем симплекс-метод. Ее
постановка такова. В исходной таблице (табл. 5.1) приведены следующие
сведения о возможностях поставки некоторого ресурса от n поставщиков
(строки таблицы) к m потребителям (столбцы): мощность каждого
поставщика (последний столбец),
потребность каждого потребителя
(последняя строка),
себестоимость поставки единицы ресурса от
конкретного поставщика конкретному потребителю (соответствующая
клетка).
78
Поставщики
Таблица 5.1
Мощность
Потребители
*
*
*
*
*
*
Потребность
Задача называется замкнутой, если суммарная мощность поставщиков
равна суммарной потребности потребителей, и открытой, если этого нет.
Открытую задачу всегда можно свести к замкнутой, введя при избытке
ресурса
фиктивного
потребителя, поглощающего избыток,
а при
недостатке - фиктивного поставщика, производящего этот недостающий
ресурс, причем себестоимость поставки для фиктивного потребителя или
поставщика принимается нулевой. Требуется найти такой план поставок
ресурса потребителям, при котором себестоимость поставки минимальна.
Этот план удобно изображать на табл. 5.1, указывая в соответствующих
клетках объем ресурса, поставляемого от данного поставщика данному
потребителю. При этом если поставка не производится, то клетка
остается свободной (кроме оговоренного далее особого случая).
Один допустимый план перевозок можно легко построить так
называемым методом "северо-западного" угла. Для этого на первом шаге
удовлетворяют потребность первого потребителя за счет первого
поставщика; если его мощность исчерпана,
а потребность еще не
удовлетворена, то за счет второго, третьего и т.д. Таким образом, после
первого шага из исходной таблицы исключается первый столбец. Если при
этом
были
исчерпаны
ресурсы
некоторых поставщиков,
то
соответствующие им строки также исключаются, кроме строки последнего
из привлекавшихся поставщиков, который исключается в начале
следующего шага, причем в соответствующую клетку заносится нулевой
ресурс, передаваемый от него следующему потребителю. Лишь при
удовлетворении последнего потребителя вместе с ним исключается
последний поставщик. Можно показать, что в полученном плане перевозок
будет заполнено ровно m + n - 1 клеток таблицы. Как правило, этот
план не будет оптимальным. Для его последовательного улучшения вплоть
до получения оптимального плана предложен ряд методов.
Наиболее понятным из них является распределительный метод. Дадим
его описание. Пусть имеется некоторый план перевозок. Выберем любую
свободную клетку таблицы, показанную на табл. 5.1, и построим для нее
цикл пересчета. Для этого проведем отрезки, соединяющие эту клетку с
какой-либо занятой клеткой в ее строке, потом эту вторую занятую клетку с
некоторой занятой клеткой в ее столбце и так далее до тех пор, пока не
79
придем в исходную свободную клетку (см. табл. 5.1, где занятые клетки
показаны точками). Доказано, что для любой свободной клетки при m > 2, n
> 2 и числе занятых клеток m+n-1 такой цикл всегда можно построить,
притом единственным образом. Припишем вершинам цикла знаки "+" и "-",
присваивая их попеременно, начиная с "+" для свободной клетки, и
вычислим алгебраическую схему себестоимостей поставок в вершинах
цикла, взятых со знаками этих вершин. Ясно, что полученная величина
показывает, как изменится суммарная себестоимость поставок, если внести
в исходный план следующее единичное изменение: объем поставок в
положительных вершинах цикла увеличить на 1, а в отрицательных
уменьшить на 1 (при этом план поставок остается допустимым, так как
каждый отрезок цикла в строке или столбце имеет две вершины разных
знаков).
Если она неотрицательна, вносить такое изменение нецелесообразно
(критерий не убудет) и следует перейти к проверке следующей свободной
клетки. Если все они приведут к тому же результату, проверяемый план
поставок оптимален.
Если же изменение себестоимости отрицательно,
целесообразно
изменить план поставок, причем сразу на величину наименьшего из
объемов поставок в отрицательных вершинах цикла. При этом бывшая
свободная клетка окажется занятой, а одна из отрицательных клеток (с
наименьшим объемом поставок) станет свободной;
суммарная
себестоимость поставок уменьшится. Для этого нового плана поставок
процесс повторяется. Доказано, что за конечное число шагов он приведет к
оптимальному решению.
80
Скачать