- •Тема 2-1. Задача о коммивояжере.
- •Тема 2-2. Методы оптимизации на графах.
- •Порядковая функция графа
- •Числовые функции графа
- •Оптимизация пути в графах без контуров.
- •Постановка задачи оптимизации пути в графах без контуров.
- •Оптимизация пути в графах с контурами.
- •Алгоритм Форда.
- •Эвристические методы оптимизации. Алгоритм Флетчера-Кларка.
Оптимизация пути в графах с контурами.
Для графов с контурами поиск максимального пути затруднён, т.к. он может не существовать. Для отыскания минимального пути существуют разные алгоритмы.
Алгоритм Форда.
Общая постановка задачи:
Задан произвольный связный орграф, каждой дуге которого приписано положительное число. Найти минимальный путь между двумя вершинами графа.
Примечание: Порядковая функция графа не задана.
Решение: Для поиска минимального пути между x0 и xn руководствуются следующими правилами:
1. Вершине x0 приписывается метка 0=0. Всем остальным xi приписывается i=.
2. Выбирается произвольная дуга x0xi и вершине xi приписывается метка i=0+l(x0,xi), где l(x0,xj) - вес дуги между x0 и xi.
3. Для вершины xj с меткой j ищется вершина xi, от которой идёт такая дуга в xj, что jj и где: j=i+l(xi,xj).
Вершине xj приписывается метка j.
4. После разметки всех вершин графа для произвольной вершины xj с меткой j рассматриваем все вершины xi с дугами, ведущими в вершину xj , и выбирается новая метка jj и такая, что j является минимальной из всех возможных меток.
5. Процедура пункта 4 проводится для каждой вершины графа возможно и не один раз, пока не будут получены минимальные метки у каждой вершины графа.
6. Выбор минимального пути осуществляют по правилам получения минимального пути для графа без контуров.
Пример.
Найти минимальный путь из x0 в x6.
1 шаг. Вершине x0 приписывается метка 0=0. Всем остальным xi приписывается i=.
2 шаг. Рассматриваем вершину x1 и дугу x0x1 . Вершине x1 приписываем метку 1=0+l(x0,x1)=0+4=4.
3 шаг. Рассматриваем вершину x3 и дугу x0x3 . Тогда 3=0+l(x0,x3)=0+2=2.
4 шаг. Рассматриваем вершину x2 и дугу x0x2 . Тогда 2=0+l(x0,x2)=0+5=5.
5 шаг. Рассматриваем вершину x5 и дугу x0x5 . Тогда 5=0+l(x0,x5)=0+4=4.
6 шаг. Рассматриваем вершину x4 и дугу x1x4 . Тогда 4=1+l(x1,x4)=4+2=6.
7 шаг. Рассматриваем вершину x6 и дугу x4x6 . Тогда 6=4+l(x4,x6)=6+1=7.
Разметка вершин показана на рисунке кружками. Выбор дуги (xi,xj) при разметке вершины xj осуществляется совершенно произвольно. Единственное ограничение: метка i вершины xi не должна быть равна .
8 шаг. Рассматриваем вершину x2 и стремимся уменьшить её метку. Для этого рассматриваем все дуги, ведущие в x2: выписываем все возможные выражения для метки 2: 2=0+l(x0,x2)=0+5=5.
2=3+l(x3,x2)=2+1=3.
2=min=3, поэтому заменяем метку вершины x2 на 3.
9 шаг. Аналогично для x4 : 4=1+l(x1,x4)=4+2=6.
4=2+l(x2,x4)=3+2=5.
4=min=5, поэтому заменяем метку вершины x4 на 5.
10 шаг. Аналогично для x5 : 5=3+l(x3,x5)=2+1=3.
5=4+l(x4,x5)=5+2=7.
5=min=3, поэтому заменяем метку вершины x5 на 3.
11 шаг. Аналогично для x6 : 6=4+l(x4,x6)=5+1=6.
6=2+l(x2,x6)=3+3=6.
6=5+l(x5,x6)=3+5=8.
6=min=6, поэтому заменяем метку вершины x6 на 6.
12 шаг. Для x1 понижение невозможно.
Дальнейшее понижение меток вершин невозможно, поэтому прекращаем разметку.
13 шаг. Ищем минимальный путь из x6 в x0 .
(x6 , x4 , x2 , x3 , x0) длина пути: 2+1+2+1=6
(x6 , x2 , x3 , x0) длина пути: 3+2+1=6
Пример для самостоятельной работы:
