Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula...
Transcript of Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula...
Ciência da Computação
GRAFOS
Aula 10 Fluxo em Redes
Max Pereira
Fluxo em Redes
Ciência da Computação - GRAFOS
É a transferência de algum tipo de recurso quantificável e sujeito a restriçõesde equilíbrio, de um local (origem) para outro (destino) através de uma rede.
Exemplos:
Líquido fluindo por uma rede de tubos, como a rede de abastecimento de água ou a rede de esgoto;
Peças se deslocando por linhas de montagem; Voz, imagem ou dados em redes de comunicação; Sistemas elétricos de transmissão.
Fluxo em Redes
Ciência da Computação - GRAFOS
AplicaçõesConsidere a seguinte situação modelada por um grafo: Cada aresta representa uma rua; O valor de cada aresta indica o maior fluxo possível ao longo da rua
(veículos/hora).
Qual o maior número possível de veículos que pode viajar do local u até o local vem uma hora?
Fluxo em Redes
Ciência da Computação - GRAFOS
Imagine que temos uma transportadora, e queremos enviar algumasencomendas de uma cidade para outra. Você pode enviá-las usando vários vôoscom diferentes rotas. No entanto, cada vôo tem um limite de espaço quepodemos utilizar.
Uma questão importante é, qual o volume de encomendas que podemosenviar para o destino, usando os diferentes vôos disponíveis?
Para responder a essa questão vamos explorar um tópico chamado de fluxo emredes, através de modelos de grafos.
Fluxo em Redes
Ciência da Computação - GRAFOS
Um grafo de fluxo em redes G = (V, E) é um grafo orientado (direcionado) com dois vértices especiais: o vértice origem, e o vértice destino (sorvedouro). Cadavértice representa uma cidade onde podemos enviar ou receber encomendas. Uma aresta (u, v) no grafo significa que há um vôo direto entre u e v.
Cada aresta tem uma capacidade associada, sempre finita, representando a quantidade de espaço disponível naquele vôo.
Fluxo em Redes
Ciência da Computação - GRAFOS
Com esse grafo, nós queremos saber quantas encomendas podemos enviar de “s” para “t”. Como as encomendas “fluem” através do grafo, de s para t, chamamos esse problema de “o problema do fluxo máximo”. Uma solução intuitiva é encontrar caminhos entre s e t onde podemos enviar o máximo de fluxo possível, e depois atualizar o grafo para verificar o espaçoutilizado.
O primeiro número na aresta é o fluxo e o segundo a capacidade
Fluxo em Redes
Ciência da Computação - GRAFOS
Nós escolhemos o caminho s u v t. As capacidades ao longo dessecaminho são 3, 3, 4 respectivamente. O que significa que temos um “gargalo” de capacidade igual a 3, ou seja, podemos enviar no máximo 3 unidades aolongo do fluxo.
Fluxo em Redes
Ciência da Computação - GRAFOS
Agora precisamos atualizar o grafo. Uma escolha óbvia seria subtrair, da capacidade de cada aresta utilizada, o valor 3 – como usamos 3 espaçosdisponíveis em cada aresta, então a capacidade de cada aresta deve serdimuída por 3. Atualizando desse forma, há um único outro caminho partindode s para t (s v t). A aresta (s,v) tem capacidade 2 e a aresta (v,t) agora tem capacidade 1 (devido ao fluxo de 3 no caminho anterior).
Fluxo em Redes
Ciência da Computação - GRAFOS
Nosso algoritmo agora termina, pois não temos outros caminhos de s para t.
Porém, podemos fazer melhor?
Se enviarmos apenas 2 unidades através de u,v e direcionar a terceira unidade para u,t então abriremos um novo espaço em ambas as arestas (u,v) e (v,t). Podemos enviar agora mais uma unidade para o caminho s v t, aumentado o nosso fluxo total para 5, o que de fato é o máximo possível.
Fluxo em Redes
Ciência da Computação - GRAFOS
Então, o que tinha de errado com nosso algoritmo? Um problema foi a ordemde escolha dos caminhos. Se tivéssemos escolhido primeiro o caminho s ut e depois o caminho s u v t, então encontraríamos a solução ótima. Mas a escolha da ordem dos caminhos pode se tornar difícil.
Testando novamente...
Qual o fluxo máximo?
Fluxo em Redes
Ciência da Computação - GRAFOS
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Depende de três ideias importantes:
Redes residuais: consite em arestas que podem admitir mais fluxo. Caminhos de aumento: consiste de um caminho simples desde a origem até
o destino, no grafo da rede residual. Cortes: Separam o grafo em duas partes, uma com o vértice de origem e
outra com o vértice de destino.
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Redes residuais:Considerando-se uma grafo G e um fluxo f, a rede residual consiste em arestasque podem admitir mais fluxo.
A capacidade residual Cf é a quantidade de fluxo adicional que pode passar por(u, v) sem exceder a capacidade c(u, v):
Cf(u, v) = c(u, v) – f(u, v)
O grafo residual de uma rede de fluxo é essencialmente o grafo da redeexceto que para toda aresta (u, v) que possui x unidades de fluxo, há uma aresta (v, u) com capacidade x no grafo residual.
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
O grafo residual de uma rede de fluxo é essencialmente o grafo da redeexceto que para toda aresta (u, v) que possui x unidades de fluxo, há uma aresta (v, u) com capacidade x no grafo residual.
As arestas tracejadas são as arestas acrescentadas no grafo residual. A capacidade das arestas tracejadas é igual as unidades de fluxo contidas nas arestas sólidas na direção oposta.
Fluxo em Redes
Ciência da Computação - GRAFOS
𝐶𝑓 𝑢 → 𝑣 = 𝑐 𝑢 → 𝑣 − 𝑓 𝑢 → 𝑣 , 𝑠𝑒 𝑢 → 𝑣 ∈ 𝐸
𝑓 𝑢 → 𝑣 𝑠𝑒 𝑣 → 𝑢 ∈ 𝐸0, 𝑐𝑎𝑠𝑜 𝑐𝑜𝑛𝑡𝑟á𝑟𝑖𝑜
Grafo residual
Um caminho no grafo residual é chamado de caminho de aumento.
Fluxo em Redes
Ciência da Computação - GRAFOS
Caminhos de aumentoSão caminhos simples da origem (s) ao destino (t) através do grafo residual Gf.A capacidade residual de um caminho de aumento p, corresponde à menordentre as capacidades residuais das arestas que fazem parte de p.
Cf = min{Cf(u, v) | (u, v) p}
Fluxo em Redes
Ciência da Computação - GRAFOS
CortesUm corte é uma partição de vértices distribuída um dois conjuntos distintos S e T. Em uma rede de fluxo, a origem está localizada em S, e o destino em T.
O conjunto do corte (cut-set) é um conjunto de arestas que começam em S e terminam em T.
A capacidade de um corte é a soma dos valores das arestas que começam em Se terminam em T.
Fluxo em Redes
Ciência da Computação - GRAFOS
Cortes
Fluxo em Redes
Ciência da Computação - GRAFOS
Cortes
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson (chamado “método” porque encontrarcaminhos de aumento não é especificado).
Os passos:• 1º Escolhe-se um caminho qualquer desde a origem até o
destino cujas arestas possuam capacidade positiva (>0).• 2º Procurar nesse caminho a aresta com menor capacidade (c).• 3º Diminuir c da capacidade de fluxo em cada aresta do
caminho no sentido direto e aumentar c na capacidade das arestas no sentido inverso.
• Voltar ao 1º passo. Se já não existir nenhum caminho em quetodas as arestas tenham capacidade positiva, então o fluxomáximo já está determinado.
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson (algoritmo)
Fluxo em Redes
Ciência da Computação - GRAFOS
Teorema do Fluxo Máximo
“Para toda a rede com uma só origem e um só destino o fluxomáximo é igual ao valor mínimo de corte entre todos os cortes
possíveis da rede.”
Fluxo em Redes
Ciência da Computação - GRAFOS
Método de Ford-Fulkerson
Fluxo em Redes
Ciência da Computação - GRAFOS
Fluxo em Redes
Ciência da Computação - GRAFOS
Fluxo máximo = 23
Fluxo em Redes
Ciência da Computação - GRAFOS
Corte mínimo
C = 29 C = 26 C = 24
Fluxo em Redes
Ciência da Computação - GRAFOS
Corte mínimo
C = 34C = 35
Fluxo em Redes
Ciência da Computação - GRAFOS
Corte mínimo
C = 23C = 34
Corte mínimo
Fluxo em Redes
Ciência da Computação - GRAFOS
Encontrar o fluxo máximo (método de Ford-Fulkerson)