Как бы то ни было, та показательная чепуха, которая вдохновила меня на эту главу, берет свое начало в одной полезной книге для – как вы, наверное, уже догадались – коммивояжеров. Тех, что обходили дома и предлагали свой товар. Я еще помню их, даже если вы не помните. Они часто продавали пылесосы. Как любые разумные деловые люди, немецкие коммивояжеры в 1832 году (а в те времена все они, конечно, были мужчинами) очень трепетно относились к эффективности использования своего времени и снижению расходов. К счастью, помощь всегда была под рукой в виде руководства: «Коммивояжер. Каким ему следует быть и что ему следует делать, чтобы получать заказы и быть уверенным в успехе своего дела. Советы старого коммивояжера» (Der Handlungsreisende – wie er sein soll und was er zu thun hat, um Auftr
Бизнес приводит коммивояжера сегодня сюда, завтра туда, и ни про какие маршруты невозможно точно сказать, что они годятся для всех случаев. Однако иногда рациональная организация маршрута позволяет сэкономить столько времени, что полезно познакомиться с правилами его определения… Главная цель всегда состоит в том, чтобы посетить как можно больше мест, не возвращаясь в них второй раз.
Руководство не предлагало математических принципов решения этой задачи, а приводило примеры пяти предположительно оптимальных маршрутов по Германии (один из них проходил через территорию Швейцарии). Большинство маршрутов содержали подциклы, предусматривавшие посещение одних и тех же мест дважды, что вполне естественно, если вы останавливаетесь на ночь в гостинице, а днем объезжаете окрестности. Но в одном из маршрутов не было повторных визитов. Современное решение этой задачи показывает, что предложенный руководством ответ достаточно хорош, как видно на рисунке.
Маршрут (1285 км) по 45 немецким городам из руководства 1832 года, показанный сплошными (толстыми и тонкими) линиями. Сплошными толстыми и пунктирными линиями показан кратчайший маршрут (1248 км), найденный современными методами
Задача коммивояжера – а именно такое название она получила – стала первым фундаментальным примером математической области, известной сегодня как комбинаторная оптимизация, что означает «нахождение лучшего варианта среди множества возможностей, слишком большого, чтобы проверять их последовательно». Забавно, но название «задача коммивояжера» не использовалось явно ни в одной публикации на эту тему до 1984 года[4]
, хотя в неформальных дискуссиях математиков оно вовсю фигурировало и до этого.Несмотря на свое приземленное практическое происхождение, задача коммивояжера завела математическое сообщество в реальные глубины, вплоть до одной из «задач тысячелетия» «P ≠ NP?», приз за решение которой размером $1 млн до сих пор ожидает своего получателя. В задаче спрашивается в строгой математической форме: если имеется задача, предполагаемый ответ на которую – догадка, если угодно, – может быть эффективно