Baixe o app para aproveitar ainda mais
Prévia do material em texto
Otimização em Redes Allexandre Fortes S. Reis Coordenadoria de Engenharia de Produção Departamento de Engenharia Mecânica Campus Santo Antônio Universidade Federal de São João Del Rei 2 de outubro de 2017 Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 1 / 24 Conteúdo 1 Algoritmo de Bellman-Ford Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 2 / 24 Algoritmo de Ford-Moore-Bellman Quem é(são) o(s) autor(es)? Há registros históricos de que este algoritmo foi proposto por Shimble em 1955; Alguns autores denominam o algoritmo de Ford-Moore-Bellman, em home- nagem a outros três autores que propuseram o mesmo algoritmo em anos diferentes: Lester Ford (1956); Edward Moore (1957); Richard Bellman (1958). Comumente chamado de Algoritmo de Bellman-Ford Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 3 / 24 Algoritmo de Bellman-Ford Princípio Ao invés de fechar um vértice por iteração, como o algoritmo de Dijkstra, exa- mina todos os vértices de um grafo orientado por iteração até que atualizações não sejam possíveis; Dessa forma, trabalha com Rotulamento Modificado; Determina o menor caminho entre um vértice de origem e todos os demais vértices do grafo; Com esta estratégia, é possível calcular caminhos mínimos em grafos com arestas de peso negativo; Assim como o algoritmo de Dijkstra, baseia-se no princípio de relaxação: uma aproximação da distância da origem até cada vértice é gradualmente atuali- zada por valores mais precisos até que a solução ótima seja atingida. Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 4 / 24 Algoritmo de Bellman-Ford Princípio �Um caminho de i para j com k+1 arestas pode ser obtido a partir de um caminho de i para j com k arestas�; Se, em alguma iteração do algoritmo os rótulos dos vértices permane- cerem inalterados, não haverá atualizações nas próximas iterações e o algoritmo pode terminar; Entretanto, se houver atualizações na última iteração do algoritmo, é sinal de que há pelo menos um ciclo negativo no grafo. Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 5 / 24 Algoritmo de Bellman-Ford Terminologia N(i): Conjunto de vértices antecessores do vértice atual i; d(i): Vetor que armazena a distância entre o vértice de origem e o vértice i; p(i): Vetor que armazena o índice do vértice anterior ao vértice i, no caminho cuja distância está armazenada em d(i); altera: variável booleana que indica se houve alguma atualização na iteração atual. Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 6 / 24 Algoritmo de Bellman-Ford Entrada: Grafo G = (V,E), matriz de distâncias D = [dij ], ∀(i, j) ∈ E, origem o = 0 1 p(o)← o; 2 para i← 1 até n faça 3 se ∃(o, i) então 4 d(i)← doi; 5 p(i)← o; 6 senão 7 d(i)←∞; 8 p(i)← ∅; 9 fim 10 fim 11 para k ← 1 até n− 1 faça 12 altera ← falso; 13 para i← 1 até n faça 14 para j ∈ N(i) faça 15 se d(i) > d(j) + dji então 16 d(i)← d(j) + dji; 17 p(i)← j; 18 altera ← verdadeiro; //indica que houve alteração 19 fim 20 fim 21 fim 22 se altera = falso então 23 k ← n 24 fim 25 fim Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 7 / 24 Algoritmo de Bellman-Ford Detecção de Ciclos de Custo Negativo Em caminhos sem ciclos, o caminho mais longo consiste em n− 1 arestas, ou iterações no laço principal do algoritmo; Se na n-ésima iteração do algoritmo alguma atualização de distâncias for feita é detectado o ciclo. Exemplo de ciclo negativo entre os vértices 4 e 5. Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 8 / 24 Algoritmo de Bellman-Ford Detecção de Ciclos de Custo Negativo Em caminhos sem ciclos, o caminho mais longo consiste em n− 1 arestas, ou iterações no laço principal do algoritmo; Se na n-ésima iteração do algoritmo alguma atualização de distâncias for feita é detectado o ciclo. Exemplo de ciclo negativo entre os vértices 4 e 5. Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 8 / 24 Exemplo Grafo G. O vértice origem será `1 '. nó 2 3 4 5 6 p() - - - - - d() - - - - - Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 9 / 24 Exemplo Vetores após a inicialização do algoritmo. nó 2 3 4 5 6 p() 1 1 ∅ ∅ ∅ d() 1 3 ∞ ∞ ∞ Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 10 / 24 Exemplo k = 1 i = 2, N = {1} j = 1, d(1) + d12 = 1 nó 2 3 4 5 6 p() 1 1 ∅ ∅ ∅ d() 1 3 ∞ ∞ ∞ Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 11 / 24 Exemplo k = 1 i = 3, N = {1, 2} j = 1, d(1) + d13 = 3 j = 2, d(2) + d23 = 2 nó 2 3 4 5 6 p() 1 2 ∅ ∅ ∅ d() 1 2 ∞ ∞ ∞ Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 12 / 24 Exemplo k = 1 i = 4, N = {2, 3, 5} j = 2, d(2) + d24 = 4 j = 3, d(3) + d34 = 4 j = 5, d(5) + d54 =∞ nó 2 3 4 5 6 p() 1 2 2 ∅ ∅ d() 1 2 4 ∞ ∞ Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 13 / 24 Exemplo k = 1 i = 5, N = {2, 6} j = 2, d(2) + d25 = 3 j = 6, d(6) + d65 =∞ nó 2 3 4 5 6 p() 1 2 2 2 ∅ d() 1 2 4 3 ∞ Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 14 / 24 Exemplo k = 1 i = 6, N = {4} j = 4, d(4) + d46 = 6 nó 2 3 4 5 6 p() 1 2 2 2 4 d() 1 2 4 3 6 Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 15 / 24 Exemplo k = 2 i = 2, N = {1} j = 1, d(1) + d12 = 1 nó 2 3 4 5 6 p() 1 2 2 2 4 d() 1 2 4 3 6 Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 16 / 24 Exemplo k = 2 i = 3, N = {1, 2} j = 1, d(1) + d13 = 3 j = 2, d(2) + d23 = 2 nó 2 3 4 5 6 p() 1 2 2 2 4 d() 1 2 4 3 6 Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 17 / 24 Exemplo k = 2 i = 4, N = {2, 3, 5} j = 2, d(2) + d24 = 4 j = 3, d(3) + d34 = 4 j = 5, d(5) + d54 = 0 nó 2 3 4 5 6 p() 1 2 5 2 4 d() 1 2 0 3 6 Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 18 / 24 Exemplo k = 2 i = 5, N = {2, 6} j = 2, d(2) + d25 = 3 j = 6, d(6) + d65 = 9 nó 2 3 4 5 6 p() 1 2 5 2 4 d() 1 2 0 3 6 Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 19 / 24 Exemplo k = 2 i = 6, N = {4} j = 4, d(4) + d46 = 2 nó 2 3 4 5 6 p() 1 2 5 2 4 d() 1 2 0 3 2 Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 20 / 24 Exemplo k = 3 Não há alterações, chega-se ao fim do algoritmo nó 2 3 4 5 6 p() 1 2 5 2 4 d() 1 2 0 3 2 Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 21 / 24 Exercício Execute o Algoritmo de Bellman-Ford no grafo abaixo. Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 22 / 24 Dúvidas? Valar joll oris Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 23 / 24 Referências (1) Notas de aula Professor Dr. Marco Antônio Carvalho (DECOM/UFOP); (2) Notas de aula Professor Dr. Gustavo Peixoto (DECOM/UFOP); (3) Goldbarg, Marco e Goldbarg, Elizabeth. Grafos: Conceitos, algoritmos e apli- cações (2012); (4) Taha, Hamdy. Pesquisa Operacional (2008); Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 2 de outubro de 2017 24 / 24 Algoritmo de Bellman-Ford
Compartilhar