Решение задачи методом ветвей и границ
Автор: Пользователь скрыл имя, 26 Сентября 2012 в 13:24, курсовая работа
Краткое описание
Каждый человек ежедневно, не всегда осознавая это, решает проблему: как получить наибольший эффект, обладая ограниченными средствами. Наши средства и ресурсы всегда ограничены. Жизнь была бы менее интересной, если бы это было не так. Чтобы достичь наибольшего эффекта, имея ограниченные средства, надо составить план, или программу действий.
Файлы: 1 файл
Решение задачи Коммивояжера методом ветвей и границ.docx
— 310.79 Кб (Скачать)Введение
Каждый
человек ежедневно, не всегда
осознавая это, решает
Актуальность
темы: сейчас решение данной задачи
необходимо во многих областях
промышленности и народного
- Теоретическая часть
- Постановка задачи
Имеются n городов, расстояния (стоимость проезда, расход горючего на дорогу и т.д.) между которыми известны. Коммивояжер должен пройти все n городов по одному разу, вернувшись в тот город, с которого начал. Требуется найти такой маршрут движения, при котором суммарное пройденное расстояние (стоимость проезда и т.д.) будет минимальным.
Очевидно, что задача коммивояжера – это задача отыскания кратчайшего гамильтонова цикла в полном графе.
Существует метод решения задачи коммивояжера, который дает оптимальное решение. Этот метод называется методом ветвей и границ. Решение задачи коммивояжера методом ветвей и границ по-другому называют алгоритмом Литтла.
1.2 Описание метода
Для практической реализации идеи метода ветвей и границ применительно к задаче коммивояжера нужно найти метод определения нижних границ подмножества и разбиения множества гамильтоновых контуров на подмножества (ветвление).
Определение нижних
границ базируется на том
Опишем алгоритм Литтла для нахождения минимального гамильтонова контура для графа с n вершинами. Граф представляют в виде матрицы его дуг. Если между вершинами Xi и Xj нет дуги, то ставится символ «∞».
Алгоритм Литтла для решения задачи коммивояжера можно сформулировать в виде следующих правил:
1. Находим в каждой строке матрицы минимальный элемент и вычитаем его из всех элементов соответствующей строки. Получим матрицу, приведенную по строкам, с элементами
2. Если в матрице , приведенной по строкам, окажутся столбцы, не содержащие нуля, то приводим ее по столбцам. Для этого в каждом столбце матрицы выбираем минимальный элемент , и вычитаем его из всех элементов соответствующего столбца. Получим матрицу
каждая строка и столбец, которой содержит хотя бы один нуль. Такая матрица называется приведенной по строкам и столбцам.
3. Суммируем элементы и , получим константу приведения
которая будет нижней границей множества всех допустимых гамильтоновых контуров, то есть
4. Находим степени нулей
для приведенной по строкам
и столбцам матрицы. Для этого
мысленно нули в матице
5. Выбираем дугу , для которой степень нулевого элемента достигает максимального значения
6. Разбиваем множество всех гамильтоновых контуров на два подмножества и . Подмножество гамильтоновых контуров содержит дугу , - ее не содержит. Для получения матрицы контуров , включающих дугу , вычеркиваем в матрице строку и столбец . Чтобы не допустить образования негамильтонова контура, заменим симметричный элемент на знак «∞».
7. Приводим матрицу
8. Находим множество
9. Делаем приведение матрицы гамильтоновых контуров . Пусть - константа ее приведения. Нижняя граница множества определится так:
10. Сравниваем нижние границы
подмножества гамильтоновых
Процесс разбиения множеств на подмножества сопровождается построением дерева ветвлений.
11. Если в результате ветвлений получаем матрицу , то определяем полученный ветвлением гамильтонов контур и его длину.
12. Сравниваем длину гамильтонова
контура с нижними границами
оборванных ветвей. Если длина
контура не превышает их
1.3 Математическая модель задачи коммивояжера
Задача коммивояжера может быть сформулирована как целочисленная введением булевых переменных , если маршрут включает переезд из города i непосредственно в город j и в противном случае. Тогда можно задать математическую модель задачи, то есть записать целевую функцию и систему ограничений:
(1)
Условия (2) – (4) в совокупности обеспечивают, что каждая переменная равна или нулю, или единице. При этом ограничения (2), (3) выражают условия, что коммивояжер побывает в каждом городе один раз в него прибыв (ограничение (2)), и один раз из него выехав (ограничение (3)).
Однако этих ограничений не достаточно для постановки задачи коммивояжера, так как они не исключают решения, где вместо простого цикла, проходящего через n вершин, отыскиваются 2 и более отдельных цикла (подцикла), проходящего через меньшее число вершин. Поэтому задача, описанная уравнениями (2) – (4) должна быть дополнена ограничениями, обеспечивающими связность искомого цикла.
Для того, чтобы исключить при постановке задачи все возможные подциклы в систему ограничений задачи включают следующее ограничение:
1.4 Алгоритм решения
Дана матрица расстояний, представленная в таблице 1. Необходимо с помощью алгоритма Литтла решить задачу коммивояжера.
Табл.1
j i |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
∞ |
7 |
16 |
21 |
2 |
17 |
2 |
13 |
∞ |
21 |
15 |
43 |
23 |
3 |
25 |
3 |
∞ |
31 |
17 |
9 |
4 |
13 |
10 |
27 |
∞ |
33 |
12 |
5 |
9 |
2 |
19 |
14 |
∞ |
51 |
6 |
42 |
17 |
5 |
9 |
23 |
∞ |
1) Справа к таблице присоединяем столбец Ui, в котором записываем минимальные элементы соответствующих строк. Вычитаем элементы Ui из соответствующих элементов строки матрицы.
j i |
1 |
2 |
3 |
4 |
5 |
6 |
Ui |
|
1 |
∞ |
7 |
16 |
21 |
2 |
17 |
2 |
2 |
13 |
∞ |
21 |
15 |
43 |
23 |
13 |
3 |
25 |
3 |
∞ |
31 |
17 |
9 |
3 |
4 |
13 |
10 |
27 |
∞ |
33 |
12 |
10 |
5 |
9 |
2 |
19 |
14 |
∞ |
51 |
2 |
6 |
42 |
17 |
5 |
9 |
23 |
∞ |
5 |
2) Внизу полученной матрицы присоединяем строку Vj, в которой записываем минимальные элементы столбцов. Вычитаем элементы Vj из соответствующих столбцов матрицы.
j i |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
∞ |
5 |
14 |
19 |
0 |
15 |
2 |
0 |
∞ |
8 |
2 |
30 |
10 |
3 |
22 |
0 |
∞ |
28 |
14 |
6 |
4 |
3 |
0 |
17 |
∞ |
23 |
2 |
5 |
7 |
0 |
17 |
12 |
∞ |
49 |
6 |
37 |
12 |
0 |
4 |
18 |
∞ |
Vj |
0 |
0 |
0 |
2 |
0 |
2 |
3) В результате вычислений получаем матрицу, приведенную по строкам и столбцам, которая изображена в виде таблицы 2.
Табл.2
j i |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
∞ |
5 |
14 |
17 |
019 |
13 |
2 |
03 |
∞ |
8 |
02 |
30 |
8 |
3 |
22 |
04 |
∞ |
26 |
14 |
4 |
4 |
3 |
00 |
17 |
∞ |
23 |
04 |
|
5 |
7 |
07 |
17 |
10 |
∞ |
47 |
6 |
37 |
12 |
08 |
2 |
18 |
∞ |
4) Находим константу приведения:
Таким образом, нижней границей множества всех гамильтоновых контуров будет число .
5) Находим степени нулей
полностью приведенной матрицы.
6) Определяем максимальную
степень нуля. Она равна 19 и
соответствует клетке (1;5). Таким
образом, претендентом на
7) Разбиваем множество всех гамильтоновых контуров на два: и . Матрицу с дугой (1;5) получаем табл.2 путем вычеркивания строки 1 и столбца 5. Чтобы не допускать образования негамильтонова контура, заменяем элемент (5;1) на знак «∞».
j i |
1 |
2 |
3 |
4 |
6 |
2 |
0 |
∞ |
8 |
0 |
8 |
3 |
22 |
0 |
∞ |
26 |
4 |
4 |
3 |
0 |
17 |
∞ |
0 |
5 |
∞ |
0 |
17 |
10 |
47 |
6 |
37 |
12 |
0 |
2 |
∞ |