Применение данного метода к задаче коммивояжера, будет отличаться принципом, по которому осуществляется ветвление, и методами получения верхней и нижней оценок. В данном случае будет рассмотрено не дихотомическое ветвление, а полный перебор добавляемых вершин. В качестве начальной вершины ветвления можно выбрать произвольную (например, первую).
Нижняя оценка может быть получена следующим образом:
(10) |
Верхняя – как решение задачи методом ближайшего соседа (алгоритм см. выше).
Шаг 1. Производим ветвление от вершины
таким образом, чтобы не производить циклов.Шаг 2. Для каждой ветки, соответствующей добавлению в маршрут ребра (
вычисляем верхнюю и нижнюю оценку. .Шаг 3. Если в существует направление
, нижняя оценка в котором больше верхней в направлении : , то направление можно исключить из дальнейшего рассмотрения.Шаг 4. Повторяем шаги 1-3 до полного построения маршрута.
Указания по отображению процесса поиска решения:
Режим демонстрации:
Отображать матрицу переходов. Вершины ветвления помечать соответствующим номером добавляемой в решение переменной
. Для каждой вершины ветвления отображать верхнюю и нижнюю оценки (эти оценки можно расставлять не у вершины, а у ребра) . Отбрасываемые ветви помечать цветом.Режим обучения:
Пользователь помечает вершины ветвления и отбрасывает неперспективные ветки. Если ветвление идет в не правильном направлении, то пользователь предупреждается об этом. Пользователь выбирает ветку с оптимальным решением.
Обозначим через
- длину пути, проходящего по всем вершинам множества , с началом в вершине с номером i и концом в вершине с номером 1. Рекуррентное соотношение для задачи коммивояжера выглядит следующим образом:, | (11) |
При граничных условиях:
(12) |
Значение, полученное в результате вычисления соотношения (11), является оптимальным решением исходной задачи.
Алгоритм состоит в последовательном вычислении соотношений (11), процесс поиска решения отображается в виде дерева.
Указания по отображению процесса поиска решения:
Режим демонстрации:
Отображать задачу. Вершины ветвления помечать соответствующим номером добавляемой в решение переменной
. Помечать ребра значениями или , если достигнуты граничные условия. Ветви с наименьшей суммарной длиной помечать цветом.Режим обучения:
Пользователь помечает вершины ветвления и расставляет расстояния на ребрах. Если метки расставляются не правильно или выбрана не правильная вершина ветвления, то пользователь предупреждается об этом. Пользователь выбирает ветку с оптимальным решением.
Постановка задачи
Дана сеть G(V, E) с источником s и стоком t. Каждое ребро имеет заданную пропускную способность
. В этой сети необходимо найти максимальное значение потока, проходящего из источника s в сток t. Задаче о максимальном потоке соответствует задаче о минимальном разрезе. В задаче о минимальном разрезе необходимо найти такой разрез графа G(V, E): , имеющий минимальное значение суммы пропускных способностей дуг соединяющих и . Величина максимального потока равна величине минимального разреза (теорему, доказывающую это утверждение, можно найти в работе [2]).Методы решения
Метод Форда-Фалкерсона (иногда он называется методом меток) является первым из предложенных методов поиска максимального потока и базисным для многих алгоритмов, предложенных позднее. Более подробно с данным методом можно ознакомиться в работах [2, 3].
Из источника осуществляется поиск до тех пор, пока не будет достигнут сток. По найденному пути осуществляется насыщение потока, величина потока из вершины
в вершину обозначается как . В ходе алгоритма каждой вершине присваивается метка, состоящая из двух частей: смежная вершина, с указанием направления потока, и поток через вершину. При этом если поток идет из вершины в вершину , то метка имеет вид [ ], иначе [ ].Шаг 1. Присвоить вершине
метку [0, ]. Обозначим текущую вершину .Шаг 2. Берем произвольную помеченную вершину
, рассматриваем все не помеченные смежные с вершины .Если
, , метка [+ ].Иначе, если
, , метка [ ].Шаг 3. Повторяем шаг 2 пока не будут выполнены следующие условия:
Если помечена вершина
, то переходим на Шаг 4.Если вершина
не помечена и меток больше нельзя расставить, то выход.Шаг 4. Пользуясь метками, производим насыщение ребер, начиная с вершины
.Если пометка вершины
имеет вид [+ ], то .Если пометка вершины
имеет вид [ ], то .Переходим в вершину
: .Повторяем шаг 4 пока не достигнем источника:
.Шаг 5. Переходим на шаг 1.
Замечание: полученные на последней итерации пометки позволяют определить минимальный разрез. В него входят ребра, соединяющие помеченные и непомеченные вершины.
Указания по отображению процесса поиска решения:
Режим демонстрации:
Для каждой вершины отображаются метки [
], для ребер отображается пропускная способность и проходящий поток . Насыщенные ребра выделяются цветом.