Мені здається дивним, що TSP заперечує можливість повторних міст. Мета цього мандрівного продавця - поїхати якомога швидше та відвідати всі міста, правда? Що робити, якщо швидше подорожувати містом, у якому ви вже були?
Мені здається дивним, що TSP заперечує можливість повторних міст. Мета цього мандрівного продавця - поїхати якомога швидше та відвідати всі міста, правда? Що робити, якщо швидше подорожувати містом, у якому ви вже були?
Відповіді:
Не має значення, як саме ви її визначаєте, оскільки це лише спосіб моделювання проблеми в реальному світі. У TSP у вас просто набір міст і вартість проїзду між кожною парою. Це не виключає можливості того, що в реальній ситуації, яку ви моделюєте, найкращий маршрут між B і C міг би пройти A. Якщо це було так, так, так, маршрут, який моделюється як ABCA в TSP, може дуже добре включати проїзд через A додатковий час на шляху від B до C, але така деталь відстежується далеко в TSP-моделі.
Я погоджуюся, що обмеження виглядає дивним, і для багатьох практичних ситуацій воно не доречне. Як наголосив Девід у своїй відповіді, якщо ви можете змінити моделювання самостійно, то це насправді не має значення. Але з огляду на незмінний екземпляр, це призведе до зміни, оскільки загальний TSP з цим обмеженням не є приблизним в жодному постійному факторі, тоді як розслаблення обмеження на один візит, схоже, робить його приблизним у межах коефіцієнта 2 (навіть якщо це не метричний ). Якщо я чогось не пропускаю, за стандартними аргументами ви спершу можете побудувати дерево, що має мінімальний розмір (наприклад, вартості)), а потім відвідайте це дерево з технікою туру Еулера. Зрозуміло, тоді загальна вартість вашого туру (двічі кожен край). За протиріччя, якщо існувала екскурсія вартістю менше, тоді ця екскурсія може бути використана для отримання MST вартістю менше , що є протиріччям.
З огляду на будь-яку екскурсію з повторами, ви можете придумати коротший тур, який не повторить жодне місто. Наприклад, розглянемо екскурсію за формою
Це може бути найкоротший шлях з до проходить через , але це вже інкапсульоване в краю . Можна придумати згадку про не як "проходить" а радше "зупинка на" . Вам потрібно зупинитися лише на один раз, хоча ви можете пройти декілька разів.
Фактичні алгоритми для TSP могли б мати цей крок "прийняття ярликів", наприклад алгоритм Христофідеса. Дивіться, наприклад, цей опис або той коротший рахунок .
На це немає загальної відповіді, окрім "люди не дурні". Вони застосують рішення, яке відповідає їх ситуації. Рідко люди переймаються самою проблемою продавця подорожей. У класичному випадку, реальний продавець у світі буде більше стурбований проблемою максимізації своїх доходів за певний часовий період у межах певного набору обмежень. У цьому випадку проблеми загальна пройдена відстань є лише одним із ряду різних факторів, які шукають оптимальну відповідь.
Якщо дозволено повторення, ви просто перейдете до вивчення всіх з'єднань X -> A -> Y, і якщо це коротше X -> Y, ви заміните довжину X -> Y на довжину X -> A -> Y, і вирішити отриману задачу за допомогою стандартного алгоритму. Я думаю, що вам доведеться повторювати процес заміни, поки не буде змін, тому що якщо ви знайдете коротше з'єднання X -> Y, це може означати, що зараз X -> Y -> Z коротше X -> Y.
Слідкуйте за тим, які з'єднання ви змінили, пройдіть через з'єднання в розчині, і якщо рішення містить X -> Y, ви заміните це на X -> A -> Y.
PS. Я думаю, що моя ідея чудова, але наразі я не дуже впевнений, що вона правильна. Оскільки X -> A -> Y замість X -> Y - це не лише ярлик, він також охоплює місто A.