P3 - Fluxo máximo numa rede de transporte

Slides:



Advertisements
Apresentações semelhantes
Algoritmos de Caminho Mínimo em Grafos
Advertisements

Algoritmo de Caminho Mínimo
Árvores 2010/1 Teoria dos Grafos (INF 5037/INF2781)
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Ford Fulkerson Teoria dos Grafos.
Prof. M.Sc. Fábio Francisco da Costa Fontes Maio
Gustavo Sant´Anna Ferreira Rodrigo Ribeiro de Souza
Celso C. Ribeiro Caroline T. Rocha
Fluxo em Redes Prof. Ricardo R. Santos.
Exercícios PAA- Grafos
Celso C. Ribeiro Caroline T. Rocha
UFES CC/EC/Mestrado Teoria dos Grafos Árvores. UFES CC/EC/Mestrado Teoria dos Grafos Árvores Grafo Acíclico: não possui ciclos.
Algoritmo polinomial para geração de uma Árvore Geradora Mínima
Problema do Carteiro Chinês
Pesquisa em profundidade
Problemas de fluxo numa rede
Grafos Grafo G = (V, E) V — conjunto de vértices
Árvore Geradora de Peso Mínimo
Árvore Geradora Mínima
Grafos Árvores Geradoras.
Exercícios PAA- Grafos
Otimização Inteira 5a. Aula Franklina.
Análise e Síntese de Algoritmos
Algoritmos Gulosos em Grafos
Universidade Federal de Mato Grosso do Sul Departamento de Computação e Estatística Circuitos de Euler em Paralelo Universidade Federal de Mato Grosso.
Algoritmos para Obtenção de Árvore Geradora Mínima

Problema MST Método Genérico Guloso usando Estratégia do Corte
Redes de transporte Uma rede ou grafo consiste num número finito de pontos chamados nós ou vértices interligados por arcos. Muitos sistemas, físicos ou.
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
Análise e Síntese de Algoritmos Algoritmos GreedyCLRS, Cap. 16.
Algoritmo de Transportes Objecto de Aprendizagem Manuel Pina MarquesDEIG
Programação Dinâmica Profa. Sandra de Amo Bacharelado em Ciência da Computação – UFU Disciplina de Análise de Algoritmos.
Algoritmo de Dijkstra.
BUSCA LOCAL Estéfane G. M. de Lacerda UFRN/DCA Setembro de 2006.
Busca com informação e exploração - Busca Heurística Jeneffer Ferreira Lázaro .: Capitulo 4 -
Geometria Aula 3, ciclo 1.
Teoria dos Grafos Geração de Valores aleatórios
Algoritmos e Estruturas de Dados I
Algoritmo de Pesquisa em Profundidade
Contagem Aula 2, ciclo 1.
Divisão Euclidiana Aula 1, ciclo 4.
Algoritmo de Floyd-Warshall
Sistemas de Redes de Filas
João Pascoal Faria EGP, CPC, 2004/05
Ordenação: Terminologia
Análise de fluxos de caixa
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Algoritmos e Estruturas de Dados I
3ª aula RESOLUÇÃO PELO MÉTODO GRÁFICO UNIDADE 3
Contagem Aula 2, ciclo 1.
FEUP/LEEC Algoritmos e Estruturas de Dados 2001/2002
Algoritmo de Bellman-Ford para cálculo de custo mínimo em grafo
EGP, CPC, 2004/05 Problema e Algoritmos de Colocação de Professores
ÁRVORES ABRANGENTES. Árvores abrangentes Uma árvore abrangente é um grafo conexo e sem circuitos, que contém todos os seus vértices. A utilização de uma.
Algoritmos de Redes Rota mais curta Árvore de ramificação mínima
Algoritmo de Johnson Estrutura de Dados II
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Representação da Informação
Ondas em uma corda Tomemos uma corda esticada:
Grafos eulerianos 1.
Introdução à Computação
1 Modelagem Matemática de Sistemas Dinâmicos 3.9. Gráfico de Fluxo de Sinais Linearização de Modelos Prof. André Marcato Livro Texto: Engenharia.
Emparelhamento em Grafos
              Investigação Operacional Métodos de Programação Linear: Big M, 2 Fases, S Dual (Mestrado) Engenharia Industrial
Modelagem Matemática de Sistemas Dinâmicos. 3. 9
Arranjo Físico Industrial
Grafos: Conceitos Básicos
JUROS & FLUXO DE CAIXA.
Transcrição da apresentação:

P3 - Fluxo máximo numa rede de transporte Modelar fluxos conservativos entre dois pontos através de canais com capacidade limitada s s Fluxo num arco não pode ultrapassar a capacidade Soma das entradas num nó igual à soma das saídas 3 2 3 2 1 a b a b 4 1 Exemplos abastecimento de líquido ponto a ponto tráfego entre dois pontos - s: fonte; t: poço - distribuição de fluxo pelos arcos arbitrária, desde que respeite as setas 3 2 2 2 c d c d Fim aula 11/4/2003 2 3 2 3 t t

Fluxo máximo: 1ª abordagem algoritmo simples de aproximações sucessivas baseado em G  grafo base de capacidades Gf  grafo auxiliar de fluxos - inicialmente fluxos iguais a 0 - no fim, fluxo máximo Gr  grafo residual (auxiliar) - capacidade disponível em cada arco (= capacidade - fluxo) - capacidade disponível = 0 — eliminar arco saturado método de calcular o fluxo máximo entre s e t em cada iteração, selecciona-se um caminho em Gr entre s e t (de acréscimo) —algoritmo não determinístico valor mínimo nos arcos desse caminho = quantidade a aumentar a cada um dos arcos respectivos em Gf recalcular Gr termina quando não houver caminho de s para t

Exemplo: estado inicial 3 2 3 2 1 1 a b a b a b 4 4 3 2 3 2 c d c d c d 2 3 2 3 t t t G Gf Gr

Exemplo: 1ª iteração s s s a b a b a b c d c d c d t t t G Gf Gr 2 3 2 2 3 1 1 a b a b a b 4 4 3 2 2 3 c d c d c d 2 3 2 2 1 t t t G Gf Gr

Exemplo: 2ª iteração s s s a b a b a b c d c d c d t t t G Gf Gr 3 2 2 1 1 1 a b a b a b 4 4 3 2 2 2 1 c d c d c d 2 3 2 2 1 t t t G Gf Gr

Exemplo: 3ª iteração s s s a b a b a b c d c d c d t t t G Gf Gr 3 2 3 1 1 a b a b a b 4 1 3 3 2 2 2 1 c d c d c d 2 3 2 3 t t t G Gf Gr

Algoritmo não garante fluxo óptimo critério ganancioso de selecção do caminho: escolher o que dê maior fluxo - caminho s, a, d, t (3 unidades de fluxo)  algoritmo termina sem obter o máximo - exemplo de algoritmo ganancioso que falha s s s 3 2 3 2 1 1 a b a b a b 4 3 1 3 2 3 2 c d c d c d 2 3 3 2 t t t

Algoritmo determinístico permitir que o algoritmo mude de ideias para cada arco (v,w) com fluxo f(v,w) no grafo de fluxos acrescenta-se um arco (w,v) em sentido inverso no grafo residual com capacidade f(v,w) - corresponde a deixar devolver fluxo para trás (nunca fica globalmente negativo, contra o arco) - podem existir arcos em sentidos opostos; podem existir ciclos se as capacidades forem números racionais, o algoritmo termina com máximo se as capacidades forem inteiros e o fluxo máximo f - bastam f estádios (fluxo aumenta pelo menos 1 por estádio) - tempo de execução ( caminho mais curto não pesado ) é O(f. |E| ) ä mau evitar o problema escolher caminho que dá maior aumento de fluxo semelhante ao problema do caminho pesado mais curto (pequena alteração a Dijkstra) cada cálculo de um aumento em O(|E| log |V|) (Dijkstra) fluxo máximo em O(|E| log capMax) (capMax = capacidade máxima de um arco) global: O(|E|^2 log |V| log capMax)

Solução óptima - 1ª iteração 3 2 3 3 2 1 1 a b a b a b 4 3 1 3 2 3 2 3 c d c d c d 2 3 3 2 3 t t t 2 G Gf Gr 3 unidades de fluxo no caminho sadt

Solução óptima - 2ª iteração 3 2 3 2 3 2 1 1 a b a b a b 4 1 3 3 2 2 2 2 1 2 1 c d c d c d 2 3 2 3 2 3 t t t G Gf Gr 2 unidades de fluxo no caminho s,b,d,a,c, t

P4 - Árvore de expansão mínima (minimum spanning tree) Árvore que liga todos os vértices do grafo usando arestas com um custo total mínimo caso do grafo não dirigido grafo tem que ser conexo árvore Þ acíclico número de arestas = |V| - 1 exemplo de aplicação: cablamento de uma casa - vértices são as tomadas - arestas são os comprimentos dos troços

Algoritmo de Prim expandir a árvore por adição sucessiva de arestas e respectivos vértices critério de selecção: escolher a aresta (u,v) de menor custo tal que u já pertence à árvore e v não (ganancioso) início: um vértice qualquer idêntico ao algoritmo de Dijkstra para o caminho mais curto informação para cada vértice - dist(v) é o custo mínimo das arestas que ligam a um vértice já na árvore - path(v) é o último vértice a alterar dist(v) - known(v) indica se o vértice já foi processado (isto é, se já pertence à árvore) diferença na regra de actualização: após a selecção do vértice v, para cada w não processado, adjacente a v, dist(w) = min{ dist(w), cost(w,v) } tempo de execução - O( |V|2 ) sem fila de prioridade - O( |E| log |V| ) com fila de prioridade

Evolução do algoritmo de Prim última tabela known dist path 1 0 0 1 2 1 1 2 4 1 1 1 1 6 7 1 1 7 1 4 4 2 1 2 4 10 1 3 3 2 7 4 5 8 4 5 6 6 1 7     2 1 1 1 2 2 1 2 1 1 1 4 4 3 2 4  2  2  2 1 2 1 2 1 2 1 1 1 3 2 4 3 2 4 3 2 4 5 4 4 4 6 7 6 1 7 6 1 7

Algoritmo de Kruskal analisar as arestas por ordem crescente de peso e aceitar as que não provocarem ciclos (ganancioso) método manter uma floresta, inicialmente com um vértice em cada árvore (há |V|) adicionar uma aresta é fundir duas árvores quando o algoritmo termina há só uma árvore (de expansão mínima) aceitação de arestas — algoritmo de Busca/União em conjuntos representados como árvores se dois vértices pertencem à mesma árvore/conjunto, mais uma aresta entre eles provoca um ciclo (2 Buscas) se são de conjuntos disjuntos, aceitar a aresta é aplicar-lhes uma União selecção de arestas: ordenar por peso ou, melhor, construir fila de prioridade em tempo linear e usar Apaga_Min tempo no pior caso O( |E| log |E| ), dominado pelas operações na fila

Pseudocódigo (Kruskal) void kruskal() { DisjSet s; PriorityQueue h; Vertex u, v; SetType uset, vset; Edge e, int edgesAccepted = 0; h = readGraphIntoHeapArray(); h.buildHeap(); s = new DisjSet(NUM_VERTICES); while(edgesAccepted < NUM_VERTICES -1 ) e = h.deleteMin(); // e = (u,v) uset = s.find(u); vset = s.find(v); if (uset != vset) edgesAccepted++; S.union(uset, vset); } }}

Evolução do algoritmo de Kruskal 1 2 3 4 5 6 7 10 8  1 2 3 4 5 6 7   1 2 1 2 1 1 3 5 3 4 5 4 6 1 6 7 7

Evolução do algoritmo de Kruskal 1 2 3 4 5 6 7 10 8  2 1 2 1 3 4 5 6 1 7 2 2  1 2  1 2 1 1 5 3 2 4 5 3 2 4 4 6 1 7 6 1 2 7  1 2 1 3 2 4 5 4 6 6 1 7