1) O documento apresenta o algoritmo de Fluxo Máximo a Custo Mínimo.
2) Este algoritmo encontra os caminhos de menor custo que geram o fluxo máximo em uma rede, utilizando algoritmos de fluxo máximo e menor caminho de origem única.
3) É apresentada a complexidade do algoritmo, que é função do número de vértices, arestas e fluxo máximo.
1. Universidade Federal de Campina Grande
Centro de Engenharia Elétrica e Informática
Departamento de Sistemas e Computação
Programa de Educação Tutorial (PET)
Demontiê Junior
(demontie@dsc.ufcg.edu.br)
Fluxo Máximo a Custo Mínimo
Min Cost Max Flow
DSC/CEEI/UFCG
2. Agenda
Introdução Introdução
Conceitos
Conceitos importantes
importantes
Apresentação e
análise do
algoritmo Algoritmo de Bellman-Ford
Exemplode
implementação
Redes de fluxo
Considerações
Apresentação e análise do algoritmo
Finais
Exemplo de implementação
Considerações Finais
DSC/CEEI/UFCG
CST – Fluxo Máximo a Custo 2
Mínimo – Demontiê Junior
3. Introdução
Introdução
Caracterização do Problema:
Conceitos
importantes
Apresentação e
Encontrar os caminhos de menor custo
análise do
algoritmo que geram o fluxo máximo de uma rede.
Exemplode
implementação
Considerações
Finais Utiliza algoritmos de fluxo máximo e de
menor caminho de origem única.
Cada aresta tem dois atributos: peso e
DSC/CEEI/UFCG
capacidade
CST – Fluxo Máximo a Custo 3
Mínimo – Demontiê Junior
4. Introdução
Introdução Motivação:
Conceitos
importantes Aplicável a vários problemas reais.
Apresentação e
análise do Exemplo (variação: fluxo a custo mínimo):
algoritmo
Exemplode “Saber a quantia mínima em dinheiro que
implementação
Considerações
um grupo de amigos precisa dispor para se
Finais deslocar entre duas cidades. O transporte será
feito por aviões, que seguem determinados
trechos (existe apenas um vôo para cada
trecho durante todo o período do passeio, mas
o tempo do vôo é desprezível). Todos os vôos
DSC/CEEI/UFCG tem a mesma capacidade, e cada um tem seu
custo por pessoa.”
CST – Fluxo Máximo a Custo 4
Mínimo – Demontiê Junior
5. Introdução
Introdução Objetivos:
Conceitos
importantes
Apresentar um algoritmo para resolução
Apresentação e
análise do
algoritmo
do problema de Fluxo Máximo a Custo
Exemplode
implementação
Mínimo
Considerações
Finais
Mostrar a importância do conhecimento
desse tipo de algoritmos para a
resolução de problemas reais
DSC/CEEI/UFCG
CST – Fluxo Máximo a Custo 5
Mínimo – Demontiê Junior
7. Contextualizando...
Introdução O que é um grafo?
Conceitos
importantes
Dois tipos de elementos: vértices e
Apresentação e
análise do
algoritmo
arestas
Exemplode
implementação De maneira mais formal, grafos são
Considerações
Finais
tuplas do tipo G = <V, E>:
V é o conjunto finito, não vazio, de vértices
E é o conjunto finito de arestas
Se Ǝ e = {v, w} | e ∈ E, então, dizemos que
e é incidente a v e w, bem como v e w são
DSC/CEEI/UFCG
adjacentes
CST – Fluxo Máximo a Custo 7
Mínimo – Demontiê Junior
8. Menor caminho de origem única
Introdução Em que consiste?
Conceitos
importantes
Encontrar os menores caminhos entre
Apresentação e
análise do
algoritmo
um vértice inicial e todos os outros
Exemplode
implementação
vértices de um grafo
Considerações
Finais
Utiliza grafos valorados
Algoritmos mais famosos:
Dijkstra
Bellman-Ford
Floyd-Warshall
DSC/CEEI/UFCG
CST – Fluxo Máximo a Custo 8
Mínimo – Demontiê Junior
9. Algoritmo de Bellman-Ford
Introdução
Conceitos
importantes Bellman-Ford(G, w, s)
Apresentação e for ∀u ∈ V[G] do
análise do d[u] ← ∞
algoritmo
π[u] ← NIL Inicia as variáveis
Exemplode
implementação d[s] ← 0
Considerações
for i 1 to |V[G]| - 1 do
Finais for ∀(u, v) ∈ E[G] do
if d[v] > d[u] + w(u,v) then
d[v] ← d[u] + w(u,v) Relaxamento
π[v] ← u
for ∀(u, v) ∈ E[G] do
if d[v] > d[u] + w(u, v) then Checa a presença
return FALSE de ciclo negativo
DSC/CEEI/UFCG
return TRUE
CST – Fluxo Máximo a Custo 9
Mínimo – Demontiê Junior
10. Redes de fluxo
Introdução O que são redes de fluxo?
Conceitos
importantes
Cada aresta tem uma capacidade (fluxo
Apresentação e
análise do
algoritmo
máximo nessa aresta)
Exemplode
implementação Possui dois vértices especiais: fonte (f)
Considerações
Finais
e sovedouro (s)
∀v ∈ V, existe um caminho entre f e s
passando por v
DSC/CEEI/UFCG
CST – Fluxo Máximo a Custo 10
Mínimo – Demontiê Junior
11. Redes de fluxo
Introdução Exemplo:
Conceitos
importantes
Apresentação e 12
análise do V W
algoritmo
Exemplode 16 20
implementação
Considerações
Finais
10 4 9 7
F S
13 4
X Y
DSC/CEEI/UFCG
14
CST – Fluxo Máximo a Custo 11
Mínimo – Demontiê Junior
12. Rede residual
Introdução Considere c(e) a função capacidade
de e, e ∈ E
Conceitos
importantes
Apresentação e
A rede residual de uma rede R é um
análise do
algoritmo
grafo R = <V, Eresidual>, tal que:
Exemplode
implementação
Considerações
Finais ∀e ∈ E, Ǝ uma eresidual cuja capacidade
é cresidual
cresidual(e) = c(e) – fluxo(e)
DSC/CEEI/UFCG
CST – Fluxo Máximo a Custo Mínimo – 12
Demontiê Junior
13. Rede residual
Introdução Rede residual após um fluxo de 4 no
Conceitos
importantes caminho FXYS
Apresentação e
análise do
12
algoritmo V W
Exemplode
implementação
16 20
Considerações
Finais
10 4 9 7
F S
9 0
4
4
10
X Y
DSC/CEEI/UFCG
4
CST – Fluxo Máximo a Custo 13
Mínimo – Demontiê Junior
14. Algoritmo de fluxo máximo
Introdução Ford-Fulkerson
Conceitos
importantes
Rede residual
Apresentação e
Caminho expandível
análise do
algoritmo
Exemplode
implementação
Ford-Fulkerson(G, s, t)
Considerações
Finais for ∀e ∈ E[G] do
fluxo[e] ← 0
while exisitr um caminho expandível p na rede residual do
aumentar f (*) ao longo de p
return f
DSC/CEEI/UFCG
(*) capacidade do arco de menor capacidade de p
CST – Fluxo Máximo a Custo 14
Mínimo – Demontiê Junior
16. Fluxo Máximo a Custo Mínimo
Introdução “Por que não encontrar os menores
Conceitos
importantes caminhos com Dijkstra e, simplesmente, sair
Apresentação
análise do
e distribuindo o fluxo?”
algoritmo
Exemplode
Temos que gerar, sempre, a rede residual, para
implementação que não seja encontrado um fluxo diferente do
Considerações
Finais máximo
Quando geramos a rede residual, temos que
modificar, também, os custos das arestas
Algumas vezes invertemos o custo de uma
aresta
DSC/CEEI/UFCG
Dijkstra não funciona bem com pesos negativos
CST – Fluxo Máximo a Custo 16
Mínimo – Demontiê Junior
17. Fluxo Máximo a Custo Mínimo
Introdução Exemplo
Conceitos
importantes
Apresentação e 12
análise do V W
algoritmo 20
Exemplode 16 20
implementação
20 20
Considerações
Finais 9
F 1 S
20 20
13 4
20
X Y
DSC/CEEI/UFCG
14
CST – Fluxo Máximo a Custo Mínimo – 17
Demontiê Junior
18. Fluxo Máximo a Custo Mínimo
Introdução Exemplo
Conceitos
importantes
Apresentação e 12
análise do V W
algoritmo 20
Exemplode 16 20
implementação
20 20
Considerações
Finais 9
F ERRADO
1 S
20 20
13 4
20
X Y
DSC/CEEI/UFCG
14
CST – Fluxo Máximo a Custo Mínimo – 18
Demontiê Junior
19. Fluxo Máximo a Custo Mínimo
Introdução Exemplo
Conceitos
importantes
Apresentação e 12
análise do V W
algoritmo 20
Exemplode 16 20
implementação
20 20
Considerações
Finais 9
F CORRETO 1 S
20 20
13 4
20
X Y
DSC/CEEI/UFCG
14
CST – Fluxo Máximo a Custo Mínimo – 19
Demontiê Junior
20. O algoritmo
Introdução
Conceitos MinCostMaxFlow(G, s, t)
importantes
for ∀e ∈ E[G] do
Apresentação e
análise do
fluxo[e] ← 0
algoritmo
Exemplode redeResidual ← G
implementação custo ← 0
Considerações
Finais
while exisitr um caminho entre F e S (rodar Bellman-Ford
para encontra menor caminho F S (*)) do
atualizar custo
aumentar fluxo ao longo do caminho c
gerar rede residual, modificando o custo das arestas
DSC/CEEI/UFCG
return fluxo, custo
(*) o Bellman-Ford roda em cima da rede residual
CST – Fluxo Máximo a Custo Mínimo – 20
Demontiê Junior
21. Analisando o algoritmo
Introdução Análise do Bellman-Ford
Conceitos
importantes
Ordem de complexidade: (|V|.|E|)
Apresentação e
Análise do Ford-Fulkerson
análise do
algoritmo
Exemplode
implementação
Ordem de complexidade: O(E.|f*|)
Considerações
Finais
Na implementação de Edmonds-Karp,
utilizando busca em largura: O(V.E²)
DSC/CEEI/UFCG
CST – Fluxo Máximo a Custo 21
Mínimo – Demontiê Junior
22. Analisando o algoritmo
Introdução Análise do Fluxo Máximo a Custo Mínimo
Conceitos
importantes MinCostMaxFlow(G, s, t)
for ∀e ∈ E[G] do
Apresentação e
fluxo[e] ← 0 O(E)
análise do
algoritmo
redeResidual ← G
Exemplode custo ← 0
implementação
while exisitr um caminho entre F e S (rodar Bellman-Ford
Considerações para encontra menor caminho F S (*)) do
O(|f*|.E.V)
Finais atualizar custo
aumentar fluxo ao longo do caminho c O(E)
gerar rede residual, modificando o custo das arestas
return fluxo, custo
MinCostMaxFlow = O(V.E²)
DSC/CEEI/UFCG
CST – Fluxo Máximo a Custo 22
Mínimo – Demontiê Junior
24. Referências
Introdução Prof. Jorge Figueiredo, notas de aula
6 e 10;
Conceitos
importantes
Apresentação e
CORMEN, THOMAS H., Introduction
análise do
algoritmo
To Algorithms 2.ed. MIT PRESS, 2001
Exemplode
implementação
Considerações
Finais
http://www.slideshare.net/rafaelspere
ira/fluxo-a-custo-mnimo-1828149
http://courses.csail.mit.edu/6.854/06/
DSC/CEEI/UFCG
scribe/s12-minCostFlowAlg.pdf
CST – Fluxo Máximo a Custo Mínimo – 24
Demontiê Junior