Você está na página 1de 14

Problemas de Fluxo Máximo

Objecto de Aprendizagem

2010

DEIG – Manuel Pina Marques


Problemas de Fluxo Máximo

Definição: Dada uma rede, com um nó de entrada e um nó de saída, com capacidades


associadas a cada ramo, pretende-se saber qual é o fluxo máximo, de um
certo bem, que se pode enviar da entrada para a saída.

Modelo:
xij – fluxo que passa no ramo (i, j), de i para j
cij – capacidade do ramo (i, j)
Nó 1 – nó de entrada
Nó t – nó de saída
max  x1 j   xit
j i
Sujeito a:
xi
ik   xkj , k
j
(equilíbrio de fluxos nos nós)

xij  cij , i , j (restrições de capacidade)

xij  0 , i , j

DEIG – Manuel Pina Marques


Exemplo de um problema de Fluxo Máximo

Nó de entrada = nó 1

Nó de saída = nó 4

Capacidades totais dos ramos:

Ramo 1  2 = 9
Ramo 1  3 = 8
2
Ramo 2  3 = 3
Ramo 2  4 = 7 (9) (7)
Ramo 3  4 = 9
1 (3) 4

(8) (9)
3

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo

1. Injectar um fluxo nulo (f = 0) no nó de entrada;

2. Fixar as capacidades utilizadas dos ramos em 0 (zero);

3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó


de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução
óptima;.
4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado;

5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado,


Capacidade totalsomando-lhes
do ramo o
fluxo injectado;Capacidade utilizada do ramo
Caminho 1: capacidade = 7
6. Voltar ao ponto 3. 2
Caminho 2: capacidade = 3
Vamos, por exemplo, seleccionar o (0,(9)
9) (0,(7)
7)
Caminho: conjunto
caminho não de ramos
saturado 1 3  4, com
unindo
capacidade disponível = nó
o nó de entrada ao min de(8; 9) = 8
saída, e que não passa duas
vezes pelo mesmo nó. f ==08
f = 0+8 1 (3) 3)
(0, 4 f f==0+8
0 =8

Capacidade de um caminho: menor


capacidade disponível de entre todos os
(0,(8)
(8, 8) (0,(9)
(8, 9)
ramos que fazem parte do caminho.
3 Caminho 3: capacidade = 8
Caminho saturado: caminho com capacidade disponível nula

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo (cont.)
3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó
de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução
óptima;.
4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado;

5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o


fluxo injectado;

6. Voltar ao ponto 3.

Vamos seleccionar o caminho não


saturado 1 2  3  4, com capacidade
2
disponível = min (9; 7) = 7
(7, 9)
(0, (0, 7)
(7,

f = 8+7f==15
8 1 (0, 3) 4 f = 8+7=
8 15

(8, 8) (8, 9)
3

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo (cont.)
3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó
de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução
óptima;.
4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado;

5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o


fluxo injectado;

6. Voltar ao ponto 3.

Vamos, seleccionar o caminho não saturado


2  3  4
1Não existe nenhum caminho não saturado.
Logo, foi disponíveis
Capacidades encontrada dosaramos
solução óptima
deste caminho:
2
ramo 1  2: capacidade = 9 – 7 = 2
(8,
(7, 9) (7, 7)
ramo 2  3: capacidade = 3 – 0 = 3
ramo 3  4: capacidade = 9 – 8 = 1
f == 15
f = 15+1 16
16 1 (0, 3)
(1, 4 ff ==15+1=16
= 16
15
Capacidade disponível do caminho
1 2 3  4 = min (2; 3; 1) =1
(8, 8) (8, 9)
(9,
3

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo (cont.) Vamos agora saturar os
caminhos por uma ordem
1. Injectar um fluxo nulo (f = 0) no nó de entrada; diferente. O que acontecerá?
2. Fixar as capacidades utilizadas dos ramos em 0 (zero);

3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó


de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução
óptima;.
4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado;

5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o


fluxo injectado;
6. Voltar ao ponto 3. 2
(3,(9)
(0, 9) (0,(7)
7)

f ==03
f = 0+3 1 (3,
(3) 3)
(0, 4 f f==0+3
0 =3

Vamos seleccionar o caminho não


saturado 1 2  3  4, com (0,(8)
8) (0,(9)
(3, 9)
capacidade disponível = min (9; 3; 9) = 3
3

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo (cont.)

3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó


de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução
óptima;.
4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado;

5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o


fluxo injectado;
6. Voltar ao ponto 3.

Vamos seleccionar, por exemplo, o


caminho não saturado 1 2  4
2
Capacidades disponíveis dos ramos deste caminho: (3,(9)
(9,
(0, 9) (0,(7)
(6, 7)
ramo 1  2: capacidade = 9 – 3 = 6
ramo 2  4: capacidade = 7 – 0 = 7 f ==39
f = 3+6 1 (3,
(3) 3)
(0, 4 f f==3+6=
3 9
Capacidade disponível do caminho 1 2 4 = min (6; 7) = 6

(0,(8)
8) (0,(9)
(3, 9)
3

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo (cont.)

3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó


de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução
óptima;.

Aparentemente não há nenhum caminho não saturado, mas o fluxo


máximo agora obtido (f = 15) é menor do que no caso anterior (f = 16).

Como é que isto é possível , já que o


algoritmo é de optimização?
2
(3,(9)
(9,
(0, 9) (0,(7)
(6, 7)

f = 15 1 (3,
(3) 3)
(0, 4 ff=15
=9

(6,(8)
(0, 8) (0,(9)
(9,
(3, 9)
3

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo (cont.)
De facto, o exemplo anterior não está completamente resolvido (até à optimalidade) porque existe ainda um caminho não saturado.
Para se encontrar esse caminho não saturado é necessário considerar o conceito de “fluxo negativo", isto é, fluxo que atravessa os
ramos no sentido contrário à sua orientação.
Uma das restrições apresentadas no modelo do problema de fluxo máximo impunha que todos os fluxos fossem positivos ou nulos
(xij  0). E de facto, na solução final, tal terá sempre que acontecer. No entanto, essa solução final obtém-se pela adição dos vários
fluxos que vamos injectando na rede.
Alguns desses fluxos poderão atravessar algum ramo no sentido contrário ao indicado, devendo nesse caso ser contabilizados como
negativos. O resultado final (soma de todos os fluxos que foram injectados nesse ramo) é que terá que ser positivo ou nulo.
No fundo, um “fluxo negativo" mais não é do que deixar de fazer passar fluxo por esse ramo.

Observando a rede deste ponto de vista, verifica-se que


o caminho 1  3  2  4 não está saturado, pois:

 o ramo 1  3 tem uma capacidade de 2 = (8 – 6). 2


(3,(9)
(9,
(0, 9) (6, 7)
 o ramo 2  3 está saturado no sentido do nó 2 para o nó 3;
mas no sentido do nó 3 para o nó 2 tem uma capacidade de
3 (igual à capacidade que está a ser utilizada no sentido do
nó 2 para o nó 3) f = 15 1 (3, 3) 4 ff=15
=9
isto é, podemos deixar de fazer passar, do nó 2 para o nó
3, até 3 unidades (que é fluxo actual).

(6, 8) (0,(9)
(9,
(3, 9)
 o ramo 2  4 tem uma capacidade de 1 = (7 – 6).
3
Logo, a capacidade do caminho 1  3  2  4 é de 1 = min (2; 3, 1)

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo (cont.)

3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó


de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução
óptima;.
4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado;

5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o


fluxo injectado;
6. Voltar ao ponto 3.

Seleccionamos então o caminho não saturado 1  3  2  4


(com capacidade = 1)
2
(3,(9)
(9,
(0, 9) (7,
(6, 7)

f ==16
f = 15+1 15 1 (3, 3)
(2, 4 ff=15+1=16
=15

Vejamos com maior (6, 8)


(7, (0,(9)
(9,
(3, 9)
detalhe o que realmente se 3
passa nesta iteração

DEIG – Manuel Pina Marques


Algoritmo de fluxo máximo (cont.)
Como se viu antes, a capacidade do caminho 1  3  2  4 é de 1 unidade.
Vai-se então enviar uma unidade por esse caminho:

1º Enviar 1 unidade do nó 1 para o nó 3.


Essa unidade enviada do nó 1 para o nó 3, não pode depois ser enviada pelo
ramo 3  4, pois este ramo está saturado neste sentido.

Então que fazer?


A única forma de ultrapassar este problema é fazer com que uma das unidades que é presentemente enviada
por 2  3  4, passe a ser enviada por 2  4, de forma a libertar uma unidade da capacidade do ramo 3  4.
Corrigindo as capacidades utilizadas dos ramos obtém-se:

Utiliza-se depois essa unidade, assim libertada 2


(da capacidade do ramo 3  4), para fazer fluir
(3,(9)
(9,
(0, 9) (6,
(7, 7)
do nó 3 para o nó 4 a unidade que enviamos
antes do nó 1 para o nó 3.

f = 15
f = 15+1=16 1 (3, 3)
(2, 4 ff=15
=9
O procedimento descrito é equivalente a:

2º Enviar 1 unidade do nó 3 para o nó 2. (6, 8)


(7, (9,
(8, 9)
3
3º Enviar 1 unidade do nó 2 para o nó 4.

DEIG – Manuel Pina Marques


Teorema do Fluxo Máximo – Corte Mínimo:

Como saber se a rede está na situação de fluxo máximo?


(ou seja, se a solução em presença é óptima)
através do Teorema do Fluxo Máximo – Corte Mínimo:
Uma rede está na situação de fluxo máximo se existir um corte mínimo, isto é, que separa a
entrada da saída da rede, e que só atravessa:
- ramos orientados da entrada para a saída saturados, e
- ramos orientados da saída para a entrada com fluxo nulo Ver conceitos
O fluxo máximo é, nestas condições, igual à capacidade do corte mínimo

Capacidade do corte mínimo = 7 + 9 = 16 2


(3,(9)
(9,
(0, 9) (6,
(7, 7)
Como a capacidade do
corte mínimo (16) é igual
ao fluxo actual (f =16) f = 16 1 (3, 3)
(2, 4 f = 16
a solução é óptima

(6, 8)
(7, (9,
(8, 9)
3
corte mínimo

DEIG – Manuel Pina Marques


Teorema do Fluxo Máximo – Corte Mínimo

Se analisarmos a solução anterior à óptima (com f = 15), podemos


verificar que é impossível definir um corte mínimo

Note-se que o corte abaixo representado, não é um corte mínimo, pois o fluxo
do nó 2 para o nó 3 não é nulo.

Ver explicação detalhada

2
(3,(9)
(9,
(0, 9) (0,(7)
(6, 7)

f = 15 1 (3,
(3) 3)
(0, 4 f = 15

(6,(8)
(0, 8) (0,(9)
(9,
(3, 9)
3

DEIG – Manuel Pina Marques