Алгоритм Форда нахождения максимального потока на сети.




Исходные данные заносятся в таблицу размерности (n+1) × (n+1). Если дуга , то в соответствующей клетке таблицы записывается значение dij.

Если обратная дуга , то в соответствующей клетке записывается значение dji, если дуга , то в клетке (j,i) записывается Ø.

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

*

j i Ll00000 0 n
    d0j d0n
           
i di0 dij din
           
n dn0 dnj  

 

 

Каждый шаг алгоритма Форда состоит из трёх действий.

1.Находится путь по таблице из узла- истока Ø в узел-сток n с пропускной способностью больше 0. Для этого столбец, соответствующий узлу-истоку, отмечается знаком *. Далее отыскиваются в строке с номером 0 элементы dij > 0 и столбцы, в которых они находятся, отмечаются сверху номером просматриваемой строки (цифрой 0). В результате окажутся выделенными все дуги (0, j) c положительными пропускными способностями. Эти дуги могут служить первыми дугами пути из истока в сток.

Далее просматриваются те строки, номера которых совпадают с номерами отмеченных столбцов. В каждой такой строке i отыскиваются элементы dij > 0, находящиеся в непомеченных столбцах, и эти столбцы отмечаются номером просматриваемой строки. Таким образом, окажутся выделенными дуги, которые могут служить вторыми дугами путей из истока в сток.

Аналогичный просмотр строк продолжается до тех пор, пока: а) либо не будет помечен столбец с номером n (сток) что означает выделение пути с пропускной способностью больше нуля из истока в сток; б) либо нельзя помечать новые столбцы (в просматриваемых строках не окажется положительных элементов), при этом столбец с номером n также останется не отмеченным.

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

В случае ” а ” искомый путь µ из источника в сток находится используя пометки столбцов. Пусть последний столбец n помечен номером k, тогда дуга (k,n) последнее звено искомого пути. Далее просматривается столбец с номером k, пусть отметка этого столбца l. Тогда дуга (l,k) предпоследнее звено искомого пути и т.д.Этот процесс продолжается до тех пор, пока не найдётся отметка *, т.е. отметка истока Ø. Пусть эта отметка будет цифра m. Таким образом путь от истока к стоку будет состоять из дуг µ =((Ø, m),…, (l,k), (k,n)). (5)

2.Клетки, соответствующие дугам этого пути, отмечаются знаком (–), а симметричные им клетки, т.е. соответствующие обратным дугам – знаком (+). По найденному пути (5) можно пропустить максимально возможный поток, величина которого равна Θ = min { dij- }.Эта величина Θ отнимается от всех пропускных способностей клеток, отмеченных знаком (–) и прибавляется к пропускным способностям клеток, отмеченных знаком (+). В результате получается новая таблица, в которой записаны неиспользованные пропускные способности дуг после пропускания максимального потока по пути (5).

По новой таблице опять отыскивается, уже другой, путь от истока к стоку, состоящий из дуг с неиспользованными пропускными способностями. Если такой путь существует, то по этому пути пропускается максимально возможный поток из истока в сток. После этого корректируется таблица аналогично как на этапе 1.

Это процесс продолжается до тех пор, пока не будет иметь место случай б).

3.Пусть имеется случай б), т.е. когда не существует пути из истока в сток, состоящий из дуг с неиспользованными пропускными способностями. Это означает, что найдены все возможные пути перевозки продукции и задача решена. Для определения максимального потока на сети V* в последней таблице выделяются отмеченные столбцы, номера которых образуют множество R*, причём исток *. В результате получается минимальный разрез (R *, *) и по теореме Форда- Фалкерсона

 

Для нахождения значений потоков по дугам xij*, образующих поток V* из элементов первой таблицы вычитаются соответствующие элементы последней таблицы. Если в клетке получается неотрицательная величина, то она оставляется; если – отрицательная, то в клетке записывается . Значения заполненных клеток будут соответствовать потокам по дугам xij*. Причём

 

Пример. На данной сети определить максимальный поток из узла в узел 4.

 

 

1. * 0 0 1 2

i j          
  0+   19- 0+     9-

 

Θ1 = min (19,9)=9.

 

2. * 0 0 1 3

i j          
  0+ 17-   0+ 10 9 12- 0+   24-

 

Θ2 = min (17,12,24)=12.

3. * 0 0 2 3

i j          
  12 9+ 5   10- 6+ 9 8- 12   12-

 

 

Θ3 = min (10,8,12)=8.

 

4. * 0 0 1 2

i j          
  12 17 5   12 2 14 9 12   4

 

Пути из 0 в 4 нет! Определяются множества: R*={0,1,2}, ={3,4}.

 

(R *, *)=((1,3),(2,3),(2,4))

d (R *, *)= V* =12+8+9=29

 

5. В заключительной таблице положительные элементы определяют потоки по дугам xij*.

 

i j          
  -12 -17 12   17 -8 -9 12 -12   9 20

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: