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