- •Тема 2-1. Задача о коммивояжере.
- •Тема 2-2. Методы оптимизации на графах.
- •Порядковая функция графа
- •Числовые функции графа
- •Оптимизация пути в графах без контуров.
- •Постановка задачи оптимизации пути в графах без контуров.
- •Оптимизация пути в графах с контурами.
- •Алгоритм Форда.
- •Эвристические методы оптимизации. Алгоритм Флетчера-Кларка.
Эвристические методы оптимизации. Алгоритм Флетчера-Кларка.
На практике иногда нужно найти оптимальное решение задачи, для которой метод оптимизации неизвестен.
В этом случае могут быть использованы эвристические методы. Такие методы могут не дать оптимального решения, но позволяют получить достаточно хороший практический результат.
В качестве примера будем рассматривать эвристический метод для задачи о перевозках, которая называется задачей Флетчера-Кларка.
Общая постановка задачи:
Предприятие Р0 снабжает n складов: Р1, Р2, Р3, ....Рn. Количество машин, используемых для перевозки, не ограничено. Все машины имеют одинаковую грузоподъёмность, для каждой машины она равна С .
Стоимость перевозки между Pi и Pj равна dijdji.
Каждая отправляемая с предприятия Р0 машина должна вернуться обратно.
Вместимость склада Pi равна Сi.
При какой минимальной общей стоимости перевозок можно заполнить все склады при условии, что маршруты перевозок представляют собой контуры, попарно пересекающиеся только в точке Р0?
Примечание: можно рассматривать различные обобщения этой задачи, вводя дополнительные ограничения на грузоподъёмность, проходимость дорог, количество заездов на один склад.
Работу метода рассмотрим на примере: задача о перевозках задана таблицами вместимости складов Сi и стоимости перевозок dij. Для удобства на рисунке они совмещены.
Ci |
|
P0 |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
|
P0 |
0 |
4 |
6 |
8 |
2 |
4 |
5 |
4 |
P1 |
4 |
0 |
3 |
3 |
2 |
1 |
5 |
6 |
P2 |
6 |
3 |
0 |
5 |
6 |
7 |
1 |
3 |
P3 |
8 |
3 |
5 |
0 |
8 |
2 |
1 |
1 |
P4 |
2 |
2 |
6 |
8 |
0 |
3 |
2 |
8 |
P5 |
4 |
1 |
7 |
2 |
3 |
0 |
4 |
2 |
P6 |
5 |
5 |
1 |
1 |
2 |
4 |
0 |
C=10 - вместимость одной машины.
В каждой клетке на пересечении Pi и Pj указана стоимость перевозки dij .
На рисунке приведено одно из возможных решений:
С6=2
С2=6
С5=8 С1=4
С4=1 С3=3
Такие перевозки возможны, так как вместимость складов в контурах не превышает 10.
Значение стоимости перевозок по каждому из контуров рисунка:
(Р0,Р2,Р1,Р0)= d02 + d21 + d10 =6+3+4=13;
(Р0,Р3,Р4,Р0)= d03 + d34 + d40 =8+8+2=18;
(Р0,Р5,Р6,Р0)= d05 + d56 + d60 =4+4+5=13;
Общая стоимость перевозок: 13+18+13=44.
Рассмотрим теперь метод Флетчера-Кларка.
Алгоритм:
1. Для каждой пары вершин (Pi,Pj) , таких, что ij, i0, j0 определить параметр ij= di0 + d0j - dij и занести его в таблицу.
2. В качестве начального решения выбрать тривиальное решение S вида S={(P0,P1,P0,), (P0,P2,P0,),........, (P0,Pп,P0,)}.
3. Для каждого маршрута в найденном решении S вычислить значение параметров i , i0 по формуле:
i= 0, если (Pi,P0) S
1, если (Pi,P0) S
4. Все вершины Pm1 , Pm2 ,......., Pmk каждого маршрута из S (исключая P0) объединяются в класс {Pm1 , Pm2 ,......., Pmk} и вычисляется объёмность перевозки
Q{Pm1 , Pm2 ,......., Pmk}=Cm1 + Cm2 +.......+ Cmk ,
где Cmi вместимость склада Pmi .
5. Выбрать в таблице значений ij величину ij = maximum > 0 (если таких величин несколько, то выбрать любую). Если для выбранной величины ij склады Pi и Pj принадлежат разным классам, то объединить эти классы в один при выполнении условий:
а). i=j=1
б). Q{Pi , Pl , Pk.,......... } + Q{Pj , Pm ,. Pv. ,.....} C,
выделив ij в таблице меткой
Если одно из условий а) или б) не выполняется, то зачеркнуть клетку ij в таблице
6. Найти новое значение i , i0.
7. Повторять пункты 4 и 5 до тех пор, пока есть возможность выбора величины ij > 0
Пример работы алгоритма.
Составляем таблицу значений ij . Таблица будет заполнена ниже главной диагонали, т.к. матрица стоимости перевозок симметрична.
Первая сверху строка и первый слева столбец и клетки главной диагонали не заполняются, т.к. параметр ij вычисляется при ij0.
ij= di0 + d0j - dij
21= d20 + d01 - d21=6+4-3=7
|
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
P1 |
- |
- |
- |
- |
- |
- |
P2 |
7 |
- |
- |
- |
- |
- |
P3 |
9 |
9 |
- |
- |
- |
- |
P4 |
4 |
2 |
2 |
- |
- |
- |
P5 |
7 |
3 |
10 |
3 |
- |
- |
P6 |
4 |
10 |
12 |
5 |
5 |
- |
Выбираем начальное тривиальное решение S .
Составляем таблицу для i и объёмности перевозок по контурам решения S .
-
i
Q{ Pi}
P0,P1,P0
1=1
Q{P1}=C1=4
P0,P2,P0
2=1
Q{P2}=C2=6
P0,P3,P0
3=1
Q{P3}=C3=3
P0,P4,P0
4=1
Q{P4}=C4=1
P0,P5,P0
5=1
Q{P5}=C5=8
P0,P6,P0
6=1
Q{P6}=C6=2
1). 63=12=maximum
6=3=1 и Q{P6}+ Q{P3}=C6+C3=2+3=5<C =10
Образуем класс {P6,P3} и выделяем 63 кружком в таблице. Значения i не изменяются.
2). 62=10 > 0
Пробуем объединить классы {P6,P3} и {P2}:
6=2=1 и Q{P6}+ Q{P3}+ Q{P2}=C6+C3+C2=2+3+6=11 > C =10
Вычёркиваем 62 в таблице. Значения i не изменяются.
3). 53=10 > 0
Пробуем объединить классы {P6,P3} и {P5}:
5=3=1 и Q{P5}+ Q{P6}+ Q{P3}=C5+C6+C3=8+2+3=13 > C =10
Вычёркиваем 53 в таблице. Значения i не изменяются.
4). 31=9 > 0
Пробуем объединить классы {P6,P3} и {P1}:
1=3=1 и Q{P3}+ Q{P6}+ Q{P1}=C3+C6+C1=3+2+4=9 < C =10
Образуем класс{P6,P3,P1}. Отмечаем клетку 31 в таблице.
Находим новые значения i : 6=1=1; 3=0
5). 32=9 > 0
3=0 , 2=1 Условие а) не выполняется. Поэтому вычеркиваем клетку 32 .
6). 51=7 > 0
5=1=1 и Q{P5}+ Q{P1}+ Q{P6}+ Q{P3}=C5+C1+C6+C3=8+4+2+3=17 > C =10
Вычёркиваем 51 в таблице. Значения i не изменяются.
7). 21=7 > 0
2=1=1 и Q{P2}+ Q{P1}+ Q{P6}+ Q{P3}=C2+C1+C6+C3=6+4+2+3=15 > C =10
Вычёркиваем 21 в таблице. Значения i не изменяются.
8). 64=5 > 0
6=4=1 и Q{P6}+ Q{P3}+ Q{P1}+ Q{P4}=C6+C3+C1+C4=2+3+4+1=10 = C =10
Образуем класс{P4,P6,P3,P1}. Отмечаем клетку 64 в таблице.
Находим новые значения i : 1=4=1; 3=6=0
9). 65=5 > 0
6=0 , 5=1 Условие а) не выполняется. Поэтому вычеркиваем клетку 65 .
10). 61=4 > 0
Но {P6} и {P1} уже в одном классе! Поэтому вычеркиваем клетку 61 .
11). 41=4 > 0
Но {P4} и {P1} тоже уже в одном классе! Поэтому вычеркиваем клетку 41 .
12). 52=3 > 0
Пробуем объединить классы {P5} и {P2}:
5=2=1 и Q{P5}+ Q{P2}=C5+C2=8+6=14 > C =10. Условие не выполнено.
Вычеркиваем клетку 52 в таблице.
13). 54=3 > 0
Пробуем объединить классы {P4, P6, P3, P1,} и {P5}:
5=4=1. Очевидно, что Q{P} будет > C =10. Условие не выполнено.
Вычеркиваем клетку 54 в таблице.
14). 42=2 > 0
Пробуем объединить классы {P4, P6, P3, P1,} и {P2}:
2=4=1. Очевидно, что Q{P} будет > C =10. Условие не выполнено.
Вычеркиваем клетку 42 в таблице.
15). 43=2 > 0
Но {P4} и {P3} уже в одном классе! Поэтому вычеркиваем клетку 41 .
Все элементы 43 мы рассмотрели. У нас получились такие маршруты, являющиеся решением задачи:
(Р0,Р4,Р6,Р3,Р1,Р0)= d04 + d46 + d63 +d31 + d10=2+2+1+3+4=12;
(Р0,Р2,Р0)= d02 + d20 =6+6=12;
(Р0,Р5,Р0)= d05 + d50 =4+4=8;
Общая стоимость перевозок: 12+12+8=32.
Полученная ранее стоимость перевозок без учёта метода Флетчера-Кларка была равна 44, что больше 32.
