Автор работы: Пользователь скрыл имя, 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
И все приведенные выше алгоритмы являются «жадными».
Следует подчеркнуть, что не каждый «жадный» алгоритм позволяет получить оптимальный результат в целом. Как нередко бывает в жизни, «жадная стратегия» подчас обеспечивает лишь сиюминутную выгоду, в то время как в целом результат может оказаться неблагоприятным.
Существуют задачи, для которых ни один из известных «жадных» алгоритмов не позволяет получить оптимального решения; тем не менее имеются «жадные» алгоритмы, которые с большой вероятностью позволяют получать «хорошие» решения. Нередко вполне удовлетворительным можно считать «почти оптимальное» решение.
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)
Введем понятие стандартной операции, которую мы будем обозначать символом:
Этим термином мы назовем
процедуру разбиения
(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.
ЗАКЛЮЧЕНИЕ
Задача коммивояжера является
частичным случаем
Существуют несколько методов решения задачи коммивояжера: метод полного перебора, «жадные» методы (Крускала, Прима, и т.п.), генетические алгоритмы и еще множество их обобщений. Однако только метод ветвей и границ дает нам в итоге самое оптимальное решение.
В основе метода ветвей и границ лежит следующая идея если нижняя граница для подобласти A дерева поиска больше, чем верхняя граница какой-либо ранее просмотренной подобласти B, то A может быть исключена из дальнейшего рассмотрения (правило отсева).
Задача о коммивояжере имеет множество обобщений и методы её решения в различных проявлениях используются на практике.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ:
В. М. Бондарев, В. И. Рублинецкий, Е. Г. Качко. Основы программирования.,1986 г.
Ф. А. Новиков Дискретная
математика для программистов Санкт-
Моисеев Н.Н. Методы оптимизации: Моисеев Н.Н., Иванилова Ю.П., Столярова Е.М.-М., 1978, 352 с;
Черноусько Ф.Л. Вариационные задачи механики и управления: Численные методы/ Черноусько Ф.Л., Баничук Н.В.-М.,1973;
http://www.bestreferat.ru/