logo
КЛ

§ 4. Метод ветвей и границ: задача коммивояжера. Общая модель задачи поиска

Задача коммивояжера относится к комбинаторным задачам на составление расписания. В свою очередь, к задаче коммивояжера сводятся многие другие задачи, связанные с объездом ряда пунктов и возвращением в исходный пункт: развозка почты, продуктов питания и т.д. Аналогичный характер носят задачи соединения отдельных пунктов линиями электроснабжения, водопровода, газоснабжения и т.п.

Постановка задачи коммивояжера: коммивояжер (агент, рекламирующий товар своей фирмы) должен посетить п городов ( в это число входит и город , из которого начинается поездка ) и вернутся в исходный пункт, побывав в каждом городе только один раз. Известны расстояния между городами (или стоимость проезда). Требуется установить, в каком порядке коммивояжер должен посещать города, чтобы общая длина маршрута (общая стоимость маршрута) была минимальной.

Если города принять за вершины графа, то задача коммивояжера сводится к определению кратчайшего гамильтонового контура.

Метод ветвей и границ является одним из вариантов поиска с возвращением (backtrak).

Рассмотрим общую модель задачи поиска.

Полагаем, что решение задачи состоит из вектора конечной, но не определенной длины, удовлетворяющего некоторым ограничениям и называемого частичным решением.

Каждое решение является элементом линейного упорядоченного множества Таким образом, при исчерпывающем поиске должны рассматриваться элементы множества в качестве возможных решений. В качестве исходного частичного решения выбирается пустой вектор и на основе имеющихся ограничений выясняется, какие элементы из являются кандидатами в . Обозначим это подмножество через В качестве а1 выбираем наименьший элемент множества S1. В результате имеем частичное решение

В общем случае различные ограничения, описывающие решения, говорят о том : из какого подмножества множества выбираются кандидаты для расширения частичного решения

от до .

Если частичное решение не представляет возможностей для выбора элемента ak , то Ø . В этом случае следует вернуться и выбрать новый элемент . Если его выбрать нельзя, то возвращаемся еще дальше и выбираем новый элемент и т.д.

Этот процесс удобно описывать в терминах процедуры прохождения дерева в глубину. Исследуемое подмножество множества для I = 0,1,2,… представляется как дерево поиска следующим образом. Корень дерева (нулевой уровень) есть пустой вектор. Узлы первого уровня есть множество кандидатов для выбора а1 . В общем случае узлы k-го уровня являются кандидатами на выбор ak при условии, что а1, а2,…, выбраны.