Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
5.11. Задача о коммивояжереЭта задача — одна из самых известных задач в исследовании операций: коммивояжер должен встретиться с клиентами, которые находятся в разных городах. Он выезжает из одного города и возвращается в него в конце путешествия. Предполагается, что коммивояжер никогда не бывает дважды в одном городе. В каком порядке он должен посетить все города, чтобы суммарное пройденное им расстояние было минимальным?
Рис. 5.26. «Кругосветное путешествие» Гамильтона. По-видимому, впервые этой задачей стали заниматься благодаря одной головоломке, придуманной английским математиком Гамильтоном в 1859 г. Она состояла в том, чтобы вычислить на графе, приведенном на рис. 5.26, все возможные маршруты, которыми может воспользоваться путешественник, если места, которые он должен посетить, соединены так, как показано на рисунке. Этот граф породила игра, представляющая земной шар в форме додекаэдра. Данная задача «кругосветного путешествия с возвращением в исходную точку», известная также как задача о гамильтоновом цикле, связана с теорией групп, а также (неожиданным образом) с задачей о четырех красках, рассмотренной в предыдущем разделе. Особенностью задачи о коммивояжере является необходимость дополнительно учитывать расстояния от города до города, которые предполагаются известными. Эти «расстояния» можно заменить на количество затраченного времени, стоимость проезда или даже на любые произвольные значения. В общем случае мы даже не предполагаем, что стоимость проезда из Итак, пусть, например, наш коммивояжер должен посетить поочередно шесть городов (соответствующие стоимости указаны в табл. 5.3). Заранее, когда зафиксирован исходный пункт, Таблица 5.3. Матрица расстояний для задачи о коммивояжере
мы располагаем числом различных маршрутов, равным числу перестановок из (см. скан) 5.11.1. Первый этап: поиск решенияКак и в предыдущей задаче, найти хотя бы одно решение — тривиально, поскольку подойдет любая комбинация шести городов. Таким образом, маршрут случае заключающиеся в том, что мы должны получить в конечном счете только один цикл, по мере нашего продвижения вперед все больше и больше ограничивают возможности выбора, и если вначале мы выберем небольшие значения стоимостей, то значения стоимостей путей в конце работы алгоритма будут обязательными и могут оказаться сколь угодно большими. Тем не менее попробуем использовать этот способ. Из города С мы отправимся в город При построении этого решения мы были вынуждены формировать искомый цикл, постепенно добавляя к последней вершине очередной отрезок пути. Мы не обязаны применять этот способ и (как в задаче о восьми ферзях) мы можем выбирать варианты в любом порядке, фиксируя на каждом этапе в множестве, состоящем из Изучая проблему с этой точки зрения и учитывая предыдущий опыт, мы можем догадаться, что следует выбирать дуги не с наименьшей стоимостью, а дуги с не слишком высокой стоимостью. Но какие же дуги мы будем считать «дорогостоящими»? Очевидно, что данное понятие является относительным: поскольку на каждой горизонтали и каждой вертикали мы должны выбрать только одну дугу, «дорогостоящей» может быть названа любая дуга, стоимость которой существенно отклоняется от минимальных значений, зафиксированных в соответствующих вертикалях и горизонталях. Итак, предположим, что мы должны избегать все дуги, стоимости которых в нашем примере превышают на 10 единиц минимальные значения, отмеченные по горизонтали и вертикали. В табл. 5.4 указаны максимально допустимые стоимости для горизонталей и вертикалей, причем в матрице сохраняются только те дуги, стоимости которых строго меньше хотя бы одной из этих границ. Итак, если по предположению искомый оптимальный цикл пройдет лишь по невычеркнутым дугам, то очевидно, что мы выдвинули слишком оптимистическую гипотезу, так как на самом деле ничто не гарантирует, что в этом новом графе, содержащем только «хорошие» элементарные пути, существует хотя бы одно решение. Таблица 5.4. (см. скан) Матрица, в которой устранены слишком дорогостоящие пути Действительно, могло, например, получиться так, что сразу в двух горизонталях оказались бы вычеркнутыми все дуги, кроме одной, причем обе эти дуги стояли бы на одной вертикали. Очевидно, что тогда из двух разных пунктов мы могли бы попасть только в один — соответствующий данному столбцу — город, и, следовательно, задача о гамильтонове цикле не имела бы решения. Что же теперь из этого следует? Были ли мы настроены слишком оптимистично? Из табл. 5.4 видно, что в первой строке мы располагаем единственной возможностью: из А мы можем попасть только в Дуга Таблица 5.5 (см. скан) На этом этапе все степени свободы но горизонтали и вертикали равны 2. Поэтому следующую дугу мы должны действительно выбирать. Например, из самой «дорогой» строки
Рис. 5.27. Частичное решение задачи о коммивояжере. Мы выбираем Итак, мы в конце концов получили гамильтонов цикл — Если бы операция устранения дуг в зависимости от их стоимостей оказалась слишком жесткой и не позволила построить цикл, надо было бы ослабить введенное ограничение, разрешив сохранять дуги, больше отклоняющиеся от минимумов, чем мы установили вначале. Получив хорошее решение, следует перейти к фазе оптимизации. 5.11.2. Второй этап: поиск оптимального решенияВерхняя грань искомого оптимума нам уже известна. Но теперь, как в теории физических измерений или как при решении задачи о раскрашивании графа, было бы полезно задать еще и нижнюю грань. Иначе говоря, не существует ли какого-нибудь понятия (вроде клики), которое позволило бы нам утверждать, что стоимость любого решения заведомо не меньше некоторой известной величины? Выделим в исходной задаче какую-нибудь подзадачу и займемся рассуждениями. Нужно, чтобы решение этой более простой или «маленькой» задачи оказалось обязательно меньшим по стоимости, чем решение исходной задачи. Так, рассмотрим все города
мы получаем минимальную стоимость 16 и, более того, можем вычесть по 16 единиц из всех расстояний, не изменив при этом формы цикла (так как оптимизируемая функция — это простая сумма элементарных стоимостей, причем из каждой строки берется по одному слагаемому). Итак, стоимости выезда из города А теперь можно представить следующим образом:
Рассуждая аналогично для пяти оставшихся строк, мы вычитаем из строки А число 16, из В число 1, из С число 0, из Таблица 5.6
Но нам еще нужно, чтобы коммивояжер побывал в каждом из 6 городов только один раз (приезды соответствуют 6 столбцам нашей таблицы). На данном этапе в любой город можно приехать, воспользовавшись дугой, стоимость которой после вычитания равна нулю. Исключением является город А, Таблица 5.7 (см. скан) минимальная стоимость приезда в который составляет 5. Мы можем вычесть из всего столбца эту величину, поскольку подзадача приезда в А обязательно должна быть решена. Новые стоимости приведены в табл. 5.7. Мы вычли величину
Но поскольку для получения реального значения
где В нашем примере Таблица 5.8 (см. скан) Теперь осталось построить на этой матрице новый маршрут, обладающий, если это возможно, стоимостью, меньшей Мы могли бы снова воспользоваться понятием степеней свободы и, следовательно, начать выбирать маршрут с горизонтали Е. Но так как для случая неуменьшенной матрицы этот критерий был бы неэффективен, мы будем исходить из стоимостей и оценивать относительную выгоду от использования дуг с наименьшими (т. е. нулевыми) стоимостями. На самом деле все эти дуги с нулевыми стоимостями заранее не эквивалентны. Идеальный маршрут должен был бы проходить только по таким дугам, но он не обязательно существует. В частности, мы не можем приехать в город Некоторые из дуг с нулевыми стоимостями не могут быть включены в маршрут." Тогда встает вопрос: какова минимальная стоимость запрета на «поездку» по дуге с нулевой стоимостью? Поскольку в любом случае мы должны уехать из города, расположенного в данном столбце, минимальная стоимость этого перемещения составит сумму минимального значения стоимости по горизонтали (наш нуль не считается) и минимального значения стоимости по вертикали. Эта величина, используемая во многих задачах на оптимизацию, обычно называется пошлиной. Она вычисляется для идеального варианта, который состоит в выборе дуги с нулевой стоимостью, и оценивает наименьшую стоимость — минимальную пошлину, которую нужно заплатить при отказе от этого выбора. Вытекающая из данной идеи стратегия поиска состоит в том, чтобы каждый раз выбирать вариант, для которого пошлина является максимальной. В задаче о коммивояжере пошлина записывается в виде
Таким образом, в нашем примере Выбор, который обойдется нам дороже всего, если мы от него сейчас откажемся, связан, следовательно, с дугой Таблица 5.9. (см. скан) Ниже приводится рабочая таблица (табл. 5.9, а). В этой гипотезе отъезд из города В стоит не менее 1. Поэтому мы снова произведем в этой строке преобразование стоимостей и на то же число увеличим нижнюю границу Вычислим пошлины: Прохождение по дуге результате мы получаем новую таблицу (табл. 5.10, а). После вычитания двух единиц по горизонтали Таблица 5.10. (см. скан) На этот раз мы больше не располагаем возможностью выбора: дуга У нас нет гарантии, что полученный цикл является оптимальным, поскольку на дереве остается еще одна ветвь, которая может привести к результату, обладающему приемлемой стоимостью. Эта ветвь соответствует отрицанию нашего первого предположения, т. е. случаю, когда искомый цикл не проходит по дуге Рис. 5.28. (см. скан) Решеиие задачи о коммивояжере. на данной ветви нет ни одного решения со стоимостью меньше 63 и полученный раньше цикл является оптимальным. Таблица 5.11 (см. скан) Мы можем также доказать, что это оптимальное решение является единственным. Для этого достаточно опять ввести в предыдущую матрицу всего лишь одну дугу стоимостью 5 (дугу Дуги Итак, единственный оптимальный маршрут для нашего коммивояжера — это
|
1 |
Оглавление
|