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

Транспортная задача линейного программирования имеет следующую формулировку.

Имеется некоторый однородный продукт, сосредоточенный у m поставщиков Ai в количестве ai (i=1, 2, …,m) единиц соответственно, необходимо доставить n потребителям Bj в количестве bj(j=1, 2, …,n) единиц. Известна стоимость Cij перевозки единицы груза от i–го поставщика к j–му потребителю. Необходимо составить план перевозок, позволяющий вывезти все грузы, полностью удовлетворить потребности и имеющий минимальную стоимость.

Математическую модель этой задачи можно представить в следующем виде.

Найти наименьшее значение линейной функции Транспортная задача линейного программирования - student2.ru Транспортная задача линейного программирования - student2.ru

при ограничениях Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

Обозначим через xij количество единиц груза, запланированных к перевозке от i-го поставщика к j-му потребителю; тогда условие задачи можно записать в виде таблицы 1.5, которую в дальнейшем будем называть матрицей планирования.

Таблица 1.5.

Поставщики Потребители   Запасы
  B1   B2   …   Bn
А1 C11 X11 C12 X12 …. C1n X1n a1
А2 C21 X21 C22 X22 C2n X2n a2
--- --- --- --- --- ---
Аm Cm1 Xm1 Cm2 Xm2 Cmn Xmn am
Потребности   b1   b2   …   bn Транспортная задача линейного программирования - student2.ru = Транспортная задача линейного программирования - student2.ru

Составим математическую модель задачи. Т.к. от i-го поставщика к j-му потребителю запланировано к перевозке xij единиц груза, то стоимость перевозки составит CijXij. Стоимость всего плана выразим двойной суммой:

Транспортная задача линейного программирования - student2.ru

Сумму ограничений получаем из следующих условий задачи:

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

б) все потребности должны быть удовлетворены, т.е. Транспортная задача линейного программирования - student2.ru Транспортная задача линейного программирования - student2.ru (уравнения получаются из столбцов таблицы 6);

Таким образом, математическая модель транспортной задачи имеет следующий вид.

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

Транспортная задача линейного программирования - student2.ru (1.34)

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

Транспортная задача линейного программирования - student2.ru Транспортная задача линейного программирования - student2.ru (1.35)
Транспортная задача линейного программирования - student2.ru Транспортная задача линейного программирования - student2.ru (1.36)
Транспортная задача линейного программирования - student2.ru (1.37)

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

Теорема. Любая транспортная задача, у которой суммарный объем запасов совпадает с суммарным объемом потребностей, имеет решение.

Алгоритм метода потенциалов.

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

Транспортная задача линейного программирования - student2.ru (1.38)

Если это условие не выполняется, возможны два случая:

а) Транспортная задача линейного программирования - student2.ru ,вводим фиктивного потребителя ВФ n+1, с потребностями bФ= Транспортная задача линейного программирования - student2.ru .

б) Транспортная задача линейного программирования - student2.ru , вводим фиктивного поставщика АФ m+1, c ресурсами аф= Транспортная задача линейного программирования - student2.ru .

В распределительную таблицу в первом случае вводится дополнительный столбец, а во втором случае дополнительная строка. Обычно стоимость фиктивных потребителей и поставщиков берется равной нулю.

2. Строим первоначальный опорный план. Существует ряд методов для его построения: метод «северо-западного угла», метод «наилучший элемент матрицы», метод «наилучший элемент строки», «аппроксимация» и др.

Рассмотрим метод наилучшего элемента матрицы:

a) среди всех стоимостей Транспортная задача линейного программирования - student2.ru выбираем наилучший элемент (если задача была поставлена на минимум, тогда выбирается наименьший, а если задача была поставлена на максимум, тогда наибольший элемент);

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

в) переходим к шагу а). Процесс продолжается до тех пор, пока все ресурсы не будут распределены и весь спрос не будет удовлетворен.

Замечание 1:если при распределении поставок, одновременно вычеркивается строка и столбец, то получим вырожденный план.

Поэтому в одну из свободных клеток (не относящихся к фиктивным), с наилучшим Cij в одновременно вычеркиваемых строке и столбце ставим нуль поставку, т.е. увеличиваем число занятых клеток до (m+n-1).

3. Проверяем условие невырожденности плана: количество заполненных клеток должно быть равно m+n-1. Если план вырожденный – устраняем вырождение (замечания 1 и 2).

4. Подсчитываем значение линейной формы L(Х).

5. Проверяем условие оптимальности плана:

a) для всех занятых клеток (т.е. Xij>0 ) строим систему уравнений с (m+n) неизвестными Ui(i=1,m и Vj(j=1,n).

-Ui+Vj=Cij.

Так как эта система является неопределенной, то можно одной переменной задать произвольное значение. Для простоты расчета полагаем вычисления предположим U1=0. Полученные Ui и Vj вводим в дополнительные столбец и строку;

б) для всех свободных клеток (т.е. Xij=0) производим оценку по формуле

Транспортная задача линейного программирования - student2.ru

Если все Транспортная задача линейного программирования - student2.ru при решении задачи на минимум (все Транспортная задача линейного программирования - student2.ru при решении задачи на максимум), тогда полученный план будет оптимальным.

Выписываем план перевозок X=(Xij) и значение L(X).

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

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

7. Для клетки с выбранной оценкой Транспортная задача линейного программирования - student2.ru строим прямоугольный контур, состоящий горизонтальных и вертикальных отрезков, которые пересекаются под прямым углом. Одна вершина контура должна находиться в свободной клетке с номером ( Транспортная задача линейного программирования - student2.ru ), а все остальные в занятых клетках.

8. Начиная с ( Транспортная задача линейного программирования - student2.ru ) вершинам контура присваиваем знаки «плюс» и «минус».

9. Среди вершин контура со знаком «минус» выбираем наименьшее значение и обозначим ее q.

10. Передвигаем величину q по контуру, прибавляя ее к поставкам, находящимся в вершинах со знаком «плюс», и вычитаем из поставок, стоящих в вершинах, имеющих знак «минус».

Получаем новый опорный план. Возвращаемся к шагу 3.

Замечание 2: Если в вершинах контура со знаком «минус» имеется две (или несколько) одинаковых наименьших поставок q, то при перераспределении поставок по контуру (чтобы избежать вырожденности плана) необходимо в одну или несколько из этих вершин записать нуль–поставку (предпочтение отдается той вершине которая соответствует клетке с наилучшим Транспортная задача линейного программирования - student2.ru ).

Замечание 3: Подсчитав значение линейной формы для первоначального опорного плана по формуле:

Транспортная задача линейного программирования - student2.ru

последующие значения L(X) можно вычислять по формуле

Транспортная задача линейного программирования - student2.ru , Транспортная задача линейного программирования - student2.ru

где «плюс» (если задача решается на максимум), и «минус» (если задача решается на минимум).

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

Пример. Найти план перевозок, чтобы общая стоимость была минимальной, при следующих данных.

Транспортная задача линейного программирования - student2.ru a1=4, a2=8, a3=8; b1=7, b2=3, b3=6, b4=6.

1. Проверяем условие разрешимости:

Транспортная задача линейного программирования - student2.ru ; Транспортная задача линейного программирования - student2.ru .

Вводим фиктивного поставщика Аф с ресурсами aф=22-20=2.

2. Строим первоначальный опорный план методом наилучшего элемента матрицы (таблица 1.6.). Наименьшая стоимость С41=0, направляем в клетку (4,1) поставку x41=min(2,7)=2. Все ресурсы Аф исчерпаны, поэтому эту строку зачеркиваем. Из оставшихся стоимостей наименьшая С14=1, тогда x14=min(8,4)=4 и т.д. Процесс продолжается до полного распределения ресурсов. Получим следующий план

Транспортная задача линейного программирования - student2.ru

3. Полученный план невырожденный, т.к. m+n-1=7 и число занятых клеток в таблице 1.6. равно 7.

4. Транспортная задача линейного программирования - student2.ru .

5. Проверяем условие оптимального плана. Для занятых клеток строим систему Транспортная задача линейного программирования - student2.ru :

(1,4): Транспортная задача линейного программирования - student2.ru ;

(2,2): Транспортная задача линейного программирования - student2.ru ;

(2,3): Транспортная задача линейного программирования - student2.ru ;

(3,1): Транспортная задача линейного программирования - student2.ru ;

(3,2): Транспортная задача линейного программирования - student2.ru ;

(3,4): Транспортная задача линейного программирования - student2.ru ;

(4,1): Транспортная задача линейного программирования - student2.ru .

Полагаем Транспортная задача линейного программирования - student2.ru находим все значения:

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru Транспортная задача линейного программирования - student2.ru .

Заполняем в таблице 1.6. столбец Транспортная задача линейного программирования - student2.ru и строку Транспортная задача линейного программирования - student2.ru . Находим оценки свободных клеток,

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

Транспортная задача линейного программирования - student2.ru

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

7. Для клетки с номером (2,4) строим контур. Вершины контура: (2,4), (3,4), (3,2), (2,2).

8. Расставляем знаки по вершинам начиная с (2,4).

9. Среди поставок стоящих в клетках (2,2) и (3,4), выбираем наименьшую: Транспортная задача линейного программирования - student2.ru .

10. Перемещаем Транспортная задача линейного программирования - student2.ru по контуру, прибавляя ее к поставкам в клетках (2,4) и (3,2), и отнимая от поставок в клетках (2,2) и (3,4).

Получим новые поставки: 3 – в клетке (3,2), 2 - в клетке (2,4), а клетки (2, 2) и (3,4) становятся свободными. Имеем случай вырождения (Замечание 2). В клетку с номером (2,2) (т.к.С2234) вставим нуль поставку. Новый опорный план записываем в таблицу 1.7., переходим к шагу 3.

3. Новый план,

Транспортная задача линейного программирования - student2.ru

4. Транспортная задача линейного программирования - student2.ru .

5. Проверяем оптимальность плана.

Для занятых клеток:

(1,4): Транспортная задача линейного программирования - student2.ru ;

(2,4): Транспортная задача линейного программирования - student2.ru ;

(2,3): Транспортная задача линейного программирования - student2.ru ;

(2,2): Транспортная задача линейного программирования - student2.ru ;

(3,1): Транспортная задача линейного программирования - student2.ru ;

(3,2): Транспортная задача линейного программирования - student2.ru ;

(4,1): Транспортная задача линейного программирования - 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

Следовательно, план Х2 оптимальный. Выписываем его (поставка по дополнительной строке не заносится) и значение линейной формы.

Транспортная задача линейного программирования - student2.ru , Транспортная задача линейного программирования - student2.ru .

Так как Транспортная задача линейного программирования - student2.ru , то задача имеет множество оптимальных планов. Для клетки (2,1) можно построить контур и сделать перераспределение поставок. Получим Х3, который так же является оптимальным и Транспортная задача линейного программирования - student2.ru . Тогда по основной теореме ЛП любой план Транспортная задача линейного программирования - student2.ru , где Транспортная задача линейного программирования - student2.ru , является также оптимальным планом задачи [3].

Таблица 1.6

Вj Ai     B1   B2   B3   B4 Ресурсы
  Vj Ui V1=-1 V2=-2 V3=-3 V4=1  
А1 U1=0      
А2 U2=-5   - 3 + 3  
A3 U3=-5 + 3   - 6
А4 U4=-1      
Потребности           20+2

Таблица 1.7

Вj Ai     B1   B2   B3   B4   Ресурсы
  Vj Ui V1=2 V2=1 V3=0 V4=1  
А1 U1=0      
А2 U2=-2  
A3 U3=-2    
А4 U4=2      
Потребности          

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