Anda di halaman 1dari 18

Problemas de Fluxo Máximo em uma rede direcionada

Livros textos:

1. “Network Flows: Theory, Algorithms and Applications” - Ravindra K. Ahuja,


Thomas L. Magnanti, James B. Orlin - Prentice Hall, 1993, ISBN: 0-13-617549-X.

2. “Linear Programming and Network Flows” (second edition) - Mokhtar S.


Bazaraa, John J. Jarvis, Hanif D. Sherali - WILEY - 1990 - ISBN: 0-471-63681-9 (
capítulo 9 em diante).
.
Algoritmo DMKM para o PFM
Algoritmo DMKM para o PFM
Este algoritmo parte do pressuposto de que os fluxos devem ser enviados entre o nó origem i = 1 até o nó destino i = n,
de modo correto, e rápido. Este comentário se faz necessário à partir do seguinte exemplo dado a seguir:

5
2 4 5

5 6
5
1

5
5 5
3
5
uij

No grafo acima, se estamos interessados em encontrar o fluxo máximo f entre os nós i = 1 até i = 6.
Algoritmo DMKM para o PFM
Vamos inicialmente definir : arco saturado e caminho saturado.

Definição 1. No PFM, dizemos que um arco (i,j) está saturado se xij = uij .

Definição 2. No PFM, dizemos que um caminho entre i = s a i = t é um caminho saturado, se ao menos um arco deste
caminho for saturado.

No grafo anterior, se inicialmente alocarmos uma quantidade de fluxos:

x13 = x34 = x46 = 5, todos os caminhos de i = 1 a i = 6 estarão saturados ( ou seja xij = uij ) para algum arco de cada
caminho.

No entanto, visualmente percebemos que f = 5 não representa o fluxo máximo entre i =1 a i = 6. De fato, se
alocarmos os fluxos :

x12 = x24 = x46 = 5 e x13 = x35 = x56 = 5, teremos um fluxo de f = 10 que agora sim, representa o fluxo máximo entre i
=1 e i = 6.
Maior fluxo obtido: f = 5 não representa o fluxo máximo
0
2 4 5

5 6
0
1
0

5 5
3
0
xij

Maior fluxo obtido: f = 10 representa o fluxo máximo


5
2 4 5

0 6
0
1
5

5 5
3
5
xij
Esta necessidade de alocar fluxos por etapas aos arcos da rede, de modo
rápido mas seguro para que ao final o fluxo máximo seja obtido, foi a base
para o desenvolvimento do algoritmo DMKM.

Noção de Rede Particionada


Noção de Rede Particionada ( Layered Network)

Uma rede particionada GL = G(NL, AL) é uma rede acíclica no qual todos os nós de NL são particionadas em
níveis: N1, N2, N3, ...., Nk.

- O primeiro nível N1, consiste apenas da origem i = s,


- O nível seguinte N2, consiste de todos os nós sucessores imediatos de i = s ( isto é, a uma distância 1 da origem
i = s),
- N3, por sua vez, consiste de todos os nós sucessores imediatos dos nós de N2, e assim sucessivamente, até o
- último nível Nk, que consiste somente do nó destino i = t ( caso tenhamos mais candidatos a este último nível,
todos com exceção de i = t, são descartados e portanto não serão incluidos em nenhum nível).

Desta forma, todos os caminhos de i = s a i = t na rede particionada GL possui exatos k-1 arcos e além disso, todo
arco de GL vai de nível i para um nível adjacente i+1, não existindo arcos com extremos num mesmo nível ou
entre níveis não adjacentes.
Exemplo de uma rede particionada:

5
2 4 4

6 6

1
2

3 5
3
3
xij
N1 N2 N3 N4=k
Definição 9.3. Um fluxo fs de uma rede direcionada G é dito fluxo de saturação se todo caminho de i = s
até i = t for um caminho saturado.

Obviamente todo fluxo máximo é um fluxo de saturação mas nem todo fluxo de saturação representa um
fluxo máximo, como no exemplo visto no início desta secção.

Maior fluxo obtido: f = 5 não representa o fluxo máximo


0
2 4 5

5 6
0
1
0

5 5
3
0
xij
Definição 4. Considere v um nó qualquer de uma rede G direcionada. Definimos como o potencial do nó v
( pot(v)) ao fluxo adicional máximo que ainda podemos escoar por v. Esta quantidade pot(v) é o mínimo
entre a quantidade de fluxos que ainda pode chegar em v ( inpot(v)) e a quantidade de fluxos que ainda
pode sair de v (outpot(v)).

pot(v) = Mínimo { inpot(v); outpot(v)}

Definição 5. O nó r do grafo particionado GL que possui o menor potencial é dito nó


de referência. Por exemplo, no grafo abaixo, determine o nó de referência r:
5
2 4 4

6 6

1
2

3 5
3
3
xij

Determinando o potencial de cada nó:

pot(1) = 5; pot(2) = 2; pot(3) = 3; pot(4) = 2; pot(5) = 4; pot(6) = 6

Portanto, o nó de referência pode ser i = 2 ou i = 4.


ETAPAS DO ALGORITMO DMKM PARA PFM
Etapa 1: O objetivo desta etapa, é determinar o fluxo de saturação de
uma rede particionada (layered network) GL , ou seja, queremos a cada
iteração, determinar o pot(r), onde r é um nó de referência de GL e a
partir dai, acrescentar a quantidade de fluxos pot(r) na rede original G,
entre i = s a i = t , via nó de referência r.
 ??? Como distribuir a quantidade de fluxos pot(r) entre i = s e i = t via nó r ???

Imagine que temos pot(r) disponível em r. Distribuimos então esta quantidade de fluxos aos arcos sucessores de r . Isto significa
que esta quantidade pot(r) foi parar no nível seguinte ao nível onde se encontra o nó r. Suponha que o nível seguinte seja Nj. Os
fluxos encontrados nos nós de Nj. são por sua vez distribuidos aos arcos são saturados com origem em Nj. e assim
sucessivamente distribuimos pot(r) até que esta quantidade chegue ao nó destino i = t.

Observe que nunca ocorrerá de num determindo nível, termos mais fluxos que a capacidade dos arcos com origem neste
nível. Isto porque pela sua construção, pot(r) é o mínimo dos potenciais dos nós de GL.

De forma semelhante podemos retroceder a quantidade pot(r) aos níveis precedentes ao nível contendo o nó de referência r, até
que a quantidade pot(r) chegue ao nó inicial i = s. Observe entretanto que estamos exigindo a ausencia de ciclos na rede GL. para
atingir este objetivo.

Feito esta atualização nos fluxos de GL., o passo seguinte consiste em deletar todos os arcos saturados de GL., desde que eles não
irão afetar nos fluxos adicionados posteriormente .

Do mesmo modo, deletamos um nó i que possui todos os arcos chegando nele ( - , i ) ou todos os arcos saindo dele, ( i , - ) e
que estejam saturados.

A eliminação deste tipo de nó implica também em eliminar todos os arcos a ele conectados, implicando numa redução
possível nos valores de impot(r) e outpot(r) à partir deste momento. Atualizamos portanto estes valores completando então a
iteração atual.
Na iteração seguinte, são recalculados os novos potenciais de cada nó remanescente e repetimos o procedimento.

Desde que, a cada iteração, todos os arcos do tipo, ( - , r ) ou todos os arcos ( r, - ) são saturados, então pelo menos um nó
será eliminado a cada iteração. Portanto, existirão no máximo n iterações para o procedimento chegar ao seu final.

Portanto, o trabalho por iteração é limitado por o( n2).

Exemplo da Etapa 1: Queremos determinar o fluxo de saturação de um grafo GL acíclico e


particionado ( Layered Network).

6 9
3
7
12

7 7
4 19
2
20 2 7 18
s 3
12 t

13
16
3 5 1

10 11
1 8
15
nó inpot(i) outpot(i) pot(i)

s 0 43 43
1 16 18 16
2 20 14 14
3 7 14 7*(nó ref)
4 12 34 12
5 27 24 24
6 25 9 9
7 20 18 18
8 13 11 11
t 38 0 38
Iteração 1: (k = 1)
nó de referência: r = 3; pot(3) = 7
distribuir 7 unidades no arco: (3,4)
distribuir 7 unidades no arco: (4,6) e (6,t)
distribuir 7 unidades no arco: (s,3)
Eliminamos o nó i = 3 e os arcos (s,3), (3,4), (3, 5)

Rede Remanescente GL .

6 2

4 19
2
20 2 7 18
s 3
12 t

13
16
3 5 1

10 11
1 8
15
Iteração k = 2

Nó de referência: r = 6, pot(6) = 2

distribuir 2 unidades de fluxo no arco: (6,t)


distrinuir 2 unidades de fluxo nos arcos: (4,6), (2,4), (s,2)
Eliminar os nós: 6 e 4 e 2
Eliminar os arcos: (6,t), (2,4), (4,6), (5,6), (2,4)

Rede Remanescente:

4 19

18 2 7 18
s 3
12 t

16
3 5 1

10 11
1 8
15
Nó de referência: r = 8, pot(8) = 11
Distribuir 8 unidades de fluxo nos arcos: (8, t)
Distribuir 10 unidades de fluxos no arco: (5,8) e 1 unidade em (4,8)
Distribuir 1 unidade em (1,4) e 10 em (1,5)
Distribuir 11 unidades em (s,1)
Eliminar o nó 8, e os arcos: (8,t), (5,8), (4,8).

Rede Remanescente:

4 19

18 2 7 18
s 12 t

5
2 5 1

1
5
Nó de referência: r = 5, pot(5) = 1

Distribuir 1 unidade de fluxo nos arcos: (5, 7) e (7,t)


Distribuir 1 unidade de fluxo nos arcos: (1,5) e (s, 1)

Eliminar os nós: 5 e 7
Eliminar os arcos: ((5,8) e (8,t)m e sucessivamente eliminamos
toda a rede.

Rede Remanescente: vazia (FIM)