Algoritmos em Grafos
Problemas de fluxo em grafos
1º semestre/2012Prof. André Renato
Problemas de Fluxo em GrafosO estudo de problemas de fluxo
em grafos é de fundamental importância, pois uma série de aplicações computacionais podem ser modeladas através de fluxos;
A sub-área de fluxos demanda um conhecimento prévio de alguns conceitos e definições para que os problemas possam ser melhor compreendidos;
Problemas de Fluxo em GrafosUma rede é um digrafo D(V, E),
em que cada aresta e E, está associada a um número real c(e), não-negativo, chamado capacidade da aresta e;
D possui dois vértices especiais e distintos s,t V chamados de origem e destino (fonte e sumidouro);
Problemas de Fluxo em GrafosUm fluxo f, de s a t em D, é uma
função que associa a cada aresta e um valor real não-negativo f(e) atendendo às seguintes condições:◦0 ≤ f(e) ≤ c(e) para cada aresta e E;
◦ para todo v ≠ s,t
VwVu
wvfvuf ),(),(
Problemas de Fluxo em GrafosO somatório dos fluxos das
arestas convergentes a v é igual ao somatório dos fluxos das arestas divergentes de v;
Este somatório é denominado valor do fluxo em v;
O valor do fluxo na origem é denominado valor do fluxo na rede D e é denotado por f(D);
Problemas de Fluxo em Grafos
Problemas de Fluxo em Grafos
Problemas de Fluxo em GrafosAnalogia:
◦Escoamento de água em uma rede de tubos;
◦A água é emanada de um ponto (origem) e deve passar pela tubulação até ser recolhida em outro ponto (destino);
◦As junções dos tubos (demais vértices) não produzem nem consomem água;
◦O volume de água em cada cano deve ser tal que a capacidade do cano não seja violada;
Problemas de Fluxo em GrafosNaturalmente, o valor do fluxo
em uma rede pode variar de um valor igual a zero até um certo valor máximo;
O problema do fluxo máximo em redes consiste em descobrir qual é este valor e como o fluxo pode se comportar pela rede;
Problemas de Fluxo em GrafosSeja f um fluxo em uma rede
D(V, E). Uma aresta e E é dita saturada quando f(e) = c(e).
Um vértice v V é dito saturado se todas as arestas convergentes a v ou divergentes de v forem saturadas.
Problemas de Fluxo em Grafos
s
a
b
c
d
e
t
3(3)
4(3)
3(2)
3(1)
5(3)5(2)
2(2)5(4)
2(2)
Problemas de Fluxo em GrafosA noção de corte em uma rede
de fluxos é de grande importância para o problema de fluxo máximo e demais problemas de fluxo em grafos;
Seja S V, um subconjunto de vértices de V tal que s S e t S. Um corte (S,S), onde S = V – S, em D é o subconjunto das arestas de D que possuem uma extremidade em S e outra em S.
Problemas de Fluxo em Grafos
s
a
b
c
d
e
t
s
a
b
c
d
e
t s
a
b
c
d
e
t
Problemas de Fluxo em GrafosÉ importante entender que nem
sempre os grafos são bem organizados como os exemplos vistos;
Desta forma, podemos ter grafos com ciclos e arcos de mesmas extremidades, mas sentidos diferentes;
Problemas de Fluxo em Grafos
s
a
b
c
d
e
t
b b
b
b
b
b
Problemas de Fluxo em GrafosÉ preciso diferenciar as arestas
que partem do subconjunto S daquelas que partem do subconjunto S;
(S,S)+ = {(u,v) | u S e v S};(S,S)- = {(u,v) | u S e v S};
Problemas de Fluxo em GrafosA capacidade c(S,S) de um corte
(S,S) é o somatório das capacidades das arestas (S,S)+;
Um corte mínimo é aquele que possui capacidade mínima;
Problemas de Fluxo em GrafosSeja f um fluxo e (S,S) um corte
em D. Então f(S,S) é o fluxo do corte (S,S), definido como:
),(),(
)()(),(ssesse
efefSSf
Problemas de Fluxo em GrafosSeja f um fluxo em uma rede D.
O objetivo do problema de fluxo máximo é aumentar f, se possível.
Cada aresta e pode receber um fluxo adicional ≤ c(e) – f(e);
Talvez este fluxo adicional aumente o valor do fluxo em D;
Problemas de Fluxo em GrafosUma aresta e tal que c(e) – f(e) >
0 chama-se aresta direta;Uma aresta e só pode receber
decremento positivo de fluxo se e somente f(e) > 0; estas são chamadas de arestas contrárias;
Uma aresta pode ser somente direta, somente contrária ou direta e contrária;
Problemas de Fluxo em Grafos
s
a
b
c
d
e
t
3(3)
4(3)
3(2)
3(0)
5(3)5(2)
2(2)5(4)
2(0)
Problemas de Fluxo em GrafosDados um fluxo f e uma rede
D(V,E), a rede residual D´(f) é aquela cujo conjunto de vértices coincide com os de V e cujas arestas são obtidas assim:◦Se uma aresta (u,v) é direta em D,
então (u,v) é também aresta direta de D´ e sua capacidade é c(u,v) – f(u,v);
◦Se uma aresta (u,v) é contrária em D, então (v,u) é também aresta contrária de D´ e sua capacidade c(v,u) = f(u,v);
Problemas de Fluxo em Grafos
Problemas de Fluxo em Grafos
s
a
c
b
t
d
4(2)
2(2)
3(0)3(1)
3(1)
4(3)
2(1) 1(1)3(2)
5(2)
Problemas de Fluxo em GrafosEm outras palavras, as
capacidades das arestas na rede residual representam as possíveis variações de fluxo que as arestas de D podem sofrer, com a direção indicando a variação positiva ou negativa;
Um caminho de s a t na rede residual D´(f) é chamado de aumentante para o fluxo f.
Problemas de Fluxo em Grafos
Problemas de Fluxo em GrafosSe todo caminho entre s e t em
uma rede D passar por uma aresta e, o fluxo máximo desta rede não pode ser maior do que c(e) – gargalo;
De forma mais geral, o valor de um fluxo f em D não pode ultrapassar o valor de qualquer corte (S,S);
Problemas de Fluxo em Grafosf(D) = f(S,S) = = ≤
≤ = c(S,S)
Logo, f(D) ≤ c(S,S).
),(),(
)()(ssesse
efef
),(
)(sse
ef
Problemas de Fluxo em GrafosTeorema do fluxo máximo – corte
mínimo:◦O valor do fluxo máximo de uma
rede D é igual à capacidade do corte mínimo de D.
Problemas de Fluxo em GrafosAlgoritmos para Fluxo máximo:
◦Dados de entrada: D(V, E) Cada aresta e tem capacidade c(e),
inteira e positiva Origem s e destino v de V
◦Saída: F: valor do fluxo na rede f(e): valor do fluxo em cada aresta e
Problemas de Fluxo em GrafosAlgoritmo 1:
◦F = 0;◦Para cada aresta e, f(e) = 0;◦Construir a rede residual D’(f)◦Enquanto existir caminho de s a t em
D’: F’ = min{ c’(vj,vj+1) | 1≤ j < k } Para j de 1 até k-1
Se (vj,vj+1) é aresta direta entao
f(vj,vj+1) = f(vj,vj+1) + F’
Senão f(vj+1,vj) = f(vj+1,vj) – F’ F = F + F’ Construir rede residual D’(f)
Problemas de Fluxo em Grafos
s
a
c
b
t
d
4
2
33
3
4
2 13
5
Problemas de Fluxo em GrafosQual o problema que pode existir
neste algoritmo?
Problemas de Fluxo em GrafosAlgoritmo 2:
◦F = 0;◦Para cada aresta e, f(e) = 0;◦Construir a rede residual D’(f)◦Enquanto existir caminho de s a t em D’:
Escolher o menor caminho (via busca em largura) F’ = min{ c’(vj,vj+1) | 1≤ j < k } Para j de 1 até k-1
Se (vj,vj+1) é aresta direta entao
f(vj,vj+1) = f(vj,vj+1) + F’
Senão f(vj+1,vj) = f(vj+1,vj) – F’ F = F + F’ Construir rede residual D’(f)
Problemas de Fluxo em Grafos
s
a
c
b
t
d
4
2
33
3
4
2 13
5
Problemas de Fluxo em GrafosUm segundo problema muito
comum de fluxo em redes consiste em descobrir o fluxo de menor custo (custo mínimo);
Neste caso, não estamos mais preocupados em encontrar o fluxo máximo;
Problemas de Fluxo em GrafosO vértice de destino t vai possuir
agora uma demanda positiva de um fluxo;
Essa demanda será denotada por B;
O vértice s terá uma oferta de fluxo, também com valor B;
Os demais vértices não terão oferta nem demanda;
Problemas de Fluxo em GrafosO objetivo está em fazer um
fluxo de B unidades atravessar o grafo de s a t, passando pelas arestas (com capacidade positiva);
Cada aresta vai possuir também um custo de utilização caso passe fluxo por ela.
Estamos interessados em escolher as arestas que ofereçam os menores custos;
Problemas de Fluxo em Grafos
s
a
c
b
t
d
(3,4)
(5,2)
(1,3)(3,3)
(2,3)
(5,4)
(4,2) (1,1)(2,3)
(2,5)
Demanda = 7(custo, capacidade)Soluções?????
Problemas de Fluxo em GrafosAplicações
◦Uma empresa possui p fábricas com produção conhecida e q depósitos com demandas conhecidas. Deseja-se estabelecer um fluxo que atenda às demandas, de forma que o custo de transporte dos produtos das fábricas para os depósitos seja o menor possível.
Problemas de Fluxo em GrafosAplicações
◦Uma generalização deste problema envolve a fabricação de produtos distintos, com produções e demandas também distintos.
◦Neste caso, pode-se utilizar uma estratégia muito interessante de se criar camadas de nós intermediários para tratar os modelos diferentes de forma distinta;
Problemas de Fluxo em Grafos
Problemas de Fluxo em GrafosAlgoritmo de ciclos negativos
(cancelamento de ciclos):◦A ideia é encontrar um fluxo inicial
factível;◦Depois, monta-se a rede residual;◦Enquanto houver ciclos de custo
negativo, aumenta-se o fluxo através do ciclo;
◦O algoritmo termina quando não houver mais ciclos;
Problemas de Fluxo em GrafosAlgoritmo:
◦Estabelecer um fluxo F através do algoritmo de fluxo máximo;
◦Montar a rede residual W;◦Enquanto a rede W tem ciclo
negativo: Determinar x = min{rij, (i,j) W}; Aumentar o fluxo F em x unidades; Montar a rede residual W;
◦Fim enquanto;
Problemas de Fluxo em GrafosComo montar a rede residual em
um grafo com capacidade, custo e fluxo para cada aresta?
(2,4)
(2,2)
(1,4)
(3,3)
(1,3)
10
1
1 (2,5)
33
(custo, capacidade)
fluxo
(2,3)
(2,1)
(1,4)
(-3,3)
(-1,3)(2,4)
(custo, residual)
(-2,1)
(-2,1)
(-2,1)
Problemas de Fluxo em Grafos
st
a
c
b e
f
d
(3,7)
(2,5)
(1,7)(2,4)
(3,1)
(4,5)
(2,5)
(2,4)(1,2)
(1,5)
(2,5) (2,6)
(3,5)
(3,3)
Problemas de Fluxo em GrafosProblema de múltiplos fluxos:
◦É uma generalização do problema de luxo de custo mínimo;
◦Ao invés de um único tipo de fluxo (produtos, mercadorias etc) temos vários fluxos distintos sendo produzidos e consumidos;
◦Ex: por determinadas redes, passam tráfegos de tipos diferentes Dados Voz Audio ou video on-line
Problemas de Fluxo em GrafosSe os fluxos não apresentam
qualquer tipo de interação entre si, o problema pode ser tratado separadamente como diversos problemas de fluxo;
Entretanto, se os fluxos compartilham determinadas características, será preciso tratar o problema como um todo;
Problemas de Fluxo em Grafos
Fluxo 1
Fluxo 2
Fluxo 3i j
uij
xij
xij
xij
1
2
3
Problemas de Fluxo em GrafosAlgumas variações:
◦Homogeneidade: cada unidade de fluxo que passa por uma aresta consume uma unidade de capacidade da aresta;
◦Custos crescentes: em alguns modelos o custo é definido como uma função não-linear (função degrau);
◦Integralidade: na maioria dos modelos, o fluxo pode ser transferido em unidades inteiras (não-fracionárias);
Top Related