Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Геометрический метод решения




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

Сформулируем «Правило треугольника»: Длина оптимального маршрута коммивояжера не может быть меньше удвоенной величины максимального веса ребра, выбранного среди множества всех ребер графа:

                                        L1 + L2 > 2 ri , j max.                                 (16.2)

Приведем словесное описание алгоритма. Примем по умолчанию, что L1 – расстояние между вершинами xi и xk, а L2 – расстояние между вершинами xk и xj.

1°. Определим максимальный элемент матрицы R и вершины xk, xh, расстояние между которыми max.

2°. Строятся треугольники с основанием kh с вершинами i Î I = {1, 2,..., n}, i ¹ k, i ¹ h. Таких треугольников будет n - 2. Вычисляем их периметры по формуле:

                                 П kih = r (k, i) + r (i, h) + r (k, h)                      (16.3)

3°. Находим Пmax = П klh. Фиксируем вершины xk, xl, xh и выделяем звенья L1 – (kh), L2 – (kl), (lh). Далее оставшиеся n – 3 вершины включаются либо в L1, либо в L2.

4°. Для каждого фиксированного i ¹ l, i ¹ k, i ¹ h вычисляем

DR(k, h) = r (k, i) + r (I, h) – r (k, h).

DR(k, l) = r (k, i) + r (I, l) – r (k, l).

DR(l, h) = r (k, i) + r (I, h) – r (l, h).

Наименьшая DR определит принадлежность xi соответствующему отрезку и xi принадлежит kl.

5°. Отрезки ab заменяем согласно 4° отрезками ac и cb. Если все вершины просмотрены, то к 7°.

6°. Если две вершины xa, xb отнесены к одному отрезку kh ® ka, ah и делают kba или abh.

7°. Определяем длину маршрута.

Например, пусть имеется 6 городов, расстояния между которыми известны. Матрица смежности графа запишется следующим образом:

  1 2 3 4 5 6  
1 ¥ 30 65 40 62 28  
  30 ¥ 40 20 40 60  
R = 3 65 40 ¥ 30 55 60 .
4 40 20 30 ¥ 30 32  
5 62 40 55 30 ¥ 36  
6 28 60 60 32 36 ¥  

Согласно 1° определим пару вершин, расстояние между которыми максимально (наибольший элемент матрицы R).

ri , j max = max(r (i, j)) = r 1,3 = 65.

Фиксируем вершины x 1, x 3 и для отрезка 1 – 3 строим треугольники с вершинами в точках 2, 4, 5 и 6.

2°. Вычисляем периметры построенных треугольников (рис. 162.22) по формуле (16.3). При этом слагаемое r 1,3 можно пропустить, поскольку оно одинаково для всех выражений.

П123 = 30 + 40 = 70,

П143 = 40 + 30 = 70,

П153= 62 + 55 = 117,

П163 = 28 + 60 = 88.

3°. Выбираем треугольник с максимальной величиной периметра П153 и фиксируем вершины x 1, x 5, x 3. Выделяем два звена: L1 – (x 1x 3) и L2 - (x 1x 5 и x 5x 3) (см. рис. 16.22).

Рис. 16.22. Построение пути коммивояжера

4°. Оставшиеся незадействованными вершины x 2, x 4, x 6 отнесем по принадлежности к отрезкам 1 – 3, 1 – 5, 5 – 3. Для этого с учетом правила треугольника, гласящего, что сумма длин двух сторон треугольника всегда больше длины третьей стороны

r (i, j) + r (j, k) > r (i, k), r (i, k) + r (k, j) > r (i, j), r (k, i) + r (i, j) > r (k, j),

используем следующую формулу:

                                   DR(l, h) = r (l, i) + r (i, h) - r (l, h)               (16.4)

Начнем с вершины x 2. При этом получим, что k = 1, h = 3, l = 5, i = 2. Тогда имеем:

DR1,3 = r 1,2 + r 2,3r 1,3 = 30 + 40 - 65 = 5,

DR1,5 = r 1,2 + r 2,5r 1,5 = 30 + 40 - 28 = 42,

DR3,5 = r 3,2 + r 2,5r 3,5 = 40 + 40 - 55 = 25.

Так как из всех полученных значений DR1,3 = 5 является наименьшим, то вершину x 2 отнесем к отрезку 1 – 3.

Аналогичные вычисления выполняем для вершин x 4 и x 6. Так, для вершины x 4: k = 1, h = 3, l = 5, i = 4. Тогда

DR1,3 = r 1,4 + r 4,3r 1,3 = 40 + 30 - 65 = 5,

DR1,5 = r 1,4 + r 4,5r 1,5 = 40 + 30 - 28 = 42,

DR3,5 = r 3,4 + r 4,5r 3,5 = 30 + 30 - 55 = 5.

Вершину x 4 можно отнести как к отрезку 1 – 3, так и к отрезку 3 – 5. Отнесем ее к отрезку 3 – 5, так как к отрезку 1 – 3 мы уже отнесли вершину x 2.

Для вершины x 6: k = 1, h = 3, l = 5, i = 6. Тогда

DR1,3 = r 1,6 + r 6,3r 1,3 = 28 + 60 ─ 65 = 23,

DR1,5 = r 1,6 + r 6,5r 1,5 = 28 + 36 ─ 62 = 2,

DR3,5 = r 3,6 + r 6,5r 3,5 = 60 + 36 ─ 55 = 41.

Следовательно, вершину x 6 отнесем к отрезку 1 – 5. Теперь производим включение каждой вершины в маршрут.

5°. Отрезок 1 – 3 заменяем двумя отрезками 1 – 2 и 2 – 3. Аналогично отрезок 3 – 5 заменяем отрезками 3 – 4 и 4 – 5, а отрезок 1 – 5 – отрезками 1 – 6 и 6 – 5.

Если все вершины включены в маршрут, то алгоритм закончен, надо вычислить только длину маршрута и перейти к пункту 7°. В противном случае переход к п. 6°.

Если в процессе работы окажется, что к одному отрезку одновременно отнесено несколько вершин, то в этом случае оставляем вершину, для которой значение DR(k, h) минимально.

6°. Все вершины отнесены к отрезкам kl, kh и lh. Пусть, например, для отрезка kh зафиксированы две вершины xi и xj. Тогда надо отнести вершину xj к одному из отрезков ki или ih.

Для этого вычисляем значения

DR ki = r (k, j) + r (j, i) – r (k, i), DR ih = r (i, j) + r (j, h) - r (i, h).

Минимальная из этих двух величин определяет принадлежность вершины xj к отрезку ki или отрезку ih. Аналогично определяем принадлежность всех остальных вершин для других отрезков и переходим к п. 5°.

7°. Построен следующий маршрут коммивояжера: x 1x 2x 3x 4x 5x 6x 1. Его длина равна 194.

На рис. 16.23 показан ГЦ с весами на ребрах, когда сумма весов пройденных ребер минимальна.

Рис. 16.23. Решение задачи коммивояжера

Алгоритм справедлив только для графа, у которого выполняется правило треугольника.

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Пример 1. Пусть задан граф G, изображенный на рис. 16.24. Решить задачу коммивояжера для заданного графа, используя алгоритм Хелда─Карпа.

Рис. 16.24. Исходный граф

Решение: Построим матрицу расстояний заданного графа:

.

1. В соответствии с заданным алгоритмом определяем прямые пути из вершины x 1 в вершину xj, где j = (2, 3, 4): d 12 = 3; d 13 = 1; d 14 = 4.

2. Теперь определяем пути из вершины x 1 в вершину xj через одну промежуточную вершину:

d 312 = d 13 + d 32 = 1 + 5 = 6; d 314 = d 13 + d 34 = 1 + 4 = 5; d 213 = d 12 + d 23 = 3 + 5 = 8;

d 214 = d 12 + d 24 = 3 + 6 = 9; d 412 = d 14 + d 42 = 2 + 6 = 8; d 413 = d 14 + d 43 = 2 + 4 = 6.

3. Определяем пути из вершины x 1 в вершину xj через две промежуточные вершины:

d 3,412 = d 314 + d 42 = d 13 + d 34 + d 42 = 1 + 4 + 6 = 11; d 2,413 = d 214 + d 43 = d 12 + d 24 + d 43 = 3 + 6 + 4 = 13; d 2,314 = d 213 + d 34 = d 12 + d 23 + d 34 = 3 + 5 + 4 = 12;

d 4,312 = d 413 + d 32 = d 14 + d 43 + d 32 = 2 + 4 + 5 = 11; d 4,213 = d 412 + d 23 = d 14 + d 42 + d 23

= 2 + 6 + 5 = 13; d 3,214 = d 312 + d 24 = d 13 + d 32 + d 24 = 1 + 5 + 6 = 12.

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

d 12 = d 3,412 (или d 4312) + d 21 = 11 + 3 = 14; d 13 = d 2413 (или d 4213) + d 31 = 13 + 1 = =14; d 14 = d 2314 (или d 3214) + d 41 = 12 + 2 = 14.

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

Пример 2. Пусть задан граф G = (X, U). Решить задачу о коммивояжере для заданного графа геометрическим методом.

Решение: Зададим граф G = (X, U) матрицей расстояний, а поскольку граф неориентированный, то для его однозначного задания вполне достаточно треугольной матрицы

    1 2 3 4 5 6  

R =

1 ¥ 40 29 66 52 36

.

2   ¥ 41 63 37 50
3     ¥ 38 48 42
4       ¥ 28 56
5         ¥ 32
6           ¥

1. Определяем по матрице R элемент с максимальным весом. Это элемент r 14 = 66. Вершины x 1 и x 4 фиксируем.

2. Строим треугольники с основанием x 1x 3 (рис. 16.25,а).

Вычисляем периметры получившихся треугольников:

П124 = 40 + 63 = 103;

П134 = 29 + 38 = 67;

П154 = 52 + 28 = 80;

П164 = 36 + 56 = 92.

3. Выбираем треугольник П124, имеющий максимальную длину. Фиксируем вершины x 1, x 2, x 4. Выделяем два звена L1 = (x 1x 4) и L2 = (x 1x 2 и x 2x 4) (рис. 16.25, б).

                           

      а                                                   б

Рис. 16.25. Построение пути коммивояжера а – шаг 1; б – шаг 2

4. Подсчитываем значения DR для вершин x 3, x 5, x 6.

а) Для вершины x 3:

DR12 = r 13 + r 32 - r 12 = 29 + 41 - 40 = 30;

D R 14 = r 13 + r 34 - r 14 = 29 + 38 - 66 = 1;

DR24 = r 23 + r 34 - r 24 = 41 + 38 - 63 = 16.

б) Для вершины x 5:

DR12 = r 15 + r 52 - r 12 = 52 + 37 - 40 = 49;

DR14 = r 15 + r 54 - r 14 = 52 + 28 - 66 = 24;

D R24 = r 25 + r 54 - r 24 = 37 + 28 - 63 = 2.

в) Для вершины x 6:

DR12 = r 16 + r 62 - r 12 = 36 + 50 - 40 = 46;

D R 14 = r 16 + r 64 - r 14 = 36 + 56 - 66 = 26;

DR24 = r 26 + r 64 - r 24 = 50 + 56 - 63 = 43.

5. В результате проведенных подсчетов получилось, что вершина x 5 должна быть отнесена к отрезку x 2x 4, вершины x 3 и x 6 относятся к отрезку x 1x 4. Следовательно, заменяем отрезок x 2x 4 двумя отрезками x 2x 5 и x 5x 4. Сравниваем полученные значения DR14 для вершин x 3 (DR14 = 1) и x 6 (DR14 = 26). Вершину (x 3), соответствующую меньшему из двух значению DR14, оставляем, а через вершину x 6 строим обход x 1x 6 и x 6x 4 (рис. 16.25, в). После чего переходим к пункту 6.

6. Для вершины x 3 подсчитываем значения DR16 и DR64, для того чтобы определить к какому из этих двух отрезков она должна быть отнесена (рис. 16.25,г).

Для вершины x 3:

DR16 = r 13 + r 36r 16 = 29 + 42 – 36 = 35;

D R 64 = r 63 + r 34 r 64 = 42 + 38 – 56 = 24.

Вершину x 3 отнесем к отрезку x 4x 6. После этого шага все вершины графа рассмотрены.

                       

          в                                                   г

Рис. 16.25. Построение пути коммивояжера вшаг 3; гшаг 4

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

Длина построенного маршрута коммивояжера равна:

r 12 + r 25 + r 54 + r 43 + r 36 + r 61 = 40 + 37 + 28 + 38 + 42 + 36 = 221.

 д

Рис. 16.25. Построение пути коммивояжера дрезультат

ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ

1. В каких задач науки и практики может быть использована задача коммивояжера?

2. Дайте определение задачи коммивояжера?

3. В чем состоит идея алгоритма Хелда–Карпа?

4. На чем основан геометрический метод решения задачи коммивояжера?

5. Какие методы решения задачи коммивояжера вы знаете?

6. Какова сложность алгоритма Хелд–Карпа?

7. В чем состоит «правило треугольника»? Сформулируйте его.

8. Каким образом строятся треугольники в графе при решении задачи коммивояжера?

9. В чем заключаются недостатки и преимущества алгоритма Хелда–Карпа?

10. В чем заключаются недостатки и преимущества геометрического метода решения задачи коммивояжера?





Поделиться с друзьями:


Дата добавления: 2018-10-18; Мы поможем в написании ваших работ!; просмотров: 286 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Чтобы получился студенческий борщ, его нужно варить также как и домашний, только без мяса и развести водой 1:10 © Неизвестно
==> читать все изречения...

4156 - | 4086 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.