Научная статья на тему 'ОСОБЫЙ СЛУЧАЙ КЛАССИЧЕСКОГО МЕТОДА ВЕТВЕЙ И ГРАНИЦ ДЛЯ ЗАДАЧИ КОММИВОЯЖЁРА'

ОСОБЫЙ СЛУЧАЙ КЛАССИЧЕСКОГО МЕТОДА ВЕТВЕЙ И ГРАНИЦ ДЛЯ ЗАДАЧИ КОММИВОЯЖЁРА Текст научной статьи по специальности «Математика»

CC BY
94
18
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ЗАДАЧА КОММИВОЯЖЁРА / TRAVELLING SALESMAN PROBLEM / МЕТОД ВЕТВЕЙ И ГРАНИЦ / BRANCH AND BOUND METHOD / ОСОБЫЙ СЛУЧАЙ / SPECIAL CASE / ЗАПРЕТ ВЕТВЛЕНИЯ / BRANCHING BAN

Аннотация научной статьи по математике, автор научной работы — Фомичёв М.И.

Классический алгоритм, реализующий метод ветвей и границ для решения задачи коммивояжёра, предложенный в 1963 году Дж. Литл, К. Мурти, Д. Суини и К. Кэрол, остаётся по настоящее время самым востребованным алгоритмом при решении задачи нахождения гамильтонового цикла минимальной стоимости в полном графе. Существует много различных источников, в которых представлен псевдокод алгоритма с текстовыми комментариями. Однако в этих источниках не уделяется внимание некоторым особым случаям. Анализу одного из таких особых случаев и посвящена настоящая статья.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ONE SPECIAL CASE OF THE BRANCH AND BOUND ALGORITHM FOR THE TRAVELLING SALESMAN PROBLEM

The classical Branch and Bound algorithm for the travelling salesman problem, presented in 1963 by Little J.D.C., Murty K.G., Sweeney D.W., Karel C., is nowadays one of the most popular algorithms to find a minimum Hamiltonian cycle in a complete graph. There are many literature references having an algorithm pseudocode with comments. However, there are some special cases which are not discussed in these references. One of these cases is analyzed in this article.

Текст научной работы на тему «ОСОБЫЙ СЛУЧАЙ КЛАССИЧЕСКОГО МЕТОДА ВЕТВЕЙ И ГРАНИЦ ДЛЯ ЗАДАЧИ КОММИВОЯЖЁРА»

when selecting maintenance options the costs of ensuring the operational readiness of a group of ships are taken.

Статья поступила в редакцию 16.11.2016 г.

УДК 519.854.2

М.И. Фомичёв, магистрант НИУ «ВШЭ» 101000, г. Москва, ул. Мясницкая, 20.

ОСОБЫЙ СЛУЧАЙ КЛАССИЧЕСКОГО МЕТОДА ВЕТВЕЙ И ГРАНИЦ ДЛЯ ЗАДАЧИ КОММИВОЯЖЁРА

Ключевые слова: задача коммивояжёра, метод ветвей и границ, особый случай, запрет ветвления.

Классический алгоритм, реализующий метод ветвей и границ для решения задачи коммивояжёра, предложенный в 1963 году Дж. Литл, К. Мурти, Д. Суини и К. Кэрол, остаётся по настоящее время самым востребованным алгоритмом при решении задачи нахождения гамильтонового цикла минимальной стоимости в полном графе. Существует много различных источников, в которых представлен псевдокод алгоритма с текстовыми комментариями. Однако в этих источниках не уделяется внимание некоторым особым случаям. Анализу одного из таких особых случаев и посвящена настоящая статья.

Введение

Целый ряд практических задач в области логистики сводится к классической задаче коммивояжера. Обилие эвристических методов её решения не означает отказа от возможности получения точных решений этой задачи. Классический алгоритм, реализующий метод ветвей и границ для решения задачи коммивояжёра, предложенный в 1963 году Дж. Литл, К. Мурти, Д. Суини и К. Кэрол [1], и в настоящее время остаётся востребованным алгоритмом точного решения задачи нахождения гамильтонового цикла минимальной стоимости в полном взвешенном графе. Не смотря на достаточно детальное описание алгоритма в различных источниках, например в [2], [3] и [4], в том числе в оригинальной статье [1], некоторым особым случаям метода не уделяется должного внимания. Анализу одного из таких особых случаев и посвящёна настоящая статья.

Постановка задачи коммивояжёра

Содержательная постановка задачи состоит в том, что коммивояжёр должен посетить ряд городов с целью рекламы и продажи своих товаров. Предполагается, что между каждой парой городов существует собственное транспортное сообщение. Будем называть туром такой порядок посещения, при котором каждый город посещается только один раз. Стоимости проезда между городами известны, причем, в общем случае, стоимость проезда туда и обратно различна. Собственно, сама задача состоит в том, чтобы найти тур коммивояжёра с минимальной стоимостью. Очевидно, что число туров - конечно, и мы можем решить задачу прямым перебором. Но, к сожалению, полное множество содержит (п - 1)! туров, и переборный алгоритм решения становится для реальных размерностей задачи совершенно неприемлемым.

Постановка задачи в терминах теории графов строится путём ассоциации городов с вершинами ориентированного графа, а путей сообщения и стоимостей проезда - с 68

нагруженными дугами. Мы получаем полный ориентированный асимметричный граф на п вершинах без собственных петель, задаваемый матрицей стоимостей C = (сг;). Задача называется симметричной, если стоимость проезда между каждыми двумя городами не зависит от направления, и несимметричной, если это не так. Отсутствие

собственных петель может быть формализовано как cij = да V/ = 1,п . Тогда задача формулируется как задача нахождения покрывающего (полного) цикла наименьшей стоимости, который и называется туром на полном ориентированном графе, заданном несимметричной (в общем случае) матрицей стоимостей С [2].

Поскольку тур - это полный цикл по всем вершинам, то начальная вершина тура может быть выбрана произвольно. Фиксируем вершину с номером один, и считаем, что некоторая перестановка х из множества я(2, п) задаёт порядок обхода вершин, начиная с первой, и после последней вершины, заданной этой перестановкой, мы снова возвращаемся в начало тура. Таким образом, компоненты вектора X в пространстве

ЕГП-1

- - - это упорядоченные числа от двух до п, а сам вектор ассоциирован с некоторой перестановкой из я(2, п) и мы можем записать

х е ^(2, n), xt е {2,..., n}, i = 1, n -1, xi Ф Xj, i Ф j. (1)

Определим далее отображение N x N —^^ R+, (i, j) ^ c(i, j), (i, i) ^ ж, которое

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

х = (х1,., xn-1) е п(2,n),

f(х) = c(1, х1) + xü-2 c( xi, xi+1) + c( xn-1ДХ (2)

f (x) ^ min

Описание метода ветвей и границ для задачи коммивояжёра

Общая идея метода ветвей и границ [5] предполагает разделение всего множества допустимых решений на подмножества с целью дальнейшего сокращения перебора -это процедура ветвления. С каждым таким подмножеством должна быть связана оценка (нижняя граница при поиске минимума), обеспечивающая отсечение тех подмножеств, которые заведомо не содержат оптимального решения - это процедура построения границ. Таким образом, метод приводит к исследованию древовидной модели пространства решений. В рассматриваемой задаче таким исходным множеством является множество всех туров коммивояжера, на котором минимизируется целевой функционал (2), задающий стоимость тура. Излагаемые ниже идеи авторов алгоритма [1] - это, своего рода, классика метода ветвей и границ. Для построения алгоритма необходимо предложить две основные процедуры - ветвление и построение границ. Рассмотрим процедуру ветвления [1]. Построение поискового дерева решений начинается с корня, который будет соответствовать множеству «всех возможных туров», т. е. корень дерева представляет множество R всех (п -1)! возможных туров в задаче с

городами. Ветви, выходящие из корня, определяются выбором одной дуги, например, (к, I). Идея авторов алгоритма [1] состоит в том, чтобы разделить текущее множество туров на два множества: одно - которое, весьма вероятно, содержит оптимальный тур, и другое - которое, вероятно, этого тура не содержит. Для этого предлагается специальный алгоритм выбора дуги (к, I), которая, вполне вероятно, входит в оптимальный тур. Текущее множество разделяется на два множества: множество туров, которое содержит дугу (к, I) и не содержит её. Заметим, что идея авторов алгоритма очень перспективна - если так организовать процесс ветвления, что на каждом

шаге выбирается «правильная» дуга, то весь процесс будет завершен за п шагов. Далее по тексту статьи, мы будем обозначать нижнюю границу множества туров, представленную данной вершиной поискового дерева решений, числом в вершине, а выбранную дугу ветвления - обозначением у дуги поискового дерева. Пример некоторого фрагмента такого дерева решений приведен на рисунке 1.

Рис. 1. Фрагмент поискового дерева решений

Число 15 в корне поискового дерева означает нижнюю границу стоимости всех туров. Далее алгоритм выбирает дугу (1; 4) в качестве дуги ветвления и множества всех туров разделяется на множество туров, которые содержат дугу (1; 4) (обозначение дуги дерева решений 1^4) и которые не содержат дугу (1; 4) (обозначение дуги дерева решений 1 4). На следующем этапе работы алгоритма выбирается множество туров, которое соответствует вершине с нижней границей 15. Это множество туров уже делится на два подмножества: подмножество туров, которые содержат дугу (2; 3), и подмножество туров, которые не содержат дугу (2; 3).

Как было сказано, с каждой вершиной дерева связывается нижняя граница стоимости любого тура из этого множества. Очевидно, что задача состоит в получении как можно более точных нижних границ. Причина этого следующая. Предположим, что уже получен конкретный полный тур T со стоимостью с(Т). Если нижняя граница, связанная с множеством туров, представленных некоторой вершиной поискового дерева, больше, чем с(Т), то до конца процесса поиска не нужно рассматривать эту и все следующие за ней вершины. В реализации это приводит к усечению поискового дерева решений путем отбрасывания всех листьев поискового дерева, имеющих стоимость большую, чем с(Т). Подробное изложение других этапов метода можно найти, например в [2] и [4].

Схема алгоритма метода ветвей и границ для задачи коммивояжера

Приведем следующую схему алгоритма метода ветвей и границ для задачи коммивояжера, в которой приняты следующие обозначения [2]. Пусть X - текущая вершина поискового дерева, а (к, I) - дуга, по которой происходит ветвление, обозначим вершины, непосредственно следующие за X, через Y и У (см. рисунок 1). Множество У есть подмножество туров из X, проходящих через дугу (к, I) (другими словами к I ), а множество Г - подмножество туров из X, не проходящих через дугу {к, /) (другими словами к I). Вычисленные нижние границы для множеств 7 и У обозначим через с(У) и с( У ) соответственно. Самый дешевый тур, известный алгоритму в данный момент, обозначим через z0, причем в момент инициализации z0 = да. branch_and_bound (п, С) (п - размерность, С - матрица стоимостей) 1. Инициализация.

2. Приведение матрицы стоимостей C.

3. Установка корня поискового дерева решений X = R.

4. Приведение исходной матрицы, вычисление c(X). while (c(X) < z0)

5. Выбор дуги ветвления (k, l).

6. Процесс ветвления. Создание вершины Y и вычисление c( Y ).

7. Процесс ветвления. Создание вершины Y и вычисление c(Y). if размер матрицы стоимостей в вершине Y равен 2 then

8. Проведение исчерпывающей оценки для вершины Y.

if c(Y) < z0 then

9. zo := c(Y).

10. Выбор следующей вершины поискового дерева решений и установка X.

11. Вычисление фрагмента матрицы C, соответствующего выбранной вершине X, на основании пути от корня до текущей вершины.

end (c(X) < z0)

12. Оптимальное решение со стоимостью z0 найдено. end

В целях данной статьи, обратим внимание на некоторые этапы в данной укрупненной схеме:

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

Этап 6. Дуга (k, l) не содержится в турах, которые соответствуют вершине Y . Это означает, что в матрице стоимостей, которая соответствует вершине Y , надо положить сkj = оо. При этом = {/(/О I tniriCf I mine;", где minfj - минимальный элемент в строке, соответвующей вершине к исходного графа, матрицы стоимостей С,

которая соотвутствует вершине Y дерева решений, а müicf - минимальный элемент в столбце, соответвующий вершине l исходного графа, матрицы стоимостей C, которая соотвутствует вершине Y дерева решений.

Этап 7. В процессе создания вершины Y выполняется запрет любой дуги из вершины k, и любой дуги, входящей в вершину l (редукция текущей матрицы стоимостей), совместно с запретом дуги (k, l) и дуги, замыкающей какой-либо подцикл, содержащий дугу (k, l), для соответствующей вершины поискового дерева решений. При этом c(Y) = c(X) + h(Y), где h(Y) - результат приведения матрицы стоимостей, которые соответствуют турам, соответствующим вершине Y .

Описание особого случая

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

Расмотрим особую ситуацию на конкретном примере. Данный пример был выявлен в процессе детального тестирования и отладки метода ветвей и границ. Тестиро-

вание проводилось на двух миллионах сгенерированных полных графов размерность 5, элементы этих графов были равномерные псевдослучайные числа от 1 до 100. Ниже

представлена матрица стоимостей рассматриваемого полного графа G, пораждающе-го особый случай метода ветвей и границ.

1 2 3 4 5

1 да 72 33 1 40

2 52 да 70 11 19

3 34 51 да 11 42

4 3 7 10 да 24

5 72 51 72 37 да

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

1 2 3 4 5 тт

1 да 72 33 1 40 1

2 52 да 70 11 19 11

3 34 51 да 11 42 11

4 3 7 10 да 24 3

5 72 51 72 37 да 37

Приведение

по строкам -►

1 2 3 4 5

1 да 71 32 0 39

2 41 да 59 0 8

3 23 40 да 0 31

4 0 2 3 да 21

5 35 14 35 0 да

1 2 3 4 5 1 2 3 4 5

1 да 71 32 0 39 1 да 71 32 0 39

2 41 да 59 0 8 2 41 да 59 0 8

3 23 40 да 0 31 Приведение 3 23 40 да 0 31

4 0 4 7 да 21 по столбцам ь 4 0 2 3 да 21

5 35 14 35 0 да 5 35 14 35 0 да

тт 0 4 7 0 8

Таким образом, получается приведённая матрица С.

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

Теперь начинается этап ветвления. Необходимо выбрать дугу для ветления. Согласно [1], выбирается такая дуга, чтобы нижняя оценка множества туров, которые не содержат выбранную дугу, была максимальная. В нашем случае, такой дугой является дуга (1; 4). На рис. 2 представлено дерево решений после первого ветвления.

Рис. 2. Дерево решений после первого ветвления графа

Теперь необходимо выбрать лист дерева решения, который соответствует минимальной нижней границы. В нашем случае, такая нижняя оценка - 107. Этой вершине соотвутствует следущая матрица стоимостей:

1 2 3 4 5

1 да 42 0 да 6

2 41 да 52 0 0

3 23 36 да 0 23

4 0 0 0 да 13

5 35 10 28 0 да

Стоит заметить, что у этой матрицы стоимостей уже запрещена дуга (1; 4) и проведена редукция.

Теперь переходим к следующему процессу ветвления. Согласно правилу выбора дуги ветвления, мы должны выбрать дугу (3; 4). Результатом будет дерево решений, изображенное на рисунке 3.

Рис. 3. Дерево решений после второго ветвления

Следующая вершина для ветвления - вершина, которая соответствует нижней границе 115. Детали расчёта матрицы стоимостей и выбора дуги опустим, потому что они не отображают рассматриваемый особый случай и метод работы не отличается от классического алгоритма. Дерево решений, отображающее результат ветвления, представлено на рис. 4.

Рис. 4. Дерево решений после третьего ветвления

Следующая вершина для ветвления - вершина, которая соответствует нижней границе 117. Детали расчёта матрицы стоимостей и выбора дуги также опустим. Дерево решений, отображающее результат ветвления, представлено на рис. 5.

Г 1151 1107.1

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

2^ -у* 5 3->4 4

133: 1150 1 М17^ ИЗО

2 —у Ъ у' 5

(135 ; ( 164 )

Рис. 5. Дерево решений после четвёртого ветвления

Следующая вершина для ветвления - вершина, которая соответствует нижней границе 130. Ей соответствует следующая матрица стоимостей:

1 2 3 4 5

1 да 42 0 да 6

2 41 да 52 0 0

3 0 13 да да 0

4 0 0 0 да 13

5 35 10 28 0 да

Дуга для ветвления - (4;2). Результатом будет дерево решений, изображенное на рисунке 6.

Рис. 6. Дерево решений после пятого ветвления

Следующая вершина для ветвления - вершина, которая соответствует нижней границе 130. Ей соответствует следующая матрица стоимостей:

1 3 4 5

1 да 0 да 6

2 41 52 да 0

3 0 да да 0

5 35 28 0 да

Стоит обратить внимание, на то, что помимо запрета дуги (1; 4) и дуги (3; 4), также удалена строка, которая соответствует вершине 4 и столбец, который соответствует вершине 2 и запрещен выбор дуги (2; 4) для запрета возникновения возможных подциклов.

Дугой ветвления является дуга (2; 5). Дерево решений, отображающее результат ветвления, представлено на рисунке 7. На рисунке 7 обозначены вершины дерева решений X, У и У $, которые соответствуют множеству туров с нижней границей 130, содержащие дугу (2; 5) и не содержащую дугу (2; 5) .

Рис. 7. Дерево решений после пятого ветвления

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

1 3 4

1 да 0 да

3 0 да да

5 35 28 да

Для оценки нижней границы необходимо привести матрицу стоимостей, но это сделать невозможно, так как столбец, который соответствует вершине 4, состоит только из да. Иными словами, возникает ситуация, когда множество возможных туров - пустое.

Анализ особого случая

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

При возникновении такой ситуации возникают два естественных вопроса:

1. Когда необходимо реагировать на такую ситуацию?

2. Что делать в случае её возникновения?

Разумеется, эти два вопроса необходимо решать совместно. Предлагается два возможных варианта решения:

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

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

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

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

Заключение

Таким образом, в статье показано, что:

- в классическом методе ветвей и границ [1] есть особый случай, который не был прежде рассмотрен;

- проведён детальный анализ данного особого случая и выявлены причины, которые могут привести к его возникновению;

- проанализированы возможные варианты решения особого случая.

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

Несмотря на то, что данный особый случай возникает очень редко (у автора работы он возник один раз из двух миллионнов тестовых сценариев), его все равно необходимо учитывать. Если его не учесть при реализации метода ветвей и границ, то результат обработки графа G зависит от особенностей реализации алгоритма (начиная от зависания программы и заканчивая получением некорректного значения). Изначально у автора данной работы результатом работы программы над графом G являлся «тур», который не представлял из себя гамильтоновый цикл, кроме того, если сложить дуги, которые входили в этот «тур», то их сумма была на единицу больше, чем стоимость тура, которую рассчитал алгоритм.

Список литературы:

[1] Little J.D.C., Murty K.G., Sweeney D.W., Karel C. An algorithm for the traveling salesman problem // Operat. Res., 11 (1963) pp. 972-989.

[2] Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов. - М.: Мир, 1981. -368 с.

[3] Сигал И.Х., Иванова А.П. Введение в прикладное дискретное программирование: модели и вычислительные алгоритмы. - 2-е изд. б испр и доп. - М.: ФИЗМАТЛИТ, 2007. -304 с.

[4] Ульянов М.В. Ресурсно-эффективные компьютерные алгоритмы. Разработка и анализ. - М. : ФИЗМАТЛИТ, 2008. - 304 с.

[5] Land A.H., Doig A.G. An automatic method of solving discrete programming problems // Econometrica. - 1960. - V. 28 - № 3. - P. 497-520.

ONE SPECIAL CASE OF THE BRANCH AND BOUND ALGORITHM FOR THE TRAVELLING SALESMAN PROBLEM

M.I. Fomichev

Key words: travelling salesman problem, branch and bound method, special case, branching ban.

The classical Branch and Bound algorithm for the travelling salesman problem, presented in 1963 by Little J.D.C., Murty K.G., Sweeney D.W., Karel C., is nowadays one of the most popular algorithms to find a minimum Hamiltonian cycle in a complete graph. There are many literature references having an algorithm pseudocode with comments. However, there are some special cases which are not discussed in these references. One of these cases is analyzed in this article.

Статья поступила в редакцию 04.10.2016 г.

i Надоели баннеры? Вы всегда можете отключить рекламу.