
- •Контрольні питання до курсу “Комбінаторні методи та алгоритми”
- •Класифікація оптимізаційних задач
- •Задачі лінійної, нелінійної, цілочисельної, булевої, стохастичної та комбінаторної оптимізації
- •Формулювання комбінаторних оптимізаційних задач
- •Типові приклади задач комбінаторного типу. Комбінаторні задачі в програмній інженерії (приклади, формулювання).
- •5. Класифікація комбінаторних оптимізаційних задач.
- •6. Задачі поліноміальних та неполіноміальних типів. Класи р та np. Приклади.
- •7. Критерії оптимізації.
- •8. Багатокритеріальні задачі.
- •9. Зона Парето.
- •10. Елементи теорії графів та гіперграфів
- •11. Характеристичні числа графів
- •12. Числа внутрішньої та зовнішньої стійкості
- •13. Хроматичне число
- •14. Планарність графів. Теорема Понтрягіна-Куратовського.
- •15. Проектування алгоритмів. Точність, обчислювальна та ємнісна складність. Проблема стопу.
- •16. Алгоритми пошуку найбільшого (найменшого елемента) списку. Обчислювальна та ємнісна складність алгоритму.
- •17. Алгоритми впорядкування списку. Обчислювальна та ємнісна складність алгоритму.
- •Характеристики алгоритмів сортування:
- •Алгоритм сортування вибіркою (Selection Sort)
- •Алгоритм сортування бульбашкою (Bubble Sort)
- •Алгоритм вставки або включення (Insertion Sort)
- •Алгоритм швидкого сортування (Quick Sort)
- •Алгоритм злиття (Merge Sort)
- •Алгоритм позиційного сортування (Radix Sort)
- •Блокове сортування або сортування комірками (Bucket Sort)
- •18. Алгоритми визначення мінімальних зв'язувальних дерев, їх обчислювальна та ємнісна складність. Алгоритм Прима
- •Алгоритм Краскала (Крускала)
- •19. Алгоритми визначення оптимальних шляхів в графах, їх обчислювальна та ємнісна складність. Жадібний алгоритм (задача комівояжера)
- •Алгоритм найближчого сусіда
- •Алгоритм Ліна-Кернігана
- •Алгоритм Дейкстри
- •Алгоритм:
- •Хвильовий алгоритм
- •Алгоритм:
- •Транспортні мережі. Алгоритми визначення найбільшого потоку.
- •Методи розв'язування задач дискретної оптимізації.
- •Метод гілок та границь. Переваги та недоліки.
- •Жадібні алгоритми. Переваги та недоліки.
- •Алгоритми найближчого сусіда. Переваги та недоліки.
- •Метод моделювання відпалу. Переваги та недоліки.
- •Генетичні та еволюційні методи. Переваги та недоліки.
- •39 Класифікація методів та алгоритмів для розв'язування задачі трасування, їх переваги та недоліки. Обчислювальна складність.
Алгоритм найближчого сусіда
Алгоритм найближчого сусіда (Nearest neighbor algorithm) для розв’язання задачі комівояжера належить до алгоритмів побудови маршруту, що є найпростішими методами знаходження розв’язків задачі комівояжера.
Алгоритм найближчого сусіда є найприроднішим евристичним алгоритмом для розв’язання задачі комівояжера. Алгоритм починається в довільній точці та поступово відвідує кожну найближчу точку, що ще не була відвідана. Алгоритм завершується, коли відвідано всі точки. Остання точка з’єднується з першою. Обчислювальна складність алгоритму – O(N2).
АЛГОРИТМ НАЙБЛИЖЧОГО СУСІДА.
ВХІДНІ ДАНІ: множина точок V розмірністю N.
ВИХІДНІ ДАНІ: маршрут T, що складається з послідовності відвідування точок множини V.
Вибрати довільну точку v1;
T1 = v1;
ДЛЯ i=2 ДО i=N ВИКОНАТИ
ВИБРАТИ точку vi, найближчу до точки Ti-1;
Ti = vi;
TN+1 = v1;
КІНЕЦЬ АЛГОРИТМУ.
Результатом виконання алгоритму найближчого сусіда є маршрут, приблизно на 15-25% довший від оптимального.
Алгоритм 2-opt
Алгоритм 2-opt (2-opt algorithm) належить до алгоритмів покращення маршруту (route improvement). Це методи, що поступово покращують початковий маршрут, отриманий за допомогою існуючого швидкого алгоритму побудови маршруту. Покращення відбувається завдяки зміні частин існуючого маршруту на коротші (локальна оптимізація). Алгоритми покращення маршруту забезпечують якість маршруту, на 3-10% гіршу від оптимального.
У класичній реалізації алгоритм 2-opt вилучає 2 ребра, що входять до маршруту і додає два нові таким чином, щоб новий маршрут став коротшим. Існує лише один варіант заміни двох ребер на нові два, при якому новий маршрут залишиться маршрутом, а не утворяться 2 цикли.
Алгоритм триває доти, поки не залишиться можливих замін, що оптимізують маршрут. Одержаний маршрут називають 2-оптимальним.
АЛГОРИТМ 2-OPT.
ВХІДНІ ДАНІ: множина точок V розмірністю N.
ВИХІДНІ ДАНІ: маршрут T2-opt, що складається з послідовності відвідування точок множини V.
СТВОРИТИ початковий маршрут T за допомогою деякого алгоритму побудови маршруту;
ДЛЯ i=1 ДО i=N ВИКОНАТИ
ДЛЯ j=1 ДО j=N ВИКОНАТИ
Алгоритм Ліна-Кернігана
Впродовж довгих років алгоритм
Ліна-Кернігана (Lin-Kernighan
algorithm) залишається
одним з найкращих евристичних методів
розв’язування задачі комівояжера.
Алгоритм забезпечує знаходження
маршруту, в середньому не довшого на
2-3% від оптимального. Основний підхід
Ліна-Кернігана базується на техніці
локальної оптимізації k-opt, де k
– змінне число, яке змінюється на кожному
кроці виконання алгоритму. Це забезпечує
одержання значно кращих розв’язків у
порівнянні з алгоритмами 2-opt та
3-opt, у яких число k є фіксованим.
Алгоритм не є простим щодо реалізації,
у сучасних версіях має багато параметрів.
Існує багато покращень алгоритму для
того, щоб збільшити його швидкодію.
Обчислювальна складність алгоритму -
O(N2,2).
Лін-Керніган отримує початковий
суб-оптимальний маршрут та оптимізує
його за допомогою замін ребер. Для задачі
розмірністю N точок розв’язок не є
довшим у 4
разів від оптимального, а також ніколи
не є гіршим за початковий маршрут. На
практиці алгоритм виконується швидко.
Час виконання алгоритму збільшується
для задач з кластерним розподілом точок.
Алгоритм Ліна-Кернігана передбачає зміни ребер, що послідовно перетворює початковий маршрут в інший. Зміни тривають доти, поки не буде можливих замін ребер, що забезпечать одержання коротшого маршруту. Дано початковий маршрут T. На кожному кроці виконання алгоритм намагається знайти дві множини ребер X={x1, x2,…, xk} та Y={y1, y2,…, yk} такі, що якщо ребра з множини X вилучити з маршруту, а натомість додати ребра з множини Y, то в результаті отримаємо кращий маршрут. Ця взаємна заміна ребер називається заміною k-opt. Множини X та Y створюються послідовно, елемент за елементом. Спочатку вони порожні. На кожному кроці i пара елементів xi, yi додається до відповідних множин.