Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Метод дробления шага 5 страница



и после преобразования имеем c46=3, c56=0.

Итерация 6. В вершину 6 ведет дуга нулевой длины из вершины 5, поэтому помечаем ее числом m6= 5. Поскольку мы отметили конечную вершину маршрута, то алгоритм завершен и мы можем, используя значения отметок для родителей, выписать искомый кратчайший путь (1,3,5,6).

1 3(4)

 
10

2 2

0 5

Lmin=9 ед.

(2)1 6 2

Следует также добавить, что если бы наш выбор на итерациях 3 и 5 был иным, то мы получили бы альтернативные, пути той же длины (1,2,3,5,6), т.е. рассмотренная задача имеет несколько решений.

34. Алгоритм Форда-Фалкерсона.

Введём некоторые обозначения:

Пропускная способность дуги – некоторое положительное bij число, поставленное в соответствие дуге (vi, vj).

Поток из источника S в сток t – множество неотрицательных чисел, поставленных в соответствие некоторой дуге сети, если числа удовлетворяют следующим линейным ограничениям:

-v, если vj =s;

∑xij - ∑xjk = 0, если vj ≠ s, vj ≠ t;

i k

v, если vj = t;

v ≥ 0; 0≤xij≤bij для всех i, j

Здесь:

а) xij – поток между вершинами vi и vj

b) xkj - поток между вершинами vi и vk

c) первую сумму берут по дугам, ведущим в вершину vj,

d)вторую сумму берут по дугам, ведущим из вершину vj

Неотрицательное число v называют величиной потока. Число xij называют потоком по дуге (vi, vj) или дуговым потоком. Ограничения выражают тот факт, что в каждую вершину (кроме источника и стока) приходит столько потока, сколько из него уходит (условие сохранения потока), и что поток xij по дуге ограничен пропускной способностью дуги bij.

Обозначим через Fst множество неотрицательных чисел xij, удовлетворяющих поставленным ограничениям. Будем называть путь из S в t увеличивающим поток Fst, если xij<bij на всех прямых дугах и xji>0 на всех обратных дугах этого пути. Поток Fst максимален тогда и только тогда, когда не существует пути, увеличивающего поток Fst. Величина максимального потока в любой сети принимает, безусловно, единственное значение. Ну может существовать несколько различных максимальных потоков Fst, имеющих одинаковую величину.

Пусть задана ориентированная сеть с одним источником S и одним стоком t и пусть дуги (vi, vj) имеют ограниченную пропускную способность. Задача о максимальном потоке заключается в поиске таких потоков по дугам, что результирующий поток, протекающий из источника S в сток t, является максимальным. Задача о максимальном потоке может быть сформулирована как задача линейного программирования, и поэтому может быть решена симплекс – методом. Однако для её решения можно применить более эффективный метод – метод расстановки пометок (метод разработан Фордом и Фалкерсоном).

Алгоритм начинает работу с некоторого допустимого решения, вершины рассматривает как промежуточные пункты передачи потока, а дуги – пометки и увеличивающие (аугментальные) пути потока. Пометку вершину используют для указания как величины потока, так и источника потока, вызывающего изменениетекущего потока по дуге, соединяющий этот источник с рассматриваемой вершиной. Если qi единиц потока посылают из вершины vi в вершину vj и это вызывает увеличение потока по этой дуге, то будем говорить, что вершина vj помечена из вершиныvi символом (+ qi); в данном случае вершине vj приписывают пометку [+qi; vi]. Если посылка qi единиц потока вызывает уменьшение потока по дуге, то будем говорить, что вершина vj помечена из вершины vi символом(-qj). В таком случае вершине приписывают пометку [-qi;vi].

Текущий поток из вершины vi в вершину vj увеличивается, когда qj единиц дополнительного потока посылается в вершину vj по ориентированной дуге (vi, vj) в направлении, совпадающем с её ориентацией. В таком случае дугу называют прямой. Если qi единиц дополнительного потока посылаются в вершину vj по ориентированной дуге (vj; vi), т.е. в направлении, противоположном её ориентации, то текущий поток из vj в vi уменьшается, а дугу (vj; vi) называют обратной. Вершина vj может быть помечена из вершины vi только после того, как вершине vi приписана пометка. Если вершина vj помечена из вершины vi и дуга (vi, vj) прямая, тот поток по данной дуге увеличивается, и величина, соответствующая оставшейся неиспользованной пропускной способности дуги, должна быть нужным образом скорректирована. Если некоторой вершине приписывают пометку и при этом используют прямую ветвь, то она может иметь только остаточную пропускную способность.

Увеличивающий (аугментальный) путь потока из S в t определяют как связанную последовательность прямых и обратных дуг, по которым из S в t можно послать несколько единиц потока. Поток по каждой прямой дуге увеличивается, при этом не превышает её пропускной способности, а поток по каждой обратной дуге уменьшается, оставаясь при этом неотрицательным. Аугментальный путь потока используют для выбора такого способа изменения потока, при котором поток в узле t увеличивается, и для каждого внутреннего узла сети при этом не будет нарушено условие сохранения потока.

Как конкретно можно увеличить поток на qj единиц? Предположим, что дуге (vi, vj) уже приписан поток xij ≥ 0; причем xij ≤ bij - пропускная способность дуги (vi, vj). Величина qi не может превосходить остаточной пропускной способности bij – xij. Но из вершины vi не всегда можно получить bij – xij единиц потока. Отметим, что в вершину vj можно послать столько единиц потока, сколько их добавляется в вершину vi, т. е. самое большое qi. Следовательно, поток по прямой дуге (vi, vj) можно увеличить на qi = min[qi, xij-bij]. Аналогично получается для вершины, если дуга (vj, vi) является обратной. Уменьшение потока по дуге (vj, vi) возможно только в том случае, когда xji ≥ 0. поток может быть уменьшен самое большее на число единиц потока, которые можно взять из вершины vi т. е. на qi. Следовательно, поток по обратной дуге (vj, vi) может быть уменьшен на qj=min[qi; xji].

В начале работы алгоритма источнику приписывают пометку [∞;-], указывающую на то, что из данной вершины может вытекать поток бесконечно большой величины. Далее мы ищем аугментальный путь потока от источника к стоку, проходящему через помеченные вершины. Все вершины (за исключением источника) в начальный момент не помечены. Пытаясь достичь стока, мы проходим, выбирая дуги с наибольшими пропускными способностями, по прямым и обратным дугам и последовательно помечаем принадлежащие им вершины. Возможны два случая:

1. стоку приписывают пометку [+q;k], k-номер вершины, связанный со стоком. В этом случае аугментальный путь потока найден и поток по каждой дуге этого пути может быть увеличен или уменьшен на qt. После изменения дуговых потоков текущие пометки стирают и всю описанную процедуру повторяют заново.

2. сток t не может быть помечен. Этот означает, что аугментальный путь потока не может быть найден. Следовательно, построенные дуговые потоки образуют оптимальное решение (максимальный поток).

Задача.

Найти максимальное количество информации, которое может быть передано из источника S в сток t по сети, представленной на рисунке 1. Пропускные способности дуг bij отмечены.

4 рис.1 Исходные данные для задачи о максимальном

потоке (о максимальном 2 количества информации).

2 3

1 2





Дата публикования: 2015-03-26; Прочитано: 314 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...