- •Глава 1. Сущность задачи коммивояжёра 6
- •Глава 2. Практическая реализация задачи коммивояжёра 20
- •Глава 1. Сущность задачи коммивояжёра 5
- •Глава 2. Практическая реализация задачи коммивояжёра 20
- •Введение
- •Глава 1. Сущность задачи коммивояжёра
- •1.1. Элементы теории графов. Цикл Гамильтона
- •1.2. Постановка задачи коммивояжера
- •1.3. Методы решения зк
- •1.3.1. Жадный алгоритм
- •1.3.2 Деревянный алгоритм
- •1.3.3. Метод ветвей и границ
- •1.3.4. Алгоритм Дейкстры
- •1.4 Анализ методов решения задачи коммивояжера
- •Глава 2. Практическая реализация задачи коммивояжёра
- •2.1 Решение задачи коммивояжёра методом ветвей и границ
- •2.2 Решение задачи с помощью программы «Нахождение оптимального маршрута»
- •2.3 Решение задачи с помощью сайта Semestr.Ru
- •Заключение
- •Список используемой литературы
2.2 Решение задачи с помощью программы «Нахождение оптимального маршрута»
2.3 Решение задачи с помощью сайта Semestr.Ru
Возьмём в качестве произвольного маршрута:
X0 = (1,2);(2,3);(3,4);(4,5);(5,1)
Тогда F(X0) = 10 + 10 + 20 + 15 + 10 = 65
Для определения нижней границы множества воспользуемся операцией редукции или приведения матрицы по строкам, для чего необходимо в каждой строке матрицы D найти минимальный элемент.
di = min(j) dij
табл. 2.3.1 |
||||||
i j |
1 |
2 |
3 |
4 |
5 |
di |
1 |
M |
10 |
25 |
25 |
10 |
10 |
2 |
1 |
M |
10 |
15 |
2 |
1 |
3 |
8 |
9 |
M |
20 |
10 |
8 |
4 |
14 |
10 |
24 |
M |
15 |
10 |
5 |
10 |
8 |
25 |
27 |
M |
8 |
Затем вычитаем di из элементов рассматриваемой строки. В связи с этим во вновь полученной матрице в каждой строке будет как минимум один ноль.
Такую же операцию редукции проводим по столбцам, для чего в каждом столбце находим минимальный элемент:
dj = min(i) dij
табл. 2.3.2 |
|||||
i j |
1 |
2 |
3 |
4 |
5 |
1 |
M |
0 |
15 |
15 |
0 |
2 |
0 |
M |
9 |
14 |
1 |
3 |
0 |
1 |
M |
12 |
2 |
4 |
4 |
0 |
14 |
M |
5 |
5 |
2 |
0 |
17 |
19 |
M |
dj |
0 |
0 |
9 |
12 |
0 |
После вычитания минимальных элементов получаем полностью редуцированную матрицу, где величины di и dj называются константами приведения.
табл. 2.3.3 |
|||||
i j |
1 |
2 |
3 |
4 |
5 |
1 |
M |
0 |
6 |
3 |
0 |
2 |
0 |
M |
0 |
2 |
1 |
3 |
0 |
1 |
M |
0 |
2 |
4 |
4 |
0 |
5 |
M |
5 |
5 |
2 |
0 |
8 |
7 |
M |
Шаг №1.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
табл. 2.3.4 |
||||||
i j |
1 |
2 |
3 |
4 |
5 |
di |
1 |
M |
0(0) |
6 |
3 |
0(1) |
0 |
2 |
0(0) |
M |
0(5) |
2 |
1 |
0 |
3 |
0(0) |
1 |
M |
0(2) |
2 |
0 |
4 |
4 |
0(4) |
5 |
M |
5 |
4 |
5 |
2 |
0(2) |
8 |
7 |
M |
2 |
dj |
0 |
0 |
5 |
2 |
1 |
0 |
Наибольшая сумма констант приведения равна (0 + 5) = 5 для ребра (2,3), следовательно, множество разбивается на два подмножества (2,3) и (2*,3*). Нижняя граница гамильтоновых циклов этого подмножества:
H(2*,3*) = 58 + 5 = 63
табл. 2.3.5 |
||||||
i j |
1 |
2 |
3 |
4 |
5 |
di |
1 |
M |
0 |
6 |
3 |
0 |
0 |
2 |
0 |
M |
M |
2 |
1 |
0 |
3 |
0 |
1 |
M |
0 |
2 |
0 |
4 |
4 |
0 |
5 |
M |
5 |
0 |
5 |
2 |
0 |
8 |
7 |
M |
0 |
dj |
0 |
0 |
5 |
0 |
0 |
5 |
В результате получим другую сокращенную матрицу (4 x 4), которая подлежит операции приведения.
Сумма констант приведения сокращенной матрицы:
∑di + ∑dj = 0
После операции приведения сокращенная матрица будет иметь вид:
табл. 2.3.6 |
|||||
i j |
1 |
2 |
4 |
5 |
di |
1 |
M |
0 |
3 |
0 |
0 |
3 |
0 |
M |
0 |
2 |
0 |
4 |
4 |
0 |
M |
5 |
0 |
5 |
2 |
0 |
7 |
M |
0 |
dj |
0 |
0 |
0 |
0 |
0 |
Нижняя граница подмножества (2,3) равна:
H(2,3) = 58 + 0 = 58 < 63
Поскольку нижняя граница этого подмножества (2,3) меньше, чем подмножества (2*,3*), то ребро (2,3) включаем в маршрут.
Шаг №2.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
табл. 2.3.6 |
|||||
i j |
1 |
2 |
4 |
5 |
di |
1 |
M |
0(0) |
3 |
0(2) |
0 |
3 |
0(2) |
M |
0(3) |
2 |
0 |
4 |
4 |
0(4) |
M |
5 |
4 |
5 |
2 |
0(2) |
7 |
M |
2 |
dj |
2 |
0 |
3 |
2 |
0 |
Наибольшая сумма констант приведения равна (4 + 0) = 4 для ребра (4,2), следовательно, множество разбивается на два подмножества (4,2) и (4*,2*). Нижняя граница гамильтоновых циклов этого подмножества:
H(4*,2*) = 58 + 4 = 62
табл. 2.3.7 |
|||||
i j |
1 |
2 |
4 |
5 |
di |
1 |
M |
0 |
3 |
0 |
0 |
3 |
0 |
M |
0 |
2 |
0 |
4 |
4 |
M |
M |
5 |
4 |
5 |
2 |
0 |
7 |
M |
0 |
dj |
0 |
0 |
0 |
0 |
4 |
В результате получим другую сокращенную матрицу (3 x 3), которая подлежит операции приведения.
Сумма констант приведения сокращенной матрицы:
∑di + ∑dj = 2
После операции приведения сокращенная матрица будет иметь вид:
табл. 2.3.8 |
||||
i j |
1 |
4 |
5 |
di |
1 |
M |
3 |
0 |
0 |
3 |
0 |
0 |
2 |
0 |
5 |
2 |
7 |
M |
2 |
dj |
0 |
0 |
0 |
2 |
Нижняя граница подмножества (4,2) равна:
H(4,2) = 58 + 2 = 60 < 62
Чтобы исключить подциклы, запретим следующие переходы: (3,4). Поскольку нижняя граница этого подмножества (4,2) меньше, чем подмножества (4*,2*), то ребро (4,2) включаем в маршрут.
Шаг №3.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
табл. 2.3.9 |
||||
i j |
1 |
4 |
5 |
di |
1 |
M |
0(2) |
0(2) |
0 |
3 |
0(2) |
M |
2 |
2 |
5 |
0(2) |
2 |
M |
2 |
dj |
0 |
2 |
2 |
0 |
Наибольшая сумма констант приведения равна (0 + 2) = 2 для ребра (1,4), следовательно, множество разбивается на два подмножества (1,4) и (1*,4*).
Нижняя граница гамильтоновых циклов этого подмножества:
H(1*,4*) = 60 + 2 = 62
табл. 2.3.10 |
||||
i j |
1 |
4 |
5 |
di |
1 |
M |
M |
0 |
0 |
3 |
0 |
M |
2 |
0 |
5 |
0 |
2 |
M |
0 |
dj |
0 |
2 |
0 |
2 |
В результате получим другую сокращенную матрицу (2 x 2), которая подлежит операции приведения.
Сумма констант приведения сокращенной матрицы:
∑di + ∑dj = 2
После операции приведения сокращенная матрица будет иметь вид:
табл. 2.3.11 |
|||
i j |
1 |
5 |
di |
3 |
0 |
2 |
0 |
5 |
0 |
M |
0 |
dj |
0 |
2 |
2 |
Нижняя граница подмножества (1,4) равна:
H(1,4) = 60 + 2 = 62 < 62
Поскольку нижняя граница этого подмножества (1,4) меньше, чем подмножества (1*,4*), то ребро (1,4) включаем в маршрут.
В соответствии с этой матрицей включаем в гамильтонов маршрут ребра (3,5) и (5,1).
В результате по дереву ветвлений гамильтонов цикл образуют ребра:
(2,3), (3,5), (5,1), (1,4), (4,2),
Длина маршрута равна F(Mk) = 65