И пусть никто не говорит, что у ученых нет чувства юмора. Или что остроумные заголовки не помогают добиться популярности.
Задача коммивояжера – не просто любопытная диковинка. Это хороший пример целого класса задач, имеющих громадное практическое значение и известных как задачи комбинаторной оптимизации. У математиков есть привычка формулировать глубокие и значительные вопросы тривиальным на первый взгляд языком. Американские конгрессмены осудили напрасное расходование бюджетных денег на теорию узлов, не понимая, что эта область математики принципиально важна для понимания топологии малых размерностей, которая используется в теории ДНК и квантовой теории. Основные методы топологии включают в себя теорему о причесывании ежика и теорему о бутерброде, так что, я полагаю, мы сами на это напросились, но дело не только в нас. Я не осуждаю тех, кто чего-то не знает, – с каждым случается, – но почему бы этим людям просто не спросить?{20}
Как бы то ни было, та показательная чепуха, которая вдохновила меня на эту главу, берет свое начало в одной полезной книге для – как вы, наверное, уже догадались – коммивояжеров. Тех, что обходили дома и предлагали свой товар. Я еще помню их, даже если вы не помните. Они часто продавали пылесосы. Как любые разумные деловые люди, немецкие коммивояжеры в 1832 году (а в те времена все они, конечно, были мужчинами) очень трепетно относились к эффективности использования своего времени и снижению расходов. К счастью, помощь всегда была под рукой в виде руководства: «Коммивояжер. Каким ему следует быть и что ему следует делать, чтобы получать заказы и быть уверенным в успехе своего дела. Советы старого коммивояжера» (Der Handlungsreisende – wie er sein soll und was er zu thun hat, um Aufträge zu erhalten und eines glücklichen Erfolgs in seinen Geschäften gewiss zu sein – von einem alten Commis-Voyageur). Этот пожилой странствующий торговец указывал, что:
Бизнес приводит коммивояжера сегодня сюда, завтра туда, и ни про какие маршруты невозможно точно сказать, что они годятся для всех случаев. Однако иногда рациональная организация маршрута позволяет сэкономить столько времени, что полезно познакомиться с правилами его определения… Главная цель всегда состоит в том, чтобы посетить как можно больше мест, не возвращаясь в них второй раз.
Руководство не предлагало математических принципов решения этой задачи, а приводило примеры пяти предположительно оптимальных маршрутов по Германии (один из них проходил через территорию Швейцарии). Большинство маршрутов содержали подциклы, предусматривавшие посещение одних и тех же мест дважды, что вполне естественно, если вы останавливаетесь на ночь в гостинице, а днем объезжаете окрестности. Но в одном из маршрутов не было повторных визитов. Современное решение этой задачи показывает, что предложенный руководством ответ достаточно хорош, как видно на рисунке.
Маршрут (1285 км) по 45 немецким городам из руководства 1832 года, показанный сплошными (толстыми и тонкими) линиями. Сплошными толстыми и пунктирными линиями показан кратчайший маршрут (1248 км), найденный современными методами
Задача коммивояжера – а именно такое название она получила – стала первым фундаментальным примером математической области, известной сегодня как комбинаторная оптимизация, что означает «нахождение лучшего варианта среди множества возможностей, слишком большого, чтобы проверять их последовательно». Забавно, но название «задача коммивояжера» не использовалось явно ни в одной публикации на эту тему до 1984 года[4], хотя в неформальных дискуссиях математиков оно вовсю фигурировало и до этого.
Несмотря на свое приземленное практическое происхождение, задача коммивояжера завела математическое сообщество в реальные глубины, вплоть до одной из «задач тысячелетия» «P ≠ NP?», приз за решение которой размером $1 млн до сих пор ожидает своего получателя. В задаче спрашивается в строгой математической форме: если имеется задача, предполагаемый ответ на которую – догадка, если угодно, – может быть эффективно проверен, то может ли этот ответ быть эффективно найден во всех случаях? Большинство математиков и компьютерщиков считают, что ответ должен быть «нет»: безусловно, проверка любой конкретной догадки может быть проведена намного быстрее, чем поиск корректного ответа. В конце концов, если кто-то показывает вам собранный пазл из 500 элементов, то быстрого взгляда, как правило, хватает, чтобы понять, все ли правильно собрано, но собрать весь пазл с самого начала – совершенно другое дело. К несчастью, пазлы не дают нам ответа: это всего лишь удобная метафора, строго говоря, они не имеют отношения к вопросу. Так что сейчас никто не может ни доказать, ни опровергнуть предположение о том, что P отличается от NP, – именно поэтому решение вопроса принесет вам круглую сумму $1 млн{21}. Я вернусь к задаче P ≠ NP позже, а сначала рассмотрим первые успехи в решении задачи коммивояжера.
20
Мой любимый пример – это политик, который поднял грандиозный шум по поводу напрасной траты денег на то, что он назвал «теорией лжи» (Lie theory). Слово
21
По техническим причинам мое замечание о пазлах не решает призовую задачу. Если бы решало, я был бы первым.