Задача коммивояжера

Автор работы: Пользователь скрыл имя, 11 Декабря 2012 в 14:54, реферат

Краткое описание

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

Прикрепленные файлы: 1 файл

Задача коммивояжера1.doc

— 309.00 Кб (Скачать документ)

Введение

 

Актуальность данной темы заключается  в следующем, Для решения оптимизационных  и других задач строительства  нередко прибегают к формулировке поставленной задачи в виде каких-то хорошо известных математических задач: транспортная задача, задача поиска оптимального пути (задача коммивояжера) и другие. Сформулированную таким образом задачу решают, используя такие математические методы, как метод ветвей и границ, симплексный метод, метод Фогеля (приближенного решения), метод дефектов и другие методы.

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

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

 

 

 

1. Постановка задачи

 

Коммивояжер (бродячий торговец) должен выйти из первого города, посетить по разу в неизвестном порядке города 2,3,4…n и вернуться в первый город. Расстояния между всеми городами известны. В каком порядке следует обходить города, чтобы замкнутый путь коммивояжера был кратчайшим? В терминах теории графов: найти гамильтонов цикл в графе минимальной длины.

Задача коммивояжера является так  называемой NP-трудной задачей, т.е. задачей, точное решение которой в общем случае может быть получено только за экспоненциальное время. Следовательно, решать ее переборным алгоритмом неэффективно при большом количестве вершин графа.

Одним из подходов к ее решению является сокращение перебора методом ветвей и границ. Этот метод  позволяет опознать бесперспективные частичные решения, в результате чего от дерева поиска на одном шаге отсекается целая ветвь. Тем не менее, удовлетворительных оценок быстродействию алгоритма Литтла, основанного на этом методе, и родственных алгоритмов нет, хотя практика показывает, что на современных ЭВМ они иногда позволяют решить задачу коммивояжера для графов с количеством вершин, меньшим 100.

Впервые метод ветвей и границ был предложен Лендом и Дойгом в 1960 для решения общей  задачи целочисленного линейного программирования. Интерес к этому методу и фактически его «второе рождение» связано с работой Литтла, Мурти, Суини и Кэрела, посвященной задаче коммивояжера. Начиная с этого момента, появилось большое число работ, посвященных методу ветвей и границ и различным его модификациям. Столь большой успех объясняется тем, что авторы первыми обратили внимание на широту возможностей метода, отметили важность использования специфики задачи и сами воспользовались спецификой задачи коммивояжера. В основе метода ветвей и границ лежит идея последовательного разбиения множества допустимых решений на подмножества (стратегия «разделяй и властвуй»). На каждом шаге метода элементы разбиения подвергаются проверке для выяснения, содержит данное подмножество оптимальное решение или нет. В качестве примера конкретного применения метода может быть предложена прикладная задача, связанная с проблемой размещения и обслуживания оборудования, в которой требуется определить оптимальную траекторию циклического маршрута движения робота-транспортера по траектории цеха с целью периодического обслуживания оборудования.

 

 

2. Теория графов

 

2.1 Основные понятия теории графов. Определения

 

Граф G задается множеством точек или вершин x1, x2, …xn (которое обозначается через X) и множеством линий или ребер a1, a2, …am (которое обозначается символом А), соединяющих между собой все или часть этих точек. Таким образом, граф G полностью задается парой (X, A).

Если ребра из множества А  ориентированны, что обычно показывается стрелкой, то они называются дугами, и граф с такими ребрами называют ориентированным графом. Другое, употребляемое  чаще описание ориентированного графа G состоит в задании множества вершин Х и соответствия Г, которое показывает, как между собой связаны вершины. Граф в этом случае обозначается парой G=(X, Г).

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

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

Иногда дугам графа G сопоставляются (приписываются) числа – дуге (xi, xj) ставится в соответствие некоторое число ci j, называемое весом, или длинной. Тогда граф G называется графом со взвешенными дугами. Иногда веса приписываются вершинам xi графа, и тогда получается граф со взвешенными вершинами. Если в графе веса приписаны и дугам, и вершинам, то он называется просто взвешенным. При рассмотрении пути , представленного последовательностью дуг, за его вес (или длину) принимается число , равное сумме весов всех дуг, входящих в , т.е. .

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

коммивояжер граф задача метод

 

Если G = (X, A) – неориентированный граф с n вершинами, то остовным деревом (или, короче, остовом) графа G называется всякий остовный подграф G, являющийся деревом (т.е. графом не имеющим циклов, в котором каждая пара вершин соединена одной и только одной простой цепью). Например, если G – граф, показанный на рис. 1а, то графы на рис. 1.б, в являются остовом этого графа.

 

2.2 Задача коммивояжера

 

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

Постановка задачи. Коммивояжер (бродячий торговец) должен выйти из первого  города, посетить по разу в неизвестном  порядке города 2,3,4…n и вернуться  в первый город. Расстояния между всеми городами известны. В каком порядке следует обходить города, чтобы замкнутый путь коммивояжера был кратчайшим? В терминах теории графов: найти гамильтонов цикл в графе минимальной длины.

Задача коммивояжера является так  называемой NP-трудной задачей, т.е. задачей, точное решение которой в общем случае может быть получено только за экспоненциальное время. Следовательно, решать ее переборным алгоритмом неэффективно при большом количестве вершин графа.

Решение обобщенной задачи коммивояжера

Пусть каждой дуге (i, j) графа (I, U) поставлено в соответствие число называемое длиной дуги.

Рассмотрим задачу: определить кратчайший путь из множества А в множество  В, пересекающий каждое множество разбиения  один и только один раз. Очевидно, что если каждое множество разбиения состоит из одного элемента и , то имеем обычную задачу коммивояжера.

Определим функцию  : положим для произвольного пути . Итак, значениями функции будут множества номеров подмножеств разбиения, которые пересекает путь . Пусть каждое множество Фi, , состоит из всевозможных подмножеств множества {1, 2,…, p}, a . Применим для решения этой задачи следующий алгоритм.

Достаточной системой функций в  данном случае будут функции

Обозначим через  число элементов произвольного конечного множества А.

 

Шаг 0. Положим  . Пометим вершины признаками . Для помеченных вершин увеличим на 1. Рассмотрим одну из пометок и перейдем к шагу 1.

Шаг 1. Пусть  – рассматриваемая пометка. Пометим признаками все те вершины, для которых . Для вновь помеченных вершин увеличим на 1.

Рассмотрим следующую  помеченную вершину, и будем повторять  помечивания до тех пор, пока не пометим некоторую вершину так, чтобы для признака пометки этой вершины выполнялось условие или пока нельзя будет сделать дальнейших пометок. В первом случае перейдем к шагу 2. а во втором к шагу 3.

Шаг 2. Строим кратчайший допустимый путь от вершины  . Пусть – пометка вершины, для которой . Перейдём к вершине и рассмотрим пометку вершины,

для которой  . Далее перейдем к вершине , с пометкой , для которой . Последовательность и является кратчайшим допустимым путем.

Шаг 3. Пусть  – множество помеченных вершин. Рассмотрим все возможные числа при . Определим среди этих чисел наименьшее и возьмем его за новое приближение к длине искомого пути. Затем перейдем к шагу 1.

Этот алгоритм можно  изменить. Если для некоторой пометки  при всех j, для которых или , то путь соответствующий этой пометке, уже продлен во все смежные с вершины. Следовательно, для таких пометок признаки можно стирать.

 

2.3 Метод ветвей и границ (МВГ)

 

Представим, что необходимо обойти все города страны. Так как  их много, то определить кратчайший путь затруднительно. Тогда можно выбрать  некоторое разбиение множества  городов, например, рассматривать республики, области или районы, и определить кратчайший путь, пересекающий каждое из выбранных подмножеств разбиения только один раз. Затем уже в пределах выбранных подмножеств достроить полученный путь до требуемого. Такой подход используется в методе ветвей и границ. Этот метод позволяет опознать бесперспективные частичные решения, в результате чего от дерева поиска на одном шаге отсекается целая ветвь. Тем не менее, удовлетворительных оценок быстродействию алгоритма Литтла, основанного на этом методе, и родственных алгоритмов нет, хотя практика показывает, что на современных ЭВМ они иногда позволяют решить задачу коммивояжера для графов с количеством вершин, меньшим 100.

Впервые метод ветвей и границ был предложен Лендом и Дойгом в 1960 для решения общей  задачи целочисленного линейного программирования. Интерес к этому методу и фактически его «второе рождение» связано с работой Литтла, Мурти, Суини и Кэрела, посвященной задаче коммивояжера. Начиная с этого момента, появилось большое число работ, посвященных методу ветвей и границ и различным его модификациям. Столь большой успех объясняется тем, что авторы первыми обратили внимание на широту возможностей метода, отметили важность использования специфики задачи и сами воспользовались спецификой задачи коммивояжера.

Описание метода ветвей и границ

Пусть х1 – центр куба Х. Вычисляем и присваиваем это значение рекорду . Разбиваем куб Х 1i со стороной ½ и вычисляем значения целевой функции в их центрах: , i= 1,… 2n, обновляя по ходу вычислений значение рекорда . Проверяем выполнение условия для i=1,…, 2n и отбрасываем соответствующие подкубы. Каждый из оставшихся разбиваем на 2n одинаковых подкубов Х2ij со стороной ¼ и поступаем как прежде. На любом шаге у нас формируется множество К «кубиков» со сторонами 2-l, l>=2, целое. Правило выбора очередного кубика для разбиения называется правилом ветвления – возможные варианты приводятся ниже. Кубики со стороной не больше исключаются из множества К – дробление кубика заканчивается. Также исключаются кубики, попавшие в множество (с индексом k – номером кубика) для текущего значения рекорда, – правило отсечения ветвей. Рекорд обновляется при получении меньшего значения целевой функции (правило получения границ, т.е. оценок). Значения целевой функции вычисляются в центре каждого нового подкубика, включаемого в К после разбиения выбранного для этого кубика. Алгоритм останавливается, когда К пусто.

 

Рис. 2. Граф-дерево

 

Указанная терминология и название метода определяются тем, что визуально данная схема перебора представляется в виде графа-дерева, корневая вершина которого соответствует  кубу Х, вершины первого яруса  – подкубам Xli, вершины второго яруса – кубикам X2li, подсоединенным к своим порождающим вершинам Xli-го яруса, и т.д. (см. рис. 2). Если кубик исключается из К, его вершина закрывается – из нее не будут идти ветви на следующий ярус. Порядок закрытия вершины определяется правилом отсечения (своим для каждой массовой задачи), порядок раскрытия – правилом ветвления (своим для каждой индивидуальной задачи). Различают два вида правил ветвления по типу построения дерева решений (выбора вершин для раскрытия): «в ширину», когда сначала раскрываются все вершины одного яруса до перехода к следующему, и в «глубину» – всякий раз раскрывается лишь одна (обычно с лучшим значением рекорда) вершина на ярусе до конца ветви. На практике реализуют некоторую смесь, например, первое правило пока хватает машинной памяти (в К не слишком много элементов), затем переключаются на второе. Предпочтительность той или иной стратегии ветвления оценивается каждым вычислителем по-своему, исходя из главной задачи метода ветвей и границ – быстрее получить лучший рекорд, чтобы отсечь больше ветвей. Удачный выбор стратегии ветвления в МВГ (например, на основе имеющейся у вычислителя дополнительной информации или эвристических соображений об объекте) позволяет (хотя и не гарантированно) решать задачи большой размерности.

Отметим, что в худшем случае – не удается отбросить ни одной точки х – и приходим к полному перебору; т.е. указанная экспоненциальная оценка точна на классе всех липшицевых функций.

 

 

 

3.Задача коммивояжера. Пример

Решение.  
Возьмем в качестве произвольного маршрута:  
X0 = (1,2);(2,3);(3,1)  
Тогда F(X0) = 22 + 22 + 12 = 56  
Для определения нижней границы множества воспользуемся операцией редукции или приведения матрицы по строкам, для чего необходимо в каждой строке матрицы D найти минимальный элемент.  
di = min(j) dij

i  j

1

2

3

di

1

M

22

44

22

2

55

M

22

22

3

12

43

M

12


 
   
Затем вычитаем di из элементов рассматриваемой строки. В связи с этим во вновь полученной матрице в каждой строке будет как минимум один ноль.

Информация о работе Задача коммивояжера