Практическая часть. Решение задачи о коммивояжере методом ветвей и границ
Из таких соображений выбираем дугу
:
1.
должно быть как можно меньше;
2. желательно выбрать
, чтобы максимально возросла
, следовательно, для дальнейшего разбиения выберем y.
Это приведет к возможному нахождению гамельктонова цикла, а, следовательно, к коррекции величины
.
Чтобы выбрать дугу
необходимо иметь матрицу
, следовательно, прежде всего рассмотрим как можно получить, зная
, матрицы соответствующие
и
.
Схема получения
:
т. к.
входит в любой гамельктоновый цикл из множества y, Поэтому вычеркиваем k – строку и l-столбец в матрице
, т. к. больше не можем въезжать в город l и выезжать из города k.
Из всех дуг уже зафиксированных для множества y составляем связный путь, который обязательно включает в себя последнюю зафиксированную дугу
. Этот связный путь может состоять из одной дуги
. Полагаем, что в матрице ![]()
, где m – конец, а p – начало, т.е. запрещаем подциклы.
Приводим
, в результате получим
с
– константа приведения.
Схема получения
в матрице
полагаем, что
, т.е. запрещаем.
В результате получаем
, приводим
, получаем
и
Схема выбора дуги
просматривая все нулевые элементы
, и для каждого такого элемента рассчитываем величину
– сумма минимального элемента i-ой строки и минимального элемента j-го столбца матрицы
, исключая сам нулевой элемент.
.
выбираем из условия
для всех
можно не получать, а сразу получать
.
Если же в процессе решения задачи придется разбивать
, а соответствующей матрицы нет, то её нужно восстановить из исходной матрицы.
Схема восстановления
для любого X из исходной матрицы
:
Пусть вершина X такова, что для неё уже зафиксированы
.
Шаг 1: для каждой фиксированной дуги ![]()
для каждой
.
Шаг 2: для каждой фиксированной дуги
составляет связный путь, который содержит обязательную дугу
; и запрещает переезд из
в
, т.е.
, где m – коней и p – начало.
Шаг 3: для каждой запрещенной дуги
полагаем, что