Формулировка задачи коммивояжера и алгоритмы ее решения

Автор работы: Пользователь скрыл имя, 20 Мая 2013 в 11:15, реферат

Описание работы

В 1859 г. У. Гамильтон придумал игру “Кругосветное путешествие”, состоящую в отыскании такого пути, проходящего через все вершины (города, пункты назначения) графа, изображенного на рис. 1, чтобы посетить каждую вершину однократно и возвратиться в исходную. Пути, обладающие таким свойством, называются гамильтоновыми циклами.
Задача о гамильтоновых циклах в графе получила различные обобщения. Одно из этих обобщений – задача коммивояжера, имеющая ряд применений в исследовании операций, в частности при решении некоторых транспортных проблем.

Содержание работы

Введение 3
Задача коммивояжера 4
Общее описание 4
Методы решения задачи коммивояжера 5
Жадный алгоритм. 5
Деревянный алгоритм 8
Метод ветвей и границ 10
Алгоритм Дейкстры 14
Анализ методов решения задачи коммивояжера 17
Практическое применение задачи коммивояжера 18
Выводы 20
Литература 21

Файлы: 1 файл

реферат.docx

— 155.31 Кб (Скачать файл)

1.2.4. Алгоритм  Дейкстры

Одним из вариантов решения ЗК является вариант нахождения кратчайшей цепи, содержащей все города. Затем полученная цепь дополняется начальным городом  – получается искомый тур.

Можно предложить много процедур решения  этой задачи, например, физическое моделирование. На плоской доске рисуется карта  местности, в города, лежащие на развилке дорог, вбиваются гвозди, на каждый гвоздь надевается кольцо, дороги укладываются верёвками, которые привязываются  к соответствующим кольцам. Чтобы  найти кратчайшее расстояние между  i и k, нужно взять I в одну руку и k в другую и растянуть. Те верёвки, которые натянутся и не дадут разводить руки шире и образуют кратчайший путь между i и k. Однако математическая процедура, которая промоделирует эту физическую, выглядит очень сложно. Известны алгоритмы попроще. Один из них – алгоритм Дейкстры, предложенный Дейкстрой ещё в 1959г. Этот алгоритм решает общую задачу:

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

Алгоритм использует три массива  из n (= числу вершин сети) чисел каждый. Первый массив a содержит метки с двумя значениями: 0 (вершина ещё не рассмотрена) и 1 (вершина уже рассмотрена); второй массив b содержит расстояния – текущие кратчайшие расстояния от vi до соответствующей вершины; третий массив c содержит номера вершин – k-й элемент ck есть номер предпоследней вершины на текущем кратчайшем пути из vi в vk. Матрица расстояний Dik задаёт длины дуг dik; если такой дуги нет, то dik присваивается большое число Б, равное “машинной бесконечности”.

Теперь можно описать:

Алгоритм Дейкстры

1(инициализация).

В цикле от одного до n заполнить нулями массив а; заполнить числом i массив с: перенести i-тую строку матрицы D в массив b;

a[i]:=1; c[i]:=0; {i-номер стартовой вершины}

2(общий шаг).

Найти минимум среди неотмеченных (т. е. тех k, для которых a[k]=0); пусть минимум достигается на индексе j, т. е. bj£bk; a[j]:=1;

0

23

12

23

0

25

22

35

12

25

0

18

18

0

20

22

0

23

14

20

23

0

24

14

24

0

16

35

16

0

табл. 12




если bk>bj+djk то (bk:=bj+djk; ck:=j) {Условие означает, что путь vi..vk длиннее, чем путь  vi..vj,vk . Если все a[k] отмечены, то длина пути vi..vk равна b[k]. Теперь надо перечислить вершины, входящие в кратчайший путь}

3(выдача ответа).

{Путь vi..vk выдаётся в обратном порядке следующей процедурой:}

3.1. z:=c[k];

3.2. Выдать z;

3.3. z:=c[z]; Если z = 0, то конец, иначе перейти к 3.2.

Для выполнения алгоритма нужно  n  раз просмотреть массив b из n элементов, т. е. алгоритм Дейкстры имеет квадратичную сложность. Проиллюстрируем работу алгоритма Дейкстры численным примером (для большей сложности, считаем, что некоторые города (вершины)  i,j не соединены между собой, т. е. D[i,j]=∞). Пусть, например, i=3. Требуется найти кратчайшие пути из вершины 3. Содержимое массивов a,b,c после выполнения первого пункта показано на табл. 12:

 

1

2

3

4

5

6

7

8

a

0

0

1

0

0

0

0

0

b

12

25

0

18

c

3

3

0

3

3

3

3

3

табл. 13





 

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

   

1

2

3

4

5

6

7

8

min bk=12

a

1

0

1

0

0

0

0

0

b

12

25

0

18

c

3

3

0

3

3

3

3

3

min bk=18

a

1

0

1

1

0

0

0

0

b

12

25

0

18

38

c

3

3

0

3

3

4

3

3

min bk=25

a

1

1

1

1

0

0

0

0

b

12

25

0

18

47

38

60

c

3

3

0

3

2

4

3

2

min bk=38

a

1

1

1

1

0

1

0

0

b

12

25

0

18

47

38

62

60

c

3

3

0

3

2

4

6

2

min bk=47

a

1

1

1

1

1

1

0

0

b

12

25

0

18

47

38

61

60

c

3

3

0

3

2

4

5

2

min bk=60

a

1

1

1

1

1

1

0

1

b

12

25

0

18

47

38

61

60

c

3

3

0

3

2

4

5

2




Таким образом, для решения ЗК нужно  n раз применить алгоритм Дейкстры следующим образом.

Возьмём произвольную пару вершин

j,k. Исключим непосредственное ребро C[j,k]. С помощью алгоритма Дейкстры найдём кратчайшее расстояние между городами j..k. Пусть это расстояние включает некоторый город m. Имеем часть тура j,m,k. Теперь для каждой пары соседних городов (в данном примере – для j,m и m,k) удалим соответственное ребро и найдём кратчайшее расстояние. При этом в кратчайшее расстояние не должен входить уже использованный город.

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

 

1.2.6. Анализ  методов решения задачи коммивояжера

 

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

Алгоритм лексического перебора

Кол-во городов

Время обработки, c

Вероятность неправильного ответа, %

Тип алгоритма

10

41

0

точный

12

12000=3ч.20мин

0

32

-*

0

100

-*

0

Метод ветвей и границ

10

~0

0

точный

32

~0.0001

0

100

1.2

0

Мой алгоритм решения ЗК

10

0.001

0

приближенный

32

2.5

0

100

6

0


 

*- ЗК с таким количеством городов  методом лексического перебора  современный компьютер не смог  бы решить даже за всё время  существования Вселенной.

Как видим по результатам этой таблицы, алгоритм лексического перебора можно  применять лишь в случае с количеством  городов 5..12. Метод ветвей и границ, наряду с моим методом, можно применять  всегда. Хотя мой метод я отнёс  к приближённым алгоритмам, он фактически является точным, так как доказать обратное ещё не удалось.

 

 

 

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

 

Кроме очевидного применения ЗК на практике, существует ещё ряд задач, сводимых к решению ЗК.

Задача о производстве красок. Имеется производственная линия для производства n красок разного цвета; обозначим эти краски номерами 1,2… n. Всю производственную линию будем считать одним процессором.. Будем считать также, что единовременно процессор производит только одну краску, поэтому краски нужно производить в некотором порядке Поскольку производство циклическое, то краски надо производить в циклическом порядке p=(j1,j2,..,jn,j1). После окончания производства краски i и перед началом производства краски j      надо отмыть оборудование от краски i. Для этого требуется время C[i,j]. Очевидно, что C[i,j] зависит как от i, так и от j, и что, вообще говоря,C[i,j]≠C[j,i]. При некотором выбранном порядке придется на цикл производства красок потратить время

Где tk - чистое время производства k-ой краски (не считая переналадок). Однако вторая сумма в правой части постоянна, поэтому полное время на цикл производства минимизируется вместе с общим временем на переналадку.

Таким образом, ЗК и задача о минимизации  времени переналадки – это  просто одна задача, только варианты ее описаны разными словами.

Задача о дыропробивном  прессе. Дыропробивной пресс производит большое число одинаковых панелей – металлических листов, в которых последовательно по одному пробиваются отверстия разной формы и величины. Схематически пресс можно представить в виде стола, двигающегося независимо по координатам x, y, и вращающегося над столом диска, по периметру которого расположены дыропробивные инструменты разной формы и величины. Каждый инструмент присутствует в одном экземпляре. Диск может вращаться одинаково в двух направлениях (координата вращения z). Имеется собственно пресс, который надавливает на подвешенный под него инструмент тогда, когда под инструмент подведена нужная точка листа.

Операция пробивки j-того отверстия характеризуется четверкой чисел (xj,yj,zj,tj),, где               xj,yj- координаты нужного положения стола, zj - координата нужного положения диска и tj - время пробивки j-того отверстия.

Производство панелей носит  циклический характер: в начале и  конце обработки каждого листа  стол должен находиться в положениях (x0, y0) диск в положении z0 причем в этом положении отверстие не пробивается. Это начальное состояние системы можно считать пробивкой фиктивного нулевого отверстия. С параметрами (x0,y0,z0,0).

Чтобы пробить j-тое отверстие непосредственно после i-того необходимо произвести следующие действия:

1. Переместить стол по оси  x из положения xi в положение xj, затрачивая при этом время t(x)(|xi-xj|)=ti,j(x)   

  1. Проделать то же самое по оси y, затратив время ti,j(y)   
  2. Повернуть головку по кратчайшей из двух дуг из положения zi в положение zj, затратив время ti,j(z) .  
  3. Пробить j-тое отверстие, затратив время tj.

Конкретный вид функций t(x), t(y), t(z) зависит от механических свойств пресса  и достаточно громоздок. Явно выписывать эти функции нет необходимости

Действия 1-3 (переналадка с  i-того отверстия j-тое) происходит одновременно, и пробивка происходит немедленно после завершения самого длительного из этих действий. Поэтому

С[i,j] = max(t(x), t(y), t(z))

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

 

 

Выводы

 

  1. Изучены эвристический, приближенный и точный алгоритмы решения ЗК. Точные алгоритмы решения ЗК – это полный перебор или усовершенствованный перебор. Оба они, особенно первый, не эффективны при большом числе вершин графа.
  2. Предложен собственный эффективный метод решения ЗК на основе построения выпуклого многоугольника и включения в него центральных вершин (городов).
  3. Проведён анализ наиболее рациональных методов решения ЗК и определены области их эффективного действия: для малого числа вершин можно использовать точный метод лексического перебора;  для большого числа вершин рациональнее применять метод ветвей и границ или метод автора работы (Анищенко Сергея Александровича).
  4. Изучены практические применения ЗК и задачи с переналадками, сводимые к ЗК.
  5. Приведены тексты программ, позволяющие решить ЗК различными методами.

Информация о работе Формулировка задачи коммивояжера и алгоритмы ее решения