Решение транспортной задачи методом потенциалов
Решение транспортной задачи методом потенциалов.
Транспортная задача с правильным балансом.
Этот метод позволяет автоматически выделять циклы с отрицательной ценой и определять их цены.
Пусть имеется транспортная задача с балансовыми условиями
å xi,j = ai ( i=1..m ; j=1..n );
å xi,j =bj ( j=1..n ; 1..m ),
причём å ai = å bj
Стоимость перевозки единицы груза из Ai в Bj равна C i,j ; таблица стоимостей задана. Требуется найти план перевозок (xi,j ), который удовлетворял бы балансовым условиям и при этом стоимость всех перевозок бала минимальна.
Рекомендуемые материалы
Идея метода потенциалов для решения транспортной задачи сводиться к следующему. Представим себе что каждый из пунктов отправления Ai вносит за перевозку единицы груза (всё ровно куда) какую-то сумму ai ; в свою очередь каждый из пунктов назначения Bj также вносит за перевозку груза (куда угодно) сумму bj . Эти платежи передаются некоторому третьему лицу (“перевозчику“). Обозначим ai + bj = či,j ( i=1..m ;j=1..n) и будем называть величину či,j “псевдостоимостью” перевозки единицы груза из Ai в Bj . Заметим, что платежи ai и bj не обязательно должны быть положительными; не исключено, что “перевозчик” сам платит тому или другому пункту какую-то премию за перевозку. Также надо отметить, что суммарная псевдостоимость любого допустимого плана перевозок при заданных платежах (ai и bj ) одна и та же и от плана к плану не меняется.
До сих пор мы никак не связывали платежи (ai и bj ) и псевдостоимости či,j с истинными стоимостями перевозок C i,j. Теперь мы установим между ними связь. Предположим, что план (xi,j) невырожденный (число базисных клеток в таблице перевозок ровно (m + n -1). Для всех этих клеток xi,j >0. Определим платежи (ai и bj ) так, чтобы во всех базисных клетках псевдостоимости были ровны стоимостям:
či,j = ai + bj = сi,j , при xi,j >0.
Что касается свободных клеток (где xi,j = 0), то в них соотношение между псевдостоимостями и стоимостями может быть какое угодно.
Оказывается соотношение между псевдостоимостями и стоимостями в свободных клетках показывает, является ли план оптимальным или же он может быть улучшен. Существует специальная теорема: Если для всех базисных клеток плана (xi,j > 0)
ai + bj = či,j= сi,j ,
а для всех свободных клеток ( xi,j =0)
ai + bj = či,j≤ сi,j ,
то план является оптимальным и никакими способами улучшен быть не может. Нетрудно показать, что это теорема справедлива также для вырожденного плана, и некоторые из базисных переменных ровны нулю. План обладающий свойством :
či,j= сi,j (для всех базисных клеток ) (1)
či,j≤ сi,j ( для всех свободных клеток ) (2)
называется потенциальным планом, а соответствующие ему платежи ( ai и bj ) — потенциалами пунктов Ai и Bj ( i=1,...,m ; j=1,...,n ). Пользуясь этой терминологией вышеупомянутую теорему можно сформулировать так: Всякий потенциальный план является оптимальным. Итак, для решения транспортной задачи нам нужно одно — построить потенциальный план. Оказывается его можно построить методом последовательных приближений, задаваясь сначала какой-то произвольной системой платежей, удовлетворяющей условию (1). При этом в каждой базисной клетке получиться сумма платежей, равная стоимости перевозок в данной клетке; затем, улучшая план следует одновременно менять систему платежей. Так, что они приближаются к потенциалам. При улучшении плана нам помогает следующее свойство платежей и псевдостоимостей: Какова бы ни была система платежей (ai и bj ) удовлетворяющая условию (1), для каждой свободной клетки цена цикла пересчёта равна разности между стоимостью и псевдостоимостью в данной клетке : gi,j= сi,j - či,j.
Таким образом при пользовании методом потенциалов для решения транспортной задачи отпадает наиболее трудоёмкий элемент распределительного метода: поиски циклов с отрицательной ценой.
Процедура построения потенциального (оптимального) плана состоит в следующем.
В качестве первого приближения к оптимальному плану берётся любой допустимый план (например, построенный способом минимальной стоимости по строке). В этом плане m + n - 1 базисных клеток, где m — число строк, n — число столбцов транспортной таблицы. Для этого плана можно определить платежи (ai и bj ), так, чтобы в каждой базисной клетке выполнялось условие :
ai + bj = сi,j (3)
Уравнений (3) всего m + n - 1, а число неизвестных равно m + n. Следовательно, одну из этих неизвестных можно задать произвольно (например, равной нулю). После этого из m + n - 1 уравнений (3) можно найти остальные платежи ai , bj , а по ним вычислить псевдостоимости: či,j= ai + bj для каждой свободной клетки.
Таблица 6
Если оказалось, что все эти псевдостоимости не превосходят стоимостей
či,j £ сi,j , £ ³
то план потенциален и, значит, оптимален. Если же хотя бы в одной свободной клетке псевдостоимость больше стоимости (как в нашем примере), то план не является оптимальным и может быть улучшен переносом перевозок по циклу, соответствующему данной свободной клетке. Цена этого цикла ровна разности между стоимостью и псевдостоимостью в этой свободной клетке.
В таблице №6 мы получили в двух клетках či,j ³ сi,j , теперь можно построить цикл в любой из этих двух клеток. Выгоднее всего строить цикл в той клетке, в которой разность či,j - сi,j максимальна. В нашем случае в обоих клетках разность одинакова (равна 1), поэтому, для построенияцикла выберем, например, клетку (4,2):
Таблица 7
Теперь будем перемещать по циклу число 14, так как оно является минимальным из чисел, стоящих в клетках, помеченных знаком - . Приперемещении мы будем вычитать 14 из клеток со знаком - и прибавлять к клеткам со знаком + .
После этого необходимо подсчитать потенциалы ai и bj и цикл расчетов повторяется.
Итак, мы приходим к следующему алгоритму решения транспортной задачи методом потенциалов.
1. Взять любой опорный план перевозок, в котором отмечены m + n - 1 базисных клеток (остальные клетки свободные).
2. Определить для этого плана платежи (ai и bj ) исходя из условия, чтобы в любой базисной клетке псевдостоимости были равны стоимостям. Один из платежей можно назначить произвольно, например, положить равным нулю.
3. Подсчитать псевдостоимости či,j = ai + bj для всех свободных клеток. Если окажется, что все они не превышают стоимостей, то план оптимален.
4. Если хотя бы в одной свободной клетке псевдостоимость превышает стоимость, следует приступить к улучшению плана путём переброски перевозок по циклу, соответствующему любой свободной клетке с отрицательной ценой (для которой псевдостоимость больше стоимости).
5. После этого заново подсчитываются платежи и псевдостоимости, и, если план ещё не оптимален, процедура улучшения продолжается до тех пор, пока не будет найден оптимальный план.
Так в нашем примере после 2 циклов расчетов получим оптимальный план вида:
При этом стоимость всей перевозки изменялась следующим образом: F0 = 723,
F1 = 709,
F2 = Fmin = 703.
Следует отметить так же, что оптимальный план может иметь и другой вид, но его стоимость останется такой же Fmin = 703.
Транспортная задача с неправильным балансом.
В предыдущих случаях мы рассматривали только такую задачу о перевозках, в которой сумма запасов ровна сумме заявок:
å аi = å bj ( где i=1,...,m ; j=1,...,n ) (4)
Это класическая транспортная задача, иначе называемая, транспортной задачей с правильным балансом. Встречаются такие варианты транспортной задачи где условие (4) нарушено. В этих случаях говорят о транспортной задаче с неправильным балансом.
Баланс транспортной задачи может нарушаться в 2-ух направлениях:
1. Сумма запасов в пунктах отправления превышает сумму поданных заявок
å аi > å bj ( где i=1,...,m ; j=1,...,n );
2. Сумма поданных заявок превышает наличные запасы
å аi < å bj ( где i=1,...,m ; j=1,...,n );
Условимся первый случай называть “Транспортной задачей с избытком запасов“, а второй — “Транспортной задачей с избытком заявок”.
Рассмотрим последовательно эти два случая:
Транспортная задача с избытком запасов.
В пунктах A1, A2, ... , Am имеются запасы груза a1, a2, ... , am; пункты B1, B2, ... , Bn подали заявки b1, b2, ... , bn, причём
å аi > å bj ( где i=1..m ; j=1..n ).
Требуется найти такой план перевозок (X), при котором все заявки будут выполнены, а общая стоимость перевозок минимальна. Очевидно при этой постановке задачи некоторые условия-равенства транспортной задачи превращаются в условия-неравенства, а некоторые — остаются равенствами.
n
å Xi,j ≤ ai (i=1, ... , m);
j=1
m
å Xi,j = bj (j=1, ... , n).
Вместе с этой лекцией читают "4.1 Исторический поворот России".
i=1
Мы умеем решать задачу линейного программирования, в какой бы форме — равенств или неравенств ни были бы заданы её условия. Поставленная задача может бать решена, например, обычным симплекс-методом. Однако, задачу можно решить проще, если искусственным приёмом свести её к ранее рассмотренной транспортной задаче с правильным балансом. Для этого, сверх имеющихся n пунктов назначения В1, B2, ... , Bn, введём ещё один, фиктивный, пункт назначения Bn+1, которому припишем фиктивную заявку, равную избытку запасов над заявками
bn+1 = å аi - å bj ( где i=1,...,m ; j=1,...,n ) ,
а стоимость перевозок из всех пунктов отправления в фиктивный пункт назначения bn+1 будем считать равным нулю. Введением фиктивного пункта назначения B n+1 с его заявкой b n+1 мы сравняли баланс транспортной задачи и теперь его можно решать как обычную транспортную задачу с правильным балансом.
Транспортная задача с избытком заявок .
Эту задачу можно свести к обычной транспортной задаче с правильным балансом, если ввести фиктивный пункт отправления Am+1 с запасом am+1 равным недостающему запасу и стоимость перевозок из фиктивного пункта отправления во все пункты назначения принять равным нулю.