Задача коммивояжера

Автор работы: Пользователь скрыл имя, 12 Марта 2012 в 12:33, контрольная работа

Описание

Задача коммивояжера (ЗК), известная также как задача о сверлильном станке или алгоритм коммивояжера была поставлена в 1934 году. Эта задача является одной из знаменитых задач теории комбинаторики и широко применяется при разработке программного обеспечения.

Содержание

ВВЕДЕНИЕ………………………………………………………………..2
1. ОСОБЕННОСТИ РЕШЕНИЯ ЗАДАЧ КОМИВОЯЖЕРА………….3
1.1. Задача коммивояжера: сущность и применение на практике…3
1.2. Методы решения задачи коммивояжера………………………...6
2. ЭВРИСТИЧЕСКИЕ МЕТОДЫ………………………………………..9
2.1. Алгоритм Борувки………………………………………………..11
2.2. Алгоритм Крускала………………………………………………11
2.3. Алгоритм Прима………………………………………………….12
2.4. Вывод………………………………………………………………12
3. МЕТОД ВЕТВЕЙ И ГРАНИЦ……………………………………….13
4. Заключение……………………………………………………………19
5. СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ………………….20

Работа состоит из  1 файл

зад.комивояжера.docx

— 197.97 Кб (Скачать документ)

И все приведенные выше алгоритмы являются «жадными».

Следует подчеркнуть, что  не каждый «жадный» алгоритм позволяет  получить оптимальный результат  в целом. Как нередко бывает в  жизни, «жадная стратегия» подчас обеспечивает лишь сиюминутную выгоду, в то время  как в целом результат может  оказаться неблагоприятным.

Существуют задачи, для  которых ни один из известных «жадных» алгоритмов не позволяет получить оптимального решения; тем не менее имеются  «жадные» алгоритмы, которые с большой  вероятностью позволяют получать «хорошие»  решения. Нередко вполне удовлетворительным можно считать «почти оптимальное» решение.

 

3. МЕТОД ВЕТВЕЙ И ГРАНИЦ

Существует метод решения  задачи коммивояжера, который дает оптимальное решение. Этот метод  называется методом ветвей и границ.

 

Основа этого, ныне широко распространенного метода состоит  в построении нижних оценок решения, которые затем используются для  отбраковки неконкурентоспособных  вариантов.

Функция f(xi, xj) принимает конечное число значений сij, которые мы можем представить в виде таблицы (Рис.3.2). Предположим, что мы выбрали некоторый путь Ss. Его длина будет равна:

(3.1)

причем сумма (3.1) распространена по i, j так, что каждый из индексов встречается в ней один и только один раз. Величины сij с двумя одинаковыми индексами мы приняли равными ∞.

Так как в каждый из вариантов s входит только один элемент из каждой строки и столбца, то мы можем проделать  следующую операцию, которая здесь  называется приведением матрицы. Обозначим через hi наименьший элемент из строки номера i и построим новую матрицу С (1) с элементами

Матрица С (1) определяет новую задачу коммивояжера, которая, однако, в качестве оптимальной будет иметь ту же последовательность городов. Между величинами ls и ls(1) будет существовать, очевидно, следующая связь:

Заметим, что в каждой из строк матрицы С (1) будет теперь, по крайней мере, один нулевой элемент. Далее обозначим через gj наименьший элемент матрицы С (1) , лежащий в столбце номера j, и построим новую матрицу С (2) с элементами:

Величины hi и gi называются константами приведения. Оптимальная последовательность городов для задачи коммивояжера с матрицей С (2) будет, очевидно, такой же, как и для исходной задачи, а длины пути для варианта номера s в обоих задачах будут связаны между собой равенством:

 где                   (3.2)

         (3.3)

т. е. d0 равна сумме констант приведения.

Обозначим через l* решение  задачи коммивояжера, т.е.

где минимум берется по всем вариантам s, удовлетворяющим условию (α) Тогда величина d0будет простейшей нижней оценкой решения:

    (3.4.)

Будем рассматривать теперь задачу коммивояжера с матрицей С (2) , которую мы будем называть приведенной матрицей.

Рассмотрим путь, содержащий непосредственный переход из города номера i в город номера j, тогда  для пути s, содержащего этот переход, мы будем иметь, очевидно, следующую  нижнюю оценку:

Следовательно, для тех  переходов, для которых Сij2 =0, мы будем иметь снова оценку l*≥d0. Естественно ожидать, что кратчайший путь содержит один из таких переходов — примем это соображение в качестве рабочей гипотезы. Рассмотрим один из переходов, для которого Сij2 =0, и обозначим через множество всех тех путей, которые не содержат перехода из i в j.

Так как из города i мы должны куда-то выйти, то множество  содержит один из переходов i→k, где k ≠ j; так  как в город номера j мы должны прийти, то множество  содержит переход m→j, где т ≠ i.

ледовательно, некоторый  путь ls из множества (ij), содержащий переходы i→k и m→j, будет иметь следующую  нижнюю оценку:

Обозначим через

Тогда очевидно, что для любого ls из множества путей мы будем иметь оценку:

   (3.5)

Мы предполагаем исключить  некоторое множество вариантов , поэтому мы заинтересованы выбрать  такой переход i → j, для которого оценка (3.5) была бы самой высокой. Другими словами, среди нулевых элементов матрицы С (2) выберем тот, для которого Өij максимально. Это число обозначим через  . Таким образом, все множество возможных вариантов мы разбили на два множества I1 и I2. Для путей из множества I1, мы имеем оценку (3.4). Для путей из множества I2 оценка будет следующей:

               (3.6)

Рассмотрим теперь множество I1 и матрицу С (2) . Так как все пути, принадлежащие этому множеству, содержат переход i → j , то для его исследования нам достаточно рассмотреть задачу коммивояжера, в которой города номеров i и j совпадают. Размерность этой задачи будет уже равна N – 1, а ее матрица получится из матрицы С (2) вычеркиванием столбца номера j и строки но мера i.

Поскольку i → j невозможен, то элемент  принимаем равным бесконечности.

Рассмотрим случай N=3 (Рисунок  3.2, а), и предположим, что мы рассматриваем тот вариант, который содержит переход 3 → 2. Тогда задача коммивояжера после вычеркивания третьей строки и второго столбца вырождается в тривиальную. Ее матрица изображена на рисунке 3.2, в. В этом случае мы имеем единственный путь, и его длина будет, очевидно, равна сумме:

Итак, если в результате вычеркивания строки номера i и столбца номера j мы получим матрицу второго порядка, то задачу можно считать решенной.

Пусть теперь N >3. После  вычеркивания мы получим матрицу  порядок

N -1 > 2.

С этой матрицей (N — 1)-го порядка  совершим процеурру приведения. Матрицу, которую таким образом получим, обозначим через С (3) , а через d(1) – сумму ее констант приведения. Тогда для ls  I1, мы будем иметь оценку

                      (3.7)

На этом первый шаг алгоритма  закончен. В результате одного шага мы разбили множество всех возможных вариантов на два множества I1 и I2 и для путей, принадлежащих этим множествам, мы получили оценки

   (3.3)

Введем понятие стандартной  операции, которую мы будем обозначать символом:

Этим термином мы назовем  процедуру разбиения произвольного  множества вариантов Ω с приведенной  матрицей N – п-го порядка С (n+2) и оценкой dω на два множества. Одно из этих множеств состоит из всех тех путей, которые содержат переход из города номер s в город номер l и имеют нижнюю оценку d . Другое множество состоит из всех путей, не содержащих этого перехода и имеющих в качестве нижней оценки число dk. Стандартную операцию можно представить в форме следующей блок-схемы:

        (3.4)

так, первый шаг метода ветвей и границ состоит в проведении стандартной операции над исходным множеством Ω. На следующем шаге мы продолжаем развивать дерево возможных  вариантов. Сначала мы сравниваем две оценки d1 и d2 и для последующего анализа выбираем то из множеств I1 или I2, для которого соответствующая оценка меньше.

Предположим, что d1 < d2;

тогда над множеством I1 с матрицей С (3) мы совершим стандартную операцию. В результате мы разобьем множество возможных вариантов I1 на два подмножества II11 и II12, первое из которых содержит некоторый переход i1 → j1 а другое содержит все пути, не имеющие непосредственною перехода из города I1 в город j1. Еще раз повторим рассмотренную выше процедуру: для каждого из нулевых элементов матрицы С (3) построим число

Определим значение

и элемент матрицы С (3) ,для которого достигается это значение. Если ls  II12, то

            (3.8)

Затем в матрице С (3) вычеркиваем строку номера i1 и столбец номера j1, полагаем:

и над полученной матрицей совершаем операцию приведения. В  результате мы найдем новые константы  приведения. Их сумму обозначим через d(II) и в заключение находим оценку d11 для элементов множества II11.

Если ls  II11, то

             (3.9)

На этом второй шаг алгоритма  ветвей и границ закончен. Мы разбили множество вариантов I1 на два множества, II11 и II12, и для элементов этих множеств получили нижние оценки (3.9) и (3.8), соответственно.

Теперь мы должны сравнить оценку (3.9) с оценкой (3.6) для элементов множества I2, которое мы исключили из рассмотрения на предыдущем шаге. Если окажется, что d2 > d11,

то мы переходим к третьему шагу, который состоит в применении стандартной операции к множествуII11. (Если размерность матрицы при этом равна двум, то, как мы видели выше, процесс заканчивается.)

Если окажется, что d11 > d2, то множеством вариантов с оптимальной нижней оценкой будет множество I2. Другими словами, теперь будем предполагать, что наиболее короткий путь содержится среди элементов множества I2 — множества всех вариантов, не содержащих перехода i → j. Следовательно, матрица, характеризующая это множество, получается из матрицы С(2) заменой величины  на ∞. Над этим множеством мы производим стандартную операцию и разбиваем его на два множества II21 и II22 с оценками d21 и d22, соответственно. Одновременно мы выделяем переход k→l, который содержит все варианты множества II21. Затем мы снова сравниваем все оценки d11, d12, d21 и d22 и выбираем то из множеств, для которого оценка будет наименьшей. Над выбранным множеством совершаем стандартную операцию и т. Д. Так мы продолжаем до тех пор, пока очередная матрица не будет иметь порядок (2x2). В этом случае, как мы видели, расчет заканчивается — мы получаем задачу коммивояжера для двух городов (Рисунок 3.5), и длина единственного маршрута будет

 

Итак, мы получили некоторую  цепочку (ветвь) переходов, длину которой  мы вычислили. Сам порядок построения этой цепочки показывает, что ее длина — наименьшая среди всех ветвей дерева, изображенного на рисунке 3.5.

 

ЗАКЛЮЧЕНИЕ

Задача коммивояжера является частичным случаем гамильтоновой  задачи о путешественнике. Суть задачи коммивояжера состоит в нахождении суммарной минимальной характеристики (расстояния, стоимости проезда и  т.д.), при этом коммивояжер должен пройти все n городов по одному разу, вернувшись в тот город, с которого начал.

Существуют несколько  методов решения задачи коммивояжера: метод полного перебора, «жадные» методы (Крускала, Прима, и т.п.), генетические алгоритмы и еще множество  их обобщений. Однако только метод ветвей и границ дает нам в итоге самое  оптимальное решение.

В основе метода ветвей и  границ лежит следующая идея если нижняя граница для подобласти A дерева поиска больше, чем верхняя  граница какой-либо ранее просмотренной  подобласти B, то A может быть исключена  из дальнейшего рассмотрения (правило  отсева).

Задача о коммивояжере имеет множество обобщений и  методы её решения в различных  проявлениях используются на практике.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ:

 

В. М. Бондарев, В. И. Рублинецкий, Е. Г. Качко. Основы программирования.,1986 г.

Ф. А. Новиков Дискретная математика для программистов Санкт-Петербург, Питер, 2001, 304 с ил. 8. Приложения

Моисеев Н.Н. Методы оптимизации: Моисеев Н.Н., Иванилова Ю.П., Столярова  Е.М.-М., 1978, 352 с;

 Черноусько Ф.Л. Вариационные  задачи механики и управления: Численные методы/ Черноусько Ф.Л., Баничук Н.В.-М.,1973;

http://www.bestreferat.ru/referat-219032.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Информация о работе Задача коммивояжера