домашнее задание на 18.10.2015 г.

advertisement
Домашнее задание по информатике №1
1 Задача о коммивояжере (перебор вариантов)
Классическая формулировка задачи известна уже более 200 лет:
имеются n городов, расстояния между которыми заданы;
коммивояжеру (бродячему торговцу) необходимо выйти из какого-то города,
посетить остальные n-1 городов точно по одному разу и вернуться в
исходный город. При этом маршрут коммивояжера должен быть
минимальной длины (стоимости).
Задача коммивояжера [1] принадлежит классу NP-полных, то есть
неизвестны полиномиальные алгоритмы ее решения. В задаче с n городами
необходимо рассмотреть (n-1)! маршрутов, чтобы выбрать маршрут
минимальной длины. Итак, при больших значениях n невозможно за
разумное время получить результат.
Методы решения задачи
Существует множество методов решения задачи коммивояжера, но
классическими стали такие известные методы, как:
1) поиск в глубину [2, 3];
2) поиск в ширину [4];
3) метод грубой силы или полного перебора (самый долгий) [5].
2 Постановка задачи коммивояжера на графах
Пусть имеется n городов. Расстояния между любой парой городов (i, j)
известны и составляют dij, где i=1, m; j=1, n; i≠j. Если прямого маршрута
сообщения между городами не существует, а также для всех i=j полагаем, что
dij=∞. На этом основании расстояния между городами удобно представить в
виде матрицы
D  dij nn
.
Рис. 1. Неориентированный граф задачи коммивояжера
Если городам поставить в соответствие вершины графа (см. рис. 1), а
соединяющим их дорогам дуги, то в терминах теории графов задача
заключается в определении гамильтонова контура минимальной длины.
Гамильтоновым контуром называется путь, проходящий через все
вершины графа, у которого начальная вершина совпадает с конечной, а длина
контура определяется суммой длин всех дуг, входящих в контур. Таким
образом, необходимо построить кольцевой маршрут проезда всех городов
минимальной длины, начиная с любого пункта и в любую сторону.
Поскольку всего городов n, то коммивояжер, выехав из заданного
города, должен побывать в остальных (n-1) городах только один раз.
Следовательно, всего существует (n-1)! возможных маршрутов, среди
которых один или несколько – оптимальные. В большинстве случаев можно
предположить, что расстояние между городами i и j является симметричным
d d
ji
и равно расстоянию от города j до города i, т.е. ij
. Расстояния между
городами запишем в виде соответствующей матрицы и обозначим ее через D.
Если в задаче n городов, то D является матрицей размером n n с
d 0
неотрицательными элементами ij
, которые отображают длины дуг в сети
городов. При n=5 количество возможных, вариантов маршрутов равно
5 1! 24 . Расстояния между городами заданы матрицей в табл. 1.
Таблица 1
i
1
2
3
4
5
1
∞
90
80
40
100
2
60
∞
40
50
70
3
50
30
∞
60
20
4
10
70
20
∞
50
5
20
40
50
20
∞
j
Маршрут можно представить в виде замкнутого контура,
представляющего собой кольцевой маршрут, например, для графа,
изображенного на рис. 1. Возможный вариант можно записать в виде
совокупности соответствующих пар дуг:
M k  1,2, 2,4, 4,5, 5,3, 3,1
Длина F M k  маршрута равна сумме соответствующих длин дуг
матрицы расстояний, тогда целевую функцию можно записать так:
F M k  
d
i , j M k
ij
 min
i  1, n; k  1, n  1.
Для любого допустимого маршрута каждая строка и каждый столбец
матрицы расстояний D содержат только по одному элементу. Решением
задачи является определение кольцевого маршрута минимальной длины.
3 Задание на самостоятельную проработку
Разработать программу решения задачи коммивояжера одним из трёх
методов, перечисленных в разделе 1.
В качестве подсказки используйте информацию приведённую из
списка использованных источников.
Проверить работоспособность программы на приведённом ниже
примере (матрица А приведена ниже).
@
32
19
33
22
41
18
15
16
31
32
@
51
58
27
42
35
18
17
34
19
51
@
23
35
49
26
34
35
41
33
58
23
@
33
37
23
46
46
32
22
27
35
33
@
19
10
23
23
9
41
42
49
37
19
@
24
42
42
10
18
35
26
23
10
24
@
25
25
14
15
18
34
46
23
42
25
@
1
32
16
17
35
46
23
42
25
1
@
32
31
34
41
32
9
10
14
32
32
@
Решение для данной матрицы А имеет вид: 1 8 9 2 5 10 6 7 4 3 1, его
стоимость 158. Оцените время работы программы.
Если у Вас мощный компьютер, то создайте матрицу А[1..50,1..50] и
попытайтесь найти наилучшее решение с помощью разобранного метода.
Список использованных источников
1 http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%
D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE
%D1%8F%D0%B6%D0%B5%D1%80%D0%B0
2 http://kvodo.ru/dfs.html
3 http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_
%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83
4 http://kvodo.ru/search-width.html
5 http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%BD%D1%8B
%D0%B9_%D0%BF%D0%B5%D1%80%D0%B5%D0%B1%D0%BE%D1%80
Download