🤝 Задача Комівояжера
Три алгоритми вирішують задачу комівояжера: жадібний, 2-opt та симуляція відпалу. Перетягуйте міста мишею.
Схожі симуляції
Про симуляцію
Ця симуляція розв'язує задачу комівояжера (TSP): пошук найкоротшого замкненого маршруту, що відвідує кожне місто рівно один раз і повертається до початку. Міста — це точки на канві, а вартість маршруту — сума евклідових відстаней між послідовними зупинками. Ви можете зіштовхнути три класичні евристики одну проти одної на тому самому розташуванні: найближчого сусіда (жадібний), локальний пошук 2-opt і симуляцію відпалу.
Повзунок Cities (від 4 до 80) і кнопка New Cities генерують випадкові розташування, клік додає місто, перетягування переміщує його, а клік правою кнопкою видаляє. Оберіть алгоритм, задайте Speed (кроків за кадр) і натисніть Run; для симуляції відпалу повзунки Start temp і Cooling налаштовують пошук. TSP лежить в основі логістики, маршрутизації транспорту, свердління друкованих плат і секвенування ДНК.
Поширені запитання
Що таке задача комівояжера?
Вона запитує про найкоротший можливий маршрут, що відвідує заданий набір міст рівно один раз і повертається до початку. Тут міста — це точки на екрані, а відстань — пряма лінія (евклідова), тож мета — мінімізувати загальну довжину маршруту. Це одна з найбільш вивчених задач комбінаторної оптимізації.
Чому TSP вважається складною задачею?
TSP є NP-складною: жоден відомий алгоритм не розв'язує її за поліноміальний час у загальному випадку. Кількість різних маршрутів зростає як (n-1)!/2, тож для 20 міст існує приблизно 1,2 × 10^18 маршрутів. Повний перебір усіх маршрутів швидко стає неможливим, тому й використовують евристики.
Що роблять три алгоритми?
Найближчий сусід будує маршрут, завжди переходячи до найближчого невідвіданого міста. 2-opt повторно розвертає сегменти маршруту, щоб усунути перетини й скоротити шлях. Симуляція відпалу випадково міняє міста місцями і іноді приймає гірші маршрути, поступово охолоджуючись, щоб зрештою осісти на хорошому розв'язку.
Як симуляція відпалу вирішує, чи приймати крок?
Для кожного випадкового обміну вона обчислює зміну довжини маршруту, дельту. Якщо дельта від'ємна, крок завжди приймається. Якщо дельта додатна, він приймається з імовірністю exp(-дельта / T), де T — поточна температура. У міру охолодження T кроки "вгору" стають рідшими, тож пошук звужується від дослідження до уточнення.
Що контролюють повзунки Start temp і Cooling?
Start temp задає початкову температуру T0 (значення повзунка, помножене на 500), визначаючи, наскільки охоче пошук приймає гірші маршрути на початку. Cooling задає множник на кожен крок alpha приблизно між 0,9995 і 0,99995; значення ближче до 1 охолоджують повільніше, даючи довший і ретельніший пошук перед тим, як температура впаде майже до нуля.
Чому 2-opt іноді перевершує симуляцію відпалу, а іноді програє?
2-opt — це чистий локальний пошук: він приймає лише покращувальні обміни, тому швидко сходиться, але може застрягти в локальному оптимумі, з якого не може вибратися. Симуляція відпалу іноді приймає гірший крок, дозволяючи вирватися з таких пасток. На одних розташуваннях перемагає детермінізм 2-opt, на інших — випадковість симуляції відпалу знаходить коротший маршрут.
Що означає статистика на панелі?
Довжина маршруту — це загальна відстань поточного маршруту; Best found — найкоротший маршрут, знайдений досі, зображений блідо-зеленим. Iterations рахує кроки алгоритму, Temperature показує поточне значення T симуляції відпалу, а Improvements рахує, скільки кроків справді скоротили маршрут.
Як працюють елементи керування Speed і Step?
Speed обирає, скільки кроків алгоритму виконується за кадр анімації — від 1 до 20 000 на найвищому налаштуванні, тож можна спостерігати повільно або швидко зійтися. Кнопка Step просуває рівно на одну ітерацію за раз, що корисно для вивчення того, як один обмін чи розворот змінює маршрут.
Чи гарантовано ці маршрути є оптимальними?
Ні. Усі три методи — евристики, що прагнуть до майже оптимальних маршрутів, а не доведено найкоротших. Найближчий сусід може бути на 25 відсотків або більше гіршим за оптимум; 2-opt і симуляція відпалу зазвичай значно кращі, але не дають гарантій. Пошук точного оптимуму для великої кількості міст вимагає набагато важчих технік точного розв'язання.
Де задачу комівояжера застосовують у реальному світі?
TSP та її варіанти зустрічаються в маршрутизації посилок і доставок, свердлінні отворів у друкованих платах, плануванні спостережень телескопів, плануванні секвенування ДНК та оптимізації траєкторій інструментів у виробництві. Ті самі ідеї "обміняй і покращ", показані тут, масштабуються, з удосконаленнями, до промислового програмного забезпечення маршрутизації, що обробляє тисячі зупинок.