650 likes | 789 Views
Faculdade de Engenharia - Campus de Guaratinguetá. Pesquisa Operacional Livro: Introdução à Pesquisa Operacional Capítulo 3 - Teoria dos Grafos Fernando Marins – fmarins@feg.unesp.br Departamento de Produção. Sumário. Introdução Histórico Aplicações de grafos Conceitos e Notação
E N D
Faculdade de Engenharia - Campus de Guaratinguetá Pesquisa Operacional Livro: Introdução à Pesquisa Operacional Capítulo 3 - Teoria dos Grafos Fernando Marins – fmarins@feg.unesp.br Departamento de Produção
Sumário • Introdução • Histórico • Aplicações de grafos • Conceitos e Notação • Representações de um grafo • Tipos de grafos • Problemas típicos e Algoritmos • Caminho Ótimo - Algoritmo de Djisktra • Árvore Ótima - Algoritmo de Kruskal • Fluxo Máximo - Algoritmo de Ford - Fulkerson
Introdução Histórico Euler resolveu o problema das pontes de Königsberg do rio Pregel, em 1736, utilizando um modelo de grafos: partir de uma das 4 regiões, atravessar cada ponte uma única vez e retornar à região de partida. Figura 1. Rio Pregel e suas sete pontes. Figura 2. Leonhard Euler.
Introdução Figura 3. Königsberg -Kalinigrado nos tempos atuais.
Introdução Figura 4. Modelo de Grafo para o Rio Pregel e suas sete pontes. Modelo de grafos utilizado por Euler para demonstrar que o problema não tem solução. Para haver solução é necessário que cada região tenha um número par de pontes associadas.
Introdução Aplicações de modelos em grafos 1. Grafos planares: problemas de montagens/ trevos A, B, C : linhas de montagens/ rodovias principais D1, D2, D3: departamentos/ rodovias secundárias Ligações: esteiras/ viadutos ou túneis Figura 3. Um problema de montagem.
Introdução 2. Problemas de Localização Existindo n cidades consumidoras do produto fabricado por uma determinada empresa, deseja-se saber onde seria o melhor local para a instalação de uma filial desta empresa que atendesse as n cidades com menor custos de distribuição do produto. Existem algoritmos próprios para este problema, além de várias heurísticas que possuem bom desempenho.
2 a c 1 3 b Notação Representações de um grafo G 1. G(V, A) onde: V = Conjunto de vértices ou nós do grafo A = Conjunto de arcos ou arestas do grafo 2. Diagramas e tipos de grafos a 4 c b d 1 Grafo Não- orientado f e 2 3 Grafo Orientado
2 a c 1 3 b Notação 3. Matriz de adjacência (grafo não-orientado) A = (aij) = A =
4. Matriz de incidência (grafos orientados) A = [aij] é a matriz (não necessariamente quadrada) de incidência de G se Notação a 4 c b d 1 f e 2 3
Rio de Janeiro São Paulo 700 1500 Belo Horizonte Grafo Valorado Grafo com as distâncias de São Paulo a 3 capitais: 400 Brasília
Grafos Especiais Para o grafo G abaixo: árvore, cadeia, caminho, ciclo e circuito d e l a j c f h i b g
Árvore 1. Árvore (arborescência): grafo conexo sem ciclos d g a j h b
Cadeia 2. Cadeia: seqüência de arcos com extremidade em comum d l a j h
Caminho 3. Caminho: seqüência de arcos com mesma orientação a j c f
d l a i Ciclo e Circuito 4. Ciclo: cadeia fechada b g 5. Circuito: caminho fechado a c b
Problemas e Algoritmos Otimização em grafos Determinação de Árvores ótimas: Algoritmo de Kruskal Determinação de Caminhos Ótimos: Algoritmo de Djisktra Determinação de Fluxo Máximo: Algoritmo de Ford & Fulkerson
Algoritmo de Kruskal Histórico Em 1956 o matemático americano Joseph Kruskal (29/01/1928-19/09/2010) propôs um algoritmo para resolução do Problema da Árvore Mínima. Ele completou seu Ph.D. na Universidade de Princeton em 1954. Figura 5. Joseph Kruskal.
Algoritmo de Kruskal Determinação de uma árvore mínima num grafo G (V, A) Para cada aresta (i, j) existe um custo associado Cij. |V| = cardinalidade do conjunto de nós V = número de nós. Passo 1. Considerar o grafo trivial formado apenas pelos nós de G Passo 2. Construção da Árvore Acrescentar ao grafo trivial a aresta (i, j) associada ao menor valor de custo Cij. Repetir o procedimento respeitando a ordem crescente de valores de Cij, desde que a aresta analisada não forme ciclo com as arestas já incorporadas à árvore. Após incorporar |V| - 1 arestas Parar! A árvore mínima foi obtida. 19
Exemplo para o Algoritmo de Kruskal Determinar uma árvore mínima 6 5 A D F 2 8 1 9 5 1 9 4 B G C J 10 8 2 3 11 8 9 4 E I H 20
Exemplo para o Algoritmo de Kruskal Passo 1: Grafo trivial 21
Exemplo para o Algoritmo de Kruskal Passo 2: A primeira aresta a ser incorporada será a aresta associada ao valor de custo = 1. Observe-se que há duas arestas nestas condições: aresta (a, b) e aresta (c, d). Pode-se escolher arbitrariamente qual delas será incorporada primeiro ao grafo trivial. A seguir incorpore a outra (observe que elas não formam ciclo). 22
Exemplo para o Algoritmo de Kruskal A D 1 1 B C E Árvore parcial: colocar as arestas com custo 1 23
Exemplo para o Algoritmo de Kruskal A seguir tem-se as arestas (b, e) e (b, f) correspondentes aos custo com valor 2. Analogamente ao caso anterior pode-se optar por qualquer uma elas para ser analisada primeiro. Ambas serão incorporadas ao grafo resultante da operação anterior, pois também não formam ciclo.
Exemplo para o Algoritmo de Kruskal Árvore parcial: colocar as arestas com custo 2. A D 1 2 1 B C 2 E 25
Exemplo para o Algoritmo de Kruskal Árvore parcial: colocar a aresta com custo 3. A D 1 2 1 3 B C 2 E 26
Exemplo para o Algoritmo de Kruskal Árvore parcial: colocar as arestas com custo 4. 4 A D 1 2 1 3 B C 2 4 E 27
Exemplo para o Algoritmo de Kruskal Árvore parcial: colocar uma das duas arestas com custo 5, a outra será descartada. 5 4 A D 1 2 1 3 B C 2 4 E 28
Exemplo para o Algoritmo de Kruskal Como o número de nós é 10 prossegue-se neste processo até que sejam incorporadas 10 - 1 = 9 arestas, sendo obtida uma árvore mínima: 5 2 1 1 4 3 8 2 4 Observe que esta é uma solução ótima do problema. Custo ótimo: 1 + 1 + 2 + 2 + 3 + 4 + 4 + 5 + 8 = 30. 29
Algoritmo de Dijsktra Histórico Em 1956 o cientista da computação holandês Edsger Wybe Dijkstra concluiu o desenvolvimento do algoritmo para o problema do caminho mínimo mas somente em 1959 foi publicado seu trabalho. Este algoritmo foi o seu primeiro trabalho e o mais conhecido. Edsger Wybe Dijkstra nasceu em 11 de maio de 1930 e morreu em 6 de agosto de 2002. “ Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas.” Edsger Dijkstra Figura 6. Edsger Wybe Dijkstra .
Algoritmo de Dijsktra • Problema do Caminho Ótimo • Determinação de caminhos mínimos em grafos valorados. • Princípio de Otimalidade de Bellman: • “Um caminho mínimo é constituído de sub-caminhos mínimos” • Aplica-se a grafos valorados onde não há laços, arcos paralelos e todos valores associados aos arcos são não-negativos. • Achar caminho ótimo entre dois nós (origem = S e destino = T) de um grafo.
Algoritmo de Dijsktra • Aspectos Gerais • Adota a técnica de rotulação dos nós, havendo dois tipos de rótulos: rótulos temporários e rótulos definitivos. • A cada iteração, alguns nós são rotulados temporariamente e apenas um nó é rotulado definitivamente. • O valor do rótulo definitivo associado a um nó j corresponde ao valor da distância mínima entre o nó origem S e o nó j. • A execução do algoritmo termina quando se consegue rotular definitivamente o nó destino T.
Algoritmo de Djisktra • 1. Inicialização • 2. Atualização dos rótulos temporários • 3. Rotulação Definitiva de um nó • 4. Passo geral • Inicialização • Rotular definitivamente o nó origem S com valor 0. • Rotular temporariamente os demais nós com valor .
Algoritmo de Djisktra 2. Atualização dos rótulos temporários Todo nó j ainda não rotulado definitivamente deve receber novo valor de rótulo dado por Min {rótulo atual do nó j, rótulo do nó i + cij}, onde, i = último nó rotulado definitivamente cij = valor associado ao arco que liga os nós i e j.
3. Rotulação definitiva Comparar os rótulos temporários e escolher para ser rotulado definitivamente o nó j associado ao menor valor. 4. Passo geral Repetir sucessivamente os passos 2 e 3 até rotular definitivamente o nó destino T. O valor da distância mínima entre os nós S e T é o valor do rótulo definitivo do nó destino T. Algoritmo de Djisktra
Obtenção dos nós do caminho mínimo A partir do nó t achar qual foi o nó i do passo 2 responsável pelo valor de seu rótulo definitivo. Suponha que tenha sido o nó k. A partir do nó k achar qual foi o nó i do passo 2 responsável pelo valor de seu rótulo definitivo. Suponha que tenha sido o nó h. Repetir este processo até que o nó i seja o nó origem s Os nós i encontrados em cada etapa deste processo de busca serão os nós intermediários do caminho mínimo entre s e t.
Exemplo para Caminho Ótimo Achar a distância mínima entre os nós S e T: 2 A C 8 7 2 1 2 S 3 2 E 10 T 4 1 7 4 6 B D 3
Algoritmo de Djisktra Resolução completa do exemplo de caminho mínimo
Algoritmo de Djisktra Distância mínima entre os nós S e T = 7 = Rótulo definitivo do nó T. Recuperação do caminho mínimo (ótimo): Valor do rótulo definitivo do nó T = 7 sendo o nó i responsável = E Valor do rótulo definitivo do nó E = 5 sendo o nó i responsável = B Valor do rótulo definitivo do nó B = 1 sendo o nó i responsável = S S E B T 1 4 2
Exercício Achar a distância mínima entre os nós S e T: 6 A D 3 1 1 2 2 3 4 3 B S E T 5 4 4 2 6 4 C F 10
Análise de Redes: Problema do Fluxo Máximo Histórico Em 1956 os matemáticos americanos Lester Randolph Ford (nascido em 23/09/1927) e Delbert Ray Fulkerson (14/08/1924-10/01/1976) propuseram em um trabalho conjunto o algoritmo para resolução do Problema de Fluxo Máximo. Figura 7. Lester Randolph Ford, Jr. . Figura 8. Delbert Ray Fulkerson. .
Análise de Redes: Problema do Fluxo Máximo Rede: Formada por duas entidades - Nós, Arcos Interesse: Comportamento da Variável Fluxo Exemplos:
Problema de Fluxo Máximo Notação: Nó fonte: S Nó destino: T Fluxo no arco (i,j): Fij = quantidade de produto no arco (i,j) Kij = capacidade do arco (i,j) = maior fluxo possível no arco (i,j) Restrições envolvidas: Há conservação de fluxo nos nós. Há limitação do valor de fluxo nos arcos. Observações: O método simplex resolve este problema. Método mais eficiente: Ford &Fulkerson.
Problema de Fluxo Máximo Seja a rede abaixo. Deseja-se achar o valor do fluxo máximo que pode ser enviado do nó S ao nó T, respeitando as restrições de capacidade nos arcos e a conservação de fluxo nos nós. Sejam Kij (ou Cij) as restrições de fluxo (capacidade) no arco (i, j) 1 F S T F 2
Modelo de Programação Linear • Max Z = F • F S1 + FS2 = F (1) • F12 + F 1T = FS1 + F21 (2) • s. a: F21 + F2T = FS2 + F12 (3) • F1T + F2T = F (4) • 0 ≤ Fij ≤ Kij (5) • Restrição (1) representa a conservação de fluxo no nó fonte S. • Restrições (2) e (3) representam a conservação de fluxo nos nós intermediários 1 e 2. • Restrição (4) representa a conservação de fluxo no nó destino T. • Restrição (5) restringe os fluxos a serem não-negativos e respeitarem os limites de capacidade nos arcos.
Problema de Fluxo Máximo Dada uma rede orientada formada por arcos onde há restrições de capacidade, deseja-se enviar a maior quantidade (fluxo) possível de um produto a partir de um nó fonte (S) para um nó destino (T). Fluxo de produto pode ser fluxo de eletricidade, de água, de informação, ou de veículos, entre outros. Extensões: Rede não-orientada Múltiplas fontes e múltiplos destinos
Problema de Fluxo Máximo • Conceitos Básicos • Arcos Forward para o nó i: todo arco que sai do nó i. • Arcos Backward para o nó i: todo arco que entra no nó i. • Caminho entre o nó fonte e o nó destino: sequência de arcos que se inicia no nó fonte S e termina no nó destino T. • Ciclo é um caminho cujos nós inicial e final são os mesmos. • Seja N = conjunto de todos os nós da rede. Um Corte separando a fonte S do destino T é uma partição dos nós da rede em dois subconjuntos denotando por S aquele que contém o nó S e por Saquele que contém o nó T.
Problema de Fluxo Máximo Exemplos: Seja a rede anteriormente considerada: Nó 1: arcos Forward = {(1,2),(1,T)}, arcos Backward = {(S,1),(2,1)} Caminho: (S,1),(1,2),(2,T) Corte: S = {S,1,2}, S = {T} capacidade = K1T + K2T S = {S,2}, S = {1,T} capacidade = KS1 + K21 + K2T 1 F S T F 2
Problema de Fluxo Máximo • Resultados Importantes: • O corte mínimo é aquele corte com o menor valor de capacidade associado. • Excluindo os arcos de um corte da rede não há caminho entre os nós S e T nenhum fluxo ocorrerá entre S e T. • Todo fluxo entre S e T deve se dar pelos arcos de um corte o valor do fluxo é limitado pela capacidade do corte. • Lema 1: • Se F é o fluxo da fonte ao destino e (S,S) é um corte o valor de F é menor ou igual a capacidade daquele corte (S,S).
Problema de Fluxo Máximo Consequências: Todo fluxo viável da fonte ao destino não pode exceder a capacidade de um corte qualquer. O fluxo máximo na rede é limitado pela capacidade do corte mínimo. Teorema do Fluxo Máximo e do Corte Mínimo O valor do fluxo máximo numa rede é igual a capacidade do corte mínimo. Usando o teorema do fluxo máximo e corte mínimo pode-se obter o valor do fluxo máximo. Basta encontrar as capacidades de todos os cortes existentes na rede e escolher o menor valor de capacidade.