Задача коммивояжёра — история и теория
Есть N городов, связанных дорогами. Как помочь коммивояжёру проложить наиболее короткий/выгодный/дешёвый маршрут между этими городами, чтобы посетить каждый город хотя бы по одному разу и вернуться в исходную точку?
Подробности
Прикинем, сколько же возможных маршрутов коммивояжёра существует. Если мы находимся в каком-то городе, одном из N-городов, то пойти мы можем в N - 1 город. На следующем шаге мы можем пойти в N - 2 города и т. д. Итого существует (N - 1)! различных маршрутов.
Как давно эту задачу не могут решить?
Интересна историческая подоплёка появления этой задачи. Как гласит википедия: “...известна изданная в 1832 году книга с названием «Коммивояжёр — как он должен вести себя и что должен делать для того, чтобы доставлять товар и иметь успех в своих делах — советы старого курьера» (нем. Der Handlungsreisende – wie er sein soll und was er zu tun hat, um Aufträge zu erhalten und eines glücklichen Erfolgs in seinen Geschäften gewiß zu sein – von einem alten Commis-Voyageur), в которой описана проблема, но математический аппарат для её решения не применяется.”
И что сегодня?
Впоследствии задачу коммивояжёра исследовали многие учёные в разных вариантах постановки и с разными ограничениями, применяя математический аппарат по максимуму. Какие только способы не применялись для её решения: от динамического программирования до нейросетей!
Исследование этой задачи до сих пор продолжается, и она привлекает учёных, несмотря на несложную и понятную всем формулировку.
А какие вы можете предложить решения? Пишите в комментариях!