Задача коммивояжёра — история и теория

Есть N городов, связанных дорогами. Как помочь коммивояжёру проложить наиболее короткий/выгодный/дешёвый маршрут между этими городами, чтобы посетить каждый город хотя бы по одному разу и вернуться в исходную точку? Многие, изучающие computer science, знают о существовании этой задачи как одной из самых известных задач на графах. Все знают, что эта задача NP-полная и нерешаема в общем виде на современных компьютерах.

Подробности

Прикинем, сколько же возможных маршрутов коммивояжёра существует. Если мы находимся в каком-то городе, одном из 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), в которой описана проблема, но математический аппарат для её решения не применяется.”

И что сегодня?

Впоследствии задачу коммивояжёра исследовали многие учёные в разных вариантах постановки и с разными ограничениями, применяя математический аппарат по максимуму. Какие только способы не применялись для её решения: от динамического программирования до нейросетей!

Исследование этой задачи до сих пор продолжается, и она привлекает учёных, несмотря на несложную и понятную всем формулировку.

А какие вы можете предложить решения? Пишите в комментариях!