
- •3.1 Назва підрозділу 38
- •4.1 Назва підрозділу 39
- •5.1 Назва підрозділу 41
- •Розділ 1 назва розділу
- •1.1 Комбінаторика
- •1.2 Постановка задачі
- •1.3 Методи рішення задачі комівояжера
- •1.3.1. Жадібний алгоритм
- •1.3.2. Дерев’яний алгоритм
- •1.3.3. Метод гілок і меж
- •1.3.4. Алгоритм Дейкстри
- •1.3.5. Мій метод (метод Ярощука) рішення задачі комівояжера
- •1.4 Аналіз методів рішення задачі комівояжера
- •1.5 Практичне застосування задачі комівояжера
- •Розділ 2 назва розділу
- •2.1 Назва підрозділу
- •Розділ 3 назва розділу
- •Розділ 4 назва розділу
- •Розділ 5 назва розділу
- •Висновки
- •Список використаних джерел
- •Додатки Додаток а
- •!!! Рамки зі штампами на додатках не ставити !!!
1.3.5. Мій метод (метод Ярощука) рішення задачі комівояжера
Розглянемо рис. 9-10 і спробуємо знайти в них найкоротші тури. Очевидно, що найкоротший тур не повинен містити пересічних ребер (в іншому випадку, помінявши вершини при пересічних ребрах місцями, отримаємо більш короткий тур). У першому випадку найкоротшим є тур 1-2-4-5-3-1, а в другому - тур 1-2-3-4-5-1. Аналізуючи безліч інших аналогічних розташувань п'яти і більше міст, можна зробити наступне загальне припущення:
1. Якщо можна побудувати опуклий багатокутник, по периметру якого лежать всі міста, то такий опуклий багатокутник є найкоротшим туром.
О
днак
не завжди можна побудувати опуклий
багатокутник, по периметру якого лежали
б всі міста. Велика ймовірність того,
що деякі міста не увійдуть до опуклий
багатокутник. Такі міста будемо називати
«центральними». Так як побудувати
опуклий багатокутник досить легко, то
завдання зводиться до того, щоб включити
в тур у вигляді опуклого багатокутника
всі центральні міста з мінімальними
втратами. Нехай є масив T [n + 1], який
містить в собі номери міст по порядку,
які повинен відвідати комівояжер, т. Е.
Спочатку комівояжер повинен відвідати
місто T [1], потім T [2], потім T [3] і т . д,,
причому T [n + 1] = T [1] (комівояжер повинен
повернутися в початковий місто). Тоді,
якщо виконується рівність i∈
[1,2..n]; C [T [i], p] + C [p, T [i + 1]] - C [T [I], T [i + 1]] =
min, то центральний місто з номером p
потрібно включити в тур між містами T
[i] і T [i + 1]. Виконавши цю операцію для
всіх центральних міст, в результаті
отримаємо найкоротший тур. Даний алгоритм
можна реалізувати на мові Паскаль і
перевірити вірність припущення 1. Для
задачі, вирішеною нами методом гілок і
меж, мій алгоритм дає правильне рішення.
С
пробуємо
вирішити даним алгоритмом ЗК для восьми
міст. Нехай маємо вісім міст, розташування
яких показано на рис. 11. Матриця відстаней
наведена поруч на табл. 13. Проміжні
побудови найкоротшого туру показані
пунктирними лініями, цифри - порядок
видалення ребер. Таким чином, маємо для
даного випадку найкоротший тур
1-3-7-5-4-8-6-2-1. Довжина цього туру: D = 6 + 7 + 5
+ 2 + 6 + 5 + 13 + 13 = 57. Цей результат є правильним,
т. К. Алгоритм лексичного перебору, який
ніколи не помиляється, дає точно такий
же тур. (Слід також зазначити, що жодній
алгоритм для цього випадку помиляється
всього на 1 і дає тур 1-3-4-5-7-8-6-2-1 довжиною
в 58).
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
1 |
|
13 |
6 |
13 |
14 |
15 |
14 |
16 |
2 |
13 |
|
11 |
11 |
8 |
13 |
17 |
14 |
3 |
6 |
11 |
|
5 |
6 |
11 |
7 |
11 |
4 |
13 |
11 |
5 |
|
2 |
6 |
7 |
6 |
5 |
14 |
8 |
6 |
2 |
|
6 |
5 |
6 |
6 |
15 |
13 |
11 |
6 |
6 |
|
13 |
5 |
7 |
14 |
17 |
7 |
7 |
5 |
13 |
|
9 |
8 |
16 |
14 |
11 |
6 |
6 |
5 |
9 |
|
табл. 13 |
Одним з можливих недоліків такого алгоритму є необхідність знати не матрицю відстаней, а координати кожного міста на площині. Якщо нам відома матриця відстаней між містами, але невідомі їх координати, то для їх знаходження потрібно буде вирішити n систем квадратних рівнянь з n невідомими для кожної координати. Вже для 6 міст це зробити дуже складно. Якщо ж, навпаки, є координати всіх міст, але немає матриці відстаней між ними, то створити цю матрицю нескладно. Це можна легко зробити в умі для 5-6 міст. Для більшої кількості міст можна скористатися можливостями комп'ютера, в той час як промоделювати рішення системи квадратних рівнянь на комп'ютері досить складно.
На основі вищевикладеного можна зробити висновок, що мій алгоритм, поряд з дерев'яним алгоритмом і алгоритмом Дейкстри, можна віднести до наближених (хоча за цим алгоритмом жодного разу не було помічено видачі неправильного варіанту).