Системный анализ / 21. Задача комммивояжера (МВГ)
.DOC
Решение задачи о коммивояжере методом ветвей и границ
Было бы, конечно, несправедливо по отношению к такому мощному методу, каким является метод ветвей и границ, ограничиться рассмотрением только метода Лэнд и Дойг и не затронуть вообще комбинаторные задачи. Тем более, как уже было отмечено, впервые термин "ветви и границы" прозвучал при решении комбинаторной задачи - зазачи о коммивояжере (1963г.).
Сейчас мы попробуем "разработать" алгоритм решения этой задачи с использованием метода ветвей и границ.
Пусть A1, A2,..., An, - множество городов.
C=(cij) - квадратная матрица "расстояний" между городами прядка n.
Пусть коммивояжер выезжает из города A1 и возвращается в этот город, побывав в каждом из остальных городов по одному разу.
Пусть, далее, - множество всех возможных маршрутов. Обозначим (2 k n-1) подмножество всех допустимых маршрутов, каждый из которых характеризуется тем, что выезжая из города A1, коммивояжер последовательно посещает города , а затем - оставшиеся города и возвращается в город A1.
Конкретизируем принцип ветвления.
Пусть коммивояжер находится в пункте A1 - в исходном пункте. Выбором первого города, в который нужно въехать из A1, множество всех возможных маршрутов разбивается на непересекающиеся подмножества 1,2, 1,3,... 1,n:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1,2 |
|
1,3 |
......... |
1,n |
Пусть теперь после посещения городов (2 k n-1) принимается решение о выборе очередного города в который нужно въехать, выехав из города .
Фактически, этим решением множество допустимых маршрутов разбивается на подмножества:
где j{1,i2,i3,...,in}.
Очевидно, что подмножество состоит из одного - единственного маршрута:
, где in{1,i2,i3,...,in-1}.
Выбора нет!
Итак, мы конкретизировали принцип ветвления.
Конкретизируем принцип вычисления нижней границы (оценки)
Здесь "возможны варианты". Рассмотрим один из них.
Оценку подмножества (2 k n-1) будем вычислять следующим образом:
()= ++...++
++(n-k) .
Здесь:
++...+ - фактическая стоимость всех, уже "состоявшихся" переездов;
- стоимость самого короткого переезда из пункта ik в пункт j , в котором еще не был коммивояжер;
(n-k) - количество оставшихся переездов;
- стоимость самого короткого из оставшихся переездов.
Очевидно, что при k=n-1 оценка () совпадает со стоимостью единственного маршрута, составляющего множество - это стоимость маршрута:
, где in{1,i2,i3,...,in-1}.
Как видно, предложенная оценка весьма "оптимистическая". Однако, по мере продвижения (по мере разбиения множества допустимых маршрутов) эта оценка уточняется - убывать, в принципе, не может.
Таким образом, конкретизирован еще один принцип метода ветвей и границ - принцип уточнения оценок.
Теперь о последнем принципе - о принципе оптимальности.
Здесь вполне естественна следующая схема.
Имеется список подмножеств допустимых маршрутов.
Каждое из этих подмножеств имеет свою оценку.
Пусть на очередном шаге работы алгоритма из списка выбирается подмножество с минимальной оценкой.
Если этому подмножеству соответствует полный маршрут (т.е. k=n-1) , то этот маршрут является оптимальным.
Пример
В задаче нужно объехать 5 городов, выехав из города1. Стоимости переездов представлены в таблице.
|
1 |
2 |
3 |
4 |
5 |
1 |
|
4 |
9 |
6 |
1 |
2 |
2 |
|
9 |
2 |
10 |
3 |
11 |
11 |
|
8 |
1 |
4 |
5 |
4 |
3 |
|
8 |
5 |
1 |
11 |
1 |
8 |
|
Шаг 1. Разбиваем полное множество всех маршрутов на 4 подмножества:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
|
14 |
|
15 |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Находим оценку (нижнюю границу) каждого из этих подмножеств.
Подмножество 12:
|
1 |
2 |
3 |
4 |
5 |
1 |
|
4 |
9 |
6 |
1 |
2 |
2 |
|
9 |
2 |
10 |
3 |
11 |
11 |
|
8 |
1 |
4 |
5 |
4 |
3 |
|
8 |
5 |
1 |
11 |
1 |
8 |
|
(12)=c12++(5-2) =4+2+31=9
Подмножество 13:
|
1 |
2 |
3 |
4 |
5 |
1 |
|
4 |
9 |
6 |
1 |
2 |
2 |
|
9 |
2 |
10 |
3 |
11 |
11 |
|
8 |
1 |
4 |
5 |
4 |
3 |
|
8 |
5 |
1 |
11 |
1 |
8 |
|
(13)=c13++(5-2) =9+1+31=13
Подмножество 14:
|
1 |
2 |
3 |
4 |
5 |
1 |
|
4 |
9 |
6 |
1 |
2 |
2 |
|
9 |
2 |
10 |
3 |
11 |
11 |
|
8 |
1 |
4 |
5 |
4 |
3 |
|
8 |
5 |
1 |
11 |
1 |
8 |
|
(14)=c14++(5-2) =6+3+31=12
Подмножество 15:
|
1 |
2 |
3 |
4 |
5 |
1 |
|
4 |
9 |
6 |
1 |
2 |
2 |
|
9 |
2 |
10 |
3 |
11 |
11 |
|
8 |
1 |
4 |
5 |
4 |
3 |
|
8 |
5 |
1 |
11 |
1 |
8 |
|
(15)=c15++(5-2) =1+1+32=8
Заносим подмножества (вместе с оценками) в список.
Из списка выбирается подмножество с минимальной оценкой (это 15 с оценкой 8).
Подмножество 15 разбивается на 3 подмножества:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
|
13 |
|
|
12 |
|
|
8 |
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
|
14 |
|
15 |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
|
153 |
|
154 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вычисляются нижние границы вновь образованных подмножеств.
Подмножество 152 :
(152)=c15+ c52++(5-3) =1+11+2+23=20
Подмножество 153 :
(153)=c15+ c53++(5-3) =1+1+8+22=14
Подмножество 154 :
(154)=c15+ c54++(5-3) =1+8+3+22=16
Заносим подмножества (вместе с оценками) в список.
Из списка выбирается подмножество с минимальной оценкой (это 12 с оценкой 9).
Подмножество 15 разбивается на 3 подмножества:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
|
13 |
|
|
12 |
|
|
8 |
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
|
14 |
|
15 |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
|
14 |
|
|
16 |
123 |
|
124 |
|
125 |
|
|
|
|
|
152 |
|
153 |
|
154 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|