Общее описание метода ветвей и границ организации полного перебора возможностей.
Решение задачи о коммивояжере методом ветвей и границ: основная схема.
Пусть - конечное множество и - вещественно-значная функция на нем; требуется
найти минимум этой функции и элемент множества, на котором этот минимум
достигается.
Имеется несколько городов, соединенных некоторым образом дорогами с известной
длиной; требуется установить, имеется ли путь, двигаясь по которому можно
побывать в каждом городе только один раз и при этом вернуться в город, откуда
путь был начат (“обход коммивояжера”), и, если таковой путь имеется, установить
кратчайший из таких путей.Формализуем условие в терминах теории графов. Города будут вершинами графа, а дороги между городами - ориентированными (направленными) ребрами графа, на каждом из которых задана весовая функция: вес ребра - это длина соответствующей дороги. Путь, который требуется найти, это - ориентированный остовный простой цикл минимального веса в орграфе,такие циклы называются также гамильтоновыми. Первый шаг. Фиксируем множество всех обходов коммивояжера (т.е. всех простых ориентированных остовных циклов). Поскольку граф - полный, это множество заведомо не пусто. Сопоставим ему число, которое будет играть роль значения на этом множестве оценочной функции: это число равно сумме констант приведения данной матрицы весов ребер графа. Если множество всех обходов коммивояжера обозначить через G, то сумму констант приведения матрицы весов обозначим через
j(G). Приведенную матрицу весов данного графа следует запомнить; обозначим ее через M1; таким образом, итог первого шага:множеству G всех обходов коммивояжера сопоставлено чис-ло j(G) и матрица M1.Второй шаг. Выберем в матрице M1 самый тяжелый нуль; пусть он стоит в клетке ;
фиксируем ребро графа и разделим множество G на две части: на часть , состоящую
из обходов, которые проходят через ребро , и на часть , состоящую из обходов, которые не проходят через ребро .Сопоставим множеству следующую матрицу M1,1: в матрице M1 заменим на ¥ число в клетке . Затем в полученной матрице вычеркнем строку номер i и столбец номер j, причем у оставшихся строк и столбцов сохраним их исходные номера. Наконец, приведем эту последнюю матрицу и запомним сумму констант приведения. Полученная приведенная матрица и будет матрицей M1,1; только что запомненную сумму констант приведения прибавим к j(G) и результат, обозначаемый в дальнейшем через j(), сопоставим множеству .Теперь множеству тоже сопоставим некую матрицу M1,2. Для этого в матрице M1 заменим на ¥ число в клетке и полученную в результате матрицу приведем. Сумму констант приведения запомним, а полученную матрицу обозначим через M1,2. Прибавим запомненную сумму констант приведения к числу j(G) и полученное число, обозначаемое в дальнейшем через j(), сопоставим множеству . Теперь выберем между множествами и то, на котором минимальна функция j (т.е. то из множеств, которому соответствует меньшее из чисел j() и j().Заметим теперь, что в проведенных рассуждениях использовался в качестве
исходного только один фактический объект - приведенная матрица весов данного орграфа. По ней было выделено определенное ребро графа и были построены новые матрицы, к которым, конечно, можно все то же самое применить. При каждом таком повторном применении будет фиксироваться очередное ребро графа. Условимся о следующем действии: перед тем, как в очередной матрице вычеркнуть строку и столбец, в ней надо заменить на ¥ числа во всех тех клетках, которые соответствуют ребрам, заведомо не принадлежащим тем гамильтоновым циклам, которые проходят через уже отобранные ранее ребра.
К выбранному множеству с сопоставленными ему матрицей и числом j повторим все то
же самое и так далее, пока это возможно. Доказывается, что в результате получится множество, состоящее из единственного обхода коммивояжера, вес которого равен очередному значению функции j; таким
образом, оказываются выполненными все условия, обсуждавшиеся при описании метода
ветвей и границ. После этого осуществляется улучшение рекорда вплоть до получения окончательного