Это база: Зачем нужна математика в повседневной жизни - Йэн Стюарт
Шрифт:
Интервал:
Закладка:
* * *
Карл Менгер, работы которого в настоящее время рассматриваются как предвестники фракталов, пожалуй, первым из математиков написал о задаче коммивояжера, и было это в 1930 году. Он рассматривал эту задачу под совершенно другим углом, поскольку в то время изучал длины кривых с точки зрения чистой математики. В то время длина кривой определялась как наибольшая величина, получаемая путем сложения длин участков любой ее полигональной аппроксимации, вершинами которой является конечное множество точек, проходимых в том же порядке, в каком они лежат на кривой. Менгер доказал, что тот же ответ получится, если заменить аппроксимирующую ломаную линию конечным множеством точек на кривой и найти минимальное суммарное расстояние вдоль любой ломаной с этими вершинами, в каком бы порядке они ни проходились. Связь с задачей коммивояжера здесь в том, что кратчайший путь Менгера – тот, что является решением задачи коммивояжера, если вершины ломаной рассматривать как города. Менгер назвал это «задачей гонца», заявив, что она применима не только к торговцам, но и к почтальонам, и написал:
Эта задача решается с помощью проведения конечного числа попыток. Правила, благодаря которым число попыток станет ниже числа перестановок заданных точек, неизвестны. Правило, по которому следует двигаться из начальной точки в ближайшую к ней точку, затем в ближайшую к этой и т. д., в общем случае не дает кратчайшего пути.
Эта цитата показывает, что Менгер понимал две ключевые особенности этой задачи. Во-первых, алгоритм нахождения ответа существует. Можно просто рассмотреть все пути по очереди, рассчитать длину каждого и посмотреть, который из них окажется кратчайшим. Полное число возможных маршрутов в точности равно числу перестановок точек, которое конечно. Когда он писал, лучший алгоритм был неизвестен, но все понимали, что перебор всех возможных путей безнадежен, если городов больше дюжины, поскольку маршрутов слишком много. Во-вторых, он видел, что «очевидный» метод – из каждой точки двигаться к ближайшей – обычно не работает. Специалисты называют этот метод эвристическим алгоритмом ближайшего соседа. На рисунке показана одна из причин, по которым он не работает.
Одна из причин, по которым метод ближайшего соседа не работает. Начните с точки A и всегда переходите к ближайшей из точек, которые вы еще не посетили. Маршрут слева будет выглядеть как ABCDE. Однако маршрут справа – ACBDE – короче
Менгер шесть месяцев в 1930 и 1931 годах читал в Гарвардском университете лекции, часть из которых прослушал великий тополог Хасслер Уитни. Годом позже Уитни выступил с лекцией, где высказался о том, как следует подходить к поиску кратчайшего пути по всем 48 (на тот момент) штатам Америки. Некоторое время в математических кругах эту проблему называли «задачей 48 штатов», но потом кто-то придумал более изящное название «задача коммивояжера». В печати оно впервые было упомянуто в 1949 году в докладе Джулии Робинсон.
Менгер продолжал работать над задачей коммивояжера и родственными вопросами. В 1940 году Ласло Фейеш Тот заинтересовался, по существу, этой же задачей: нахождением кратчайшего пути через n точек единичного квадрата. В 1951 году Самюэл Верблунски доказал, что ответ составляет меньше чем 2 +√2 · 8n. Позже математики доказывали, что минимальная длина пути через n точек в фиксированной области не превышает определенной константы, умноженной на квадратный корень из n, причем величина константы с каждым разом все уменьшалась.
В конце 1940-х годов одной из ведущих организаций, занимавшихся исследованием операций, была RAND Corporation в Санта-Монике (штат Калифорния). Исследователи RAND немало сил посвятили решению родственной задачи о перевозках, и Джордж Данциг с Тьяллингом Купмансом высказали предположение, что их работа над тем, что сейчас называется линейным программированием, может иметь значение и для решения задачи коммивояжера. Линейное программирование – эффективный и практичный метод решения многих задач комбинаторной оптимизации. Это метод максимизации линейной комбинации переменных с ограничениями в виде неравенств, утверждающих, что другие их линейные комбинации должны быть положительными или отрицательными. Данциг придумал первый практический алгоритм – симплексный метод, широко используемый до сих пор. Неравенства определяют многомерный выпуклый многогранник, а алгоритм перемещает точку вдоль ребер этого многогранника до тех пор, пока величина, которую мы хотим максимизировать, увеличивается.
Первого по-настоящему значимого успеха в решении задачи коммивояжера добились в 1954 году исследователи RAND Данциг, Делберт Фалкерсон и Селмер Джонсон при помощи метода линейного программирования Данцига. Они адаптировали метод к решению именно этой задачи и предложили систематические новые методы, в частности использование «секущих плоскостей». В результате был найден нижний предел длины оптимального маршрута. Если вам удается находить маршрут лишь ненамного длиннее, то вы на правильном пути и внутреннее чутье не обманывает вас. Данциг, Фалкерсон и Джонсон воспользовались этими идеями, чтобы получить первое решение задачи коммивояжера для разумного числа городов, а именно найти кратчайший маршрут через 49 городов: по одному в каждом из 48 штатов США плюс столичный Вашингтон. Это, похоже, та самая задача, которую упоминал Уилкинсон в 1930-е годы, и определенно та самая, о которой писала Джулия Робинсон в 1949 году.
* * *
В 1956 году пионер исследования операций Меррилл Флуд заявил, что задача коммивояжера сложна. Возникает ключевой вопрос: насколько сложна? Чтобы ответить, мы должны вернуться к P и NP – показателям вычислительной сложности ценой миллион долларов. Похоже, что Флуд был прав, причем очень сильно.
Математики всегда внимательно относились к практичности методов решения задач, хотя, когда дело стопорится, все сходятся во мнении, что любой метод лучше, чем ничего. С чисто теоретической точки зрения возможность просто доказать, что решение задачи существует, может стать серьезным шагом вперед. Почему? Потому что, если нет уверенности в существовании решения, можно напрасно потерять много времени на его поиски.
Мой любимый пример – то, что я называю Шатром Матушки Мушки. Малышка Мушка парит в футе (в метре, в километре – на любой ненулевой высоте) над полом. Матушка Мушка хочет сшить шатер с основанием на полу, чтобы он прикрывал Малышку, и использовать при этом как можно меньше материи. Какой шатер имеет минимальную площадь? Если мы представим Малышку Мушку в виде точки, то ответ будет «такого шатра не существует». Сшить можно конический шатер