ЗАДАЧА № 3
В таблице приведены затраты времени почтальона (в минутах) на проход между пунктами доставки на участке. Используя метод "ветвей и границ", найти маршрут почтальона, при котором затраты времени на его проход будут минимальными. Исходные данные.
Решение:
Задачу решаем методом теории графов, известным как метод "ветвей и границ". Матрица считается приведенной, если в каждой строке и каждом столбце содержит не менее одного нуля. Для приведения исходной матрицы сначала в каждой строке находится наименьший элемент и вычитается из элементов своей строки, затем в приведенной по строкам матрице в каждом столбце находится наименьший элемент и вычитается из элементов своего столбца – получается приведенная матрица. Обозначим за Г множество всех обходов почтальона (т. е. всех простых ориентированных остовных циклов). Поскольку граф – полный, это множество заведомо не пусто. Сопоставим ему число φ(Г), которое будет играть роль значения на этом множестве оценочной функции: это число равно сумме констант приведения данной матрицы весов дуг графа и является оценкой снизу для стоимости минимального тура коммивояжёра. Приведённую матрицу весов данного графа следует запомнить, обозначим ее через С1. Подсчитаем φ(Г). Для этого выполним приведение матрицы весов. Сначала – по строкам:
Теперь − по столбцам:
Сумма констант приведения φ(Г)=2+7+6+2+14+7+4+7=49.
Обозначим полученную матрицу через С1 и найдём в ней самый тяжёлый нуль. Заметим, что замена нулевого элемента на ¥ приводит к изменению лишь двух слагаемых суммы констант приведения φ(Г) – по одному при приведении строк и столбцов. Поэтому вес нуля можно определить суммированием наименьших элементов его строки и столбца. Например, вес нуля в первой строке и четвёртом столбце складывается из минимума по первой строке, равного 6 (cА,Г=cА,Д=6), и минимума по четвёртому столбцу Г, равного 0 (cГ,В=0), без учета самого cА,Г. Итак, запишем приведённую матрицу еще раз, указывая рядом с каждым нулем его вес:
Самым тяжелым оказывается нуль в клетке (А,Г). Разобьём множество Г на две части: множество
Сумма констант приведения матрицы С1,1 здесь равна 7, поэтому φ(Г{(А,Г)})= φ{А,Г}=49+7=56. Сопоставим результат φ(Г{(i,j)}) множеству Г{(i,j)}, (в нашем случае Г{(А,Г)}). Множеству
Матрица С1,2 после приведения
Сумма констант последнего приведения равна 6, так что φ(
В матрице С1,2,1 подсчитаем веса нулей (веса нулей указаны в скобках):
Самым тяжёлым является нуль с номером (В,Г), так что теперь следует рассматривать множества Поскольку, вычеркнув строку В и столбец Г в матрице С1,2, нужно также заменить на ∞ числа в определённых клетках так, чтобы не получалось коротких циклов (длиной меньше n), то в клетке с номером (В,Г) надо поставить символ ∞. Получим матрицу С1,2,1:
Сумма констант остается неизменной, так как матрица не требовала приведения φ(
Сумма констант приведения φ(
Самым тяжелым является нуль с номером (Г,А), теперь рассмотрим множества Вычеркиваем строку Г и столбец А, ставим ∞ в клетке (А,Г) и получаем матрицу С1,2,1,1
Матрица не требует приведения и сумма констант приведения останется без изменений φ( Рассмотрим матрицу С1,2,1,2:
Сумма констант приведения φ( Произведем оценку нулей в матрице С1,2,1,1
Самый тяжелый вес равный 13 имеет нуль в клетке с номером (А,Д), следовательно будем рассматривать множества
Получаем матрицу С1,2,1,1,1:
Матрица С1,2,1,1,1 после приведения
Сумма констант приведения φ( Для множества
Сумма констант приведения φ( Следовательно дальше разрабатываем матрицу
У нас получилось два одинаково тяжелых нуля, разработаем матрицы
Матрица С1,2,1,1,1,1 после приведения
Сумма констант приведения φ ( Рассмотрим матрицу С1,2,1,1,1,2:
Сумма констант приведения φ( (В,Г)(Г,А)(А,Д)(Д,Б)(Б,Е)(Е,В) или В→Г→А→Д→Б→Е→В.
|