![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Главная Рефераты по рекламе Рефераты по физике Рефераты по философии Рефераты по финансам Рефераты по химии Рефераты по хозяйственному праву Рефераты по цифровым устройствам Рефераты по экологическому праву Рефераты по экономико-математическому моделированию Рефераты по экономической географии Рефераты по экономической теории Рефераты по этике Рефераты по юриспруденции Рефераты по языковедению Рефераты по юридическим наукам Рефераты по истории Рефераты по компьютерным наукам Рефераты по медицинским наукам Рефераты по финансовым наукам Рефераты по управленческим наукам Психология и педагогика Промышленность производство Биология и химия Языкознание филология Издательское дело и полиграфия Рефераты по краеведению и этнографии Рефераты по религии и мифологии Рефераты по медицине Рефераты по сексологии Рефераты по информатике программированию Краткое содержание произведений |
Курсовая работа: Решение задачи коммивояжера методом ветвей и границКурсовая работа: Решение задачи коммивояжера методом ветвей и границРасчетно-графическая работа по теории алгоритмов На тему «Решение задачи коммивояжера методом ветвей и границ» План 1. Вступление 2. Постановка задачи 3. Математическая модель задачи коммивояжера 4. Алгоритм решения 5. Выводы 6. Список использованной литературы 1. Вступление В 1859 г. Сэр Вильям Гамильтон, знаменитый математик, давший миру теорию комплексного числа и кватерниона, предложил детскую головоломку, в которой предлагалось совершить «круговое путешествие» по 20 городам, расположенных в различных частях земного шара. Каждый город соединялся дорогами с тремя соседними так, что дорожная сеть образовывала 30 ребер додекаэдра, в вершинах которого находились города a, b, … t. Обязательным условием являлось требование: каждый город за исключением первого можно посетить один раз. Гамильтонова задача о путешественнике нередко преобразуется в задачу о коммивояжере. Коммивояжер – не свободно путешествующий турист, а деловой человек, ограниченный временными, денежными или какими-либо другими ресурсами. Гамильтонова задача может стать задачей о коммивояжере, если каждое из ребер снабдить числовой характеристикой. Это может быть километраж, время на дорогу, стоимость билета, расход горючего и т.д. Таким образом, условные характеристики дадут числовой ряд, элементы которого могут быть распределены между ребрами как угодно. 2. Постановка задачи Рассмотрим задачу о коммивояжере. Имеются n городов, расстояния (стоимость проезда, расход горючего на дорогу и т.д.) между которыми известны. Коммивояжер должен пройти все n городов по одному разу, вернувшись в тот город, с которого начал. Требуется найти такой маршрут движения, при котором суммарное пройденное расстояние (стоимость проезда и т.д.) будет минимальным. Очевидно, что задача коммивояжера – это задача отыскания кратчайшего гамильтонова цикла в полном графе. Можно предложить
следующую простую схему решения задачи коммивояжера: сгенерировать все n! возможных перестановок вершин полного графа, подсчитать для
каждой перестановки длину маршрута и выбрать кратчайший. Однако, n! с ростом n растет быстрее,
чем любой полином от n, и
даже быстрее, чем Решить задачу коммивояжера также можно с помощью алгоритма Крускала и «деревянного» алгоритма. Эти методы ускоряют разработку алгоритма по сравнению с методом полного перебора, однако не всегда дают оптимальное решение. Существует метод решения задачи коммивояжера, который дает оптимальное решение. Этот метод называется методом ветвей и границ. Решение задачи коммивояжера методом ветвей и границ по-другому называют алгоритмом Литтла. Если считать города вершинами графа, а коммуникации (i,j) – его дугами, то требование нахождения минимального пути, проходящего один и только один раз через каждый город, и возвращения обратно, можно рассматривать как нахождение на графе гамильтонова контура минимальной длины. Для практической реализации идеи метода ветвей и границ применительно к задаче коммивояжера нужно найти метод определения нижних границ подмножества и разбиения множества гамильтоновых контуров на подмножества (ветвление). Определение нижних границ
базируется на том утверждении, что если ко всем элементам i-й строки или j-го столбца матрицы C прибавить или отнять число Опишем алгоритм Литтла для нахождения минимального гамильтонова контура для графа с n вершинами. Граф представляют в виде матрицы его дуг. Если между вершинами Xi и Xj нет дуги, то ставится символ «∞». Алгоритм Литтла для решения задачи коммивояжера можно сформулировать в виде следующих правил: 1. Находим в каждой
строке матрицы 2. Если в матрице каждая строка и столбец, которой содержит хотя бы один нуль. Такая матрица называется приведенной по строкам и столбцам. 3. Суммируем элементы которая будет нижней границей множества всех допустимых гамильтоновых контуров, то есть 4. Находим степени нулей для приведенной по строкам и столбцам матрицы. Для этого мысленно нули в матице заменяем на знак «∞» и находим сумму минимальных элементов строки и столбца, соответствующих этому нулю. Записываем ее в правом верхнем углу клетки 5. Выбираем дугу 6. Разбиваем множество
всех гамильтоновых контуров 7. Приводим матрицу
гамильтоновых контуров 8. Находим множество
гамильтоновых контуров 9. Делаем приведение
матрицы гамильтоновых контуров 10. Сравниваем нижние
границы подмножества гамильтоновых контуров Процесс разбиения множеств на подмножества сопровождается построением дерева ветвлений. 11. Если в результате
ветвлений получаем матрицу 12. Сравниваем длину гамильтонова контура с нижними границами оборванных ветвей. Если длина контура не превышает их нижних границ, то задача решена. В противном случае развиваем ветви подмножеств с нижней границей, меньшей полученного контура, до тех пор, пока не получим маршрут с меньшей длиной или не убедимся, что такого не существует. 3. Математическая модель задачи коммивояжера Задача коммивояжера может
быть сформулирована как целочисленная введением булевых переменных
Условия (2) – (4) в
совокупности обеспечивают, что каждая переменная Однако этих ограничений не достаточно для постановки задачи коммивояжера, так как они не исключают решения, где вместо простого цикла, проходящего через n вершин, отыскиваются 2 и более отдельных цикла (подцикла), проходящего через меньшее число вершин. Поэтому задача, описанная уравнениями (2) – (4) должна быть дополнена ограничениями, обеспечивающими связность искомого цикла. Для того, чтобы исключить при постановке задачи все возможные подциклы в систему ограничений задачи включают следующее ограничение:
4. Алгоритм решения Дана матрица расстояний, представленная в таблице 1. Необходимо с помощью алгоритма Литтла решить задачу коммивояжера. Табл.1
1) Справа к таблице присоединяем столбец Ui, в котором записываем минимальные элементы соответствующих строк. Вычитаем элементы Ui из соответствующих элементов строки матрицы.
2) Внизу полученной матрицы присоединяем строку Vj, в которой записываем минимальные элементы столбцов. Вычитаем элементы Vj из соответствующих столбцов матрицы.
3) В результате вычислений получаем матрицу, приведенную по строкам и столбцам, которая изображена в виде таблицы 2. Табл.2
4) Находим константу приведения Таким образом, нижней границей множества всех гамильтоновых контуров будет число 5) Находим степени нулей
полностью приведенной матрицы. Для этого как бы заменяем в ней все нули на знак
«∞» и устанавливаем сумму минимальных элементов соответствующей строки и
столбца. Степени нулей записаны в правых верхних углах клеток, для которых 6) Определяем максимальную степень нуля. Она равна 19 и соответствует клетке (1;5). Таким образом, претендентом на включение в гамильтонов контур является дуга (1;5). 7) Разбиваем множество
всех гамильтоновых контуров
8) Матрицу гамильтоновых
контуров
9) Делаем дополнительное
приведение матрицы контуров 10) Находим константу приведения для множества контуров
Следовательно, нижняя
граница множества 11) Сравниваем нижние
границы подмножеств то дальнейшему ветвлению
подвергаем множество На рис.1 представлено ветвление по дуге (1;5). Рис.1 Переходим к ветвлению
подмножества
12) Узнаем степени нулей
матрицы. Претендентами на включение в гамильтонов контур будут несколько дуг
(5;2) и (6;3). Для дальнейших расчетов выберем дугу (6;3). Разбиваем множество Табл.3
Табл.4
Определим константы приведения для этих матриц
Следовательно
Так как
Претендентом к включению
в гамильтонов контур станет дуга (3;2). Разбиваем множество
Очевидно
Следовательно, очередному
ветвлению нужно подвергнуть подмножество Переходим к ветвлению
подмножества Находим нижние границы
Следовательно, очередному
ветвлению нужно подвергнуть подмножество Определим полученный гамильтонов контур. В него вошли дуги Длина контура равна Так как границы оборванных ветвей больше длины контура 1 – 5 – 4 – 6 – 3 – 2 – 1, то этот контура имеет наименьшую длину. алгоритм крускал коммивояжер Рис.25 Выводы Задача коммивояжера является частичным случаем гамильтоновой задачи о путешественнике. Суть задачи коммивояжера состоит в нахождении суммарной минимальной характеристики (расстояния, стоимости проезда и т.д.), при этом коммивояжер должен пройти все n городов по одному разу, вернувшись в тот город, с которого начал. Существуют несколько методов решения задачи коммивояжера: метод полного перебора, с помощью метода ветвей и границ (алгоритм Литтла), алгоритма Крускала, «деревянного» алгоритма и т.д. Однако только метод ветвей и границ дает нам в итоге самое оптимальное решение. Основная идея метода
Литтла состоит в том, что вначале строят нижнюю границу длин маршрутов для
всего множества гамильтоновых контуров Для практической
реализации идеи метода ветвей и границ применительно к задаче коммивояжера
нужно найти метод определения нижних границ подмножества и разбиения множества
гамильтоновых контуров на подмножества (ветвление). Такое определение нижних
границ базируется на том утверждении, что если ко всем элементам i-й строки или j-го столбца матрицы C прибавить или отнять число Используя ЭВМ, методом
ветвей и границ можно решить задачи коммивояжера для 6. Список использованной литературы 1. О. Е. Акимов «Дискретная математика. Логика, группы, графы», Москва, 2003, 376 с., ил., изд. дом «Лаборатория базовых знаний». 2. Ф. А. Новиков «Дискретная математика для программистов» С.-Петербург, 2002 г. 304 с., ил., изд. дом «Питер». 3. В. М. Бондарев «Основы программирования» 1998 г., 368 с. изд. дом «Феникс» |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|