Algoritmo SMA*

523 visualizações

Publicada em

Apresentação sobre o algoritmo SMA* apresentada no 2º semestre de 2014, como um dos requisitos da disciplina de Projeto e Análise de Algoritmos, no Mestrado em Ciência da Computação, pela Universidade Federal de Lavras (UFLA). Disciplina ministrada pelo professor Dr. Sanderson L. Gonzaga de Oliveira.

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
523
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
15
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Algoritmo SMA*

  1. 1. SMA* Fernando Simeone Mestrado em Ciência da Computação Universidade Federal de Lavras ! Projeto e Análise de Algoritmos (2014/2)
  2. 2. Tópicos • Introdução • O algoritmo • Desempenho • Considerações finais • Referências
  3. 3. Introdução
  4. 4. Introdução
  5. 5. Introdução • O problema de memória do algoritmo A*;
  6. 6. Introdução • O problema de memória do algoritmo A*; • SMA* (Simplified Memory-Bounded);
  7. 7. Introdução • O problema de memória do algoritmo A*; • SMA* (Simplified Memory-Bounded); • Principais dificuldades:
  8. 8. Introdução • O problema de memória do algoritmo A*; • SMA* (Simplified Memory-Bounded); • Principais dificuldades: • Garantir a solução ótima;
  9. 9. Introdução • O problema de memória do algoritmo A*; • SMA* (Simplified Memory-Bounded); • Principais dificuldades: • Garantir a solução ótima; • Evitar expansão repetida de nós esquecidos.
  10. 10. Introdução • O algoritmo estima o custo de uma solução A B C D E G H K 10 10 10 10 10 8 8 16 8 8 f(n) = g(n) + h(n)
  11. 11. O algoritmo
  12. 12. Entradas SMA*(grafo, v_inicial, v_final) A B C D E G H K 10 10 10 10 10 8 8 16 8 8
  13. 13. Heurística Distância mínima entre dois pontos: A B C D E G H K 10 10 10 10 10 8 8 16 8 8 12
  14. 14. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A 12 A
  15. 15. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila A A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A 12 A
  16. 16. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila A A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A 12 A n
  17. 17. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila A A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A 12 n A B 10 + 5 = 15 s
  18. 18. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila A B A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A 12 n A B 15 s
  19. 19. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila A B A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A 12 n A B 15
  20. 20. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila A B A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A n A B G 12 15 s 8 + 5 = 13
  21. 21. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila A G B A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A n A B G 13 15 s 13 (15)
  22. 22. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila G B A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A A G 13 (15) n 13
  23. 23. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila G B A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A n s A G H 13 (15) 13 +∞
  24. 24. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila G B H A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A n s A G H 13 (15) +∞ 13 (∞)
  25. 25. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila G B H A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A n A G 13 (15) 13 (∞)
  26. 26. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila G B H A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A n s A G D 13 (15) 13 (∞) 24 + 0 = 24
  27. 27. SMA* (grafo, v_inicial, v_final) 1 adicionar v_inicial na fila 2 loop do 3 if fila está vazia return falha 4 n = nó mais profundo de menor custo na fila 5 if n == v_final return sucesso 6 s = próximo sucessor de n 7 if s != v_final and está na maxima profundidade 8 f(s) = +∞ 9 else 10 f(s) = max( f(n), g(s) + h(s) ) 11 if todos sucessores de n gerados 12 atualizar custo dos ancestrais de n 13 if todos os sucessores de n estão na memória 14 remover n da fila 15 if memoria está cheia 16 deletar nó mais raso com maior custo 17 removê-lo da lista de sucessores de seu pai 18 inserir seu pai na fila, se necessário 19 20 inserir s na fila 21 end O algoritmo Fila G B D H A B C D E G H K 10 10 10 10 10 8 8 16 8 8 Sucessores A n s A G D 13 (15) 24 (∞) 24
  28. 28. O algoritmo A B C D E G H K 10 10 10 10 10 8 8 16 8 8
  29. 29. O algoritmo A B G 13 (15) 15 24 (∞) A B C D E G H K 10 10 10 10 10 8 8 16 8 8
  30. 30. O algoritmo A B G 13 (15) 15 24 (∞) A B C 15 ∞ 13 (24) A B C D E G H K 10 10 10 10 10 8 8 16 8 8
  31. 31. O algoritmo A B G 13 (15) 15 24 (∞) A B C 15 ∞ 13 (24) A B D 13 (24) 20 20 A B C D E G H K 10 10 10 10 10 8 8 16 8 8
  32. 32. Desempenho
  33. 33. Desempenho Nós expandidos X memória
  34. 34. Desempenho Nós expandidos X memória Com +/- 32% da memória gasta pelo A* consegue efetuar o mesmo número de expansões
  35. 35. Considerações Finais
  36. 36. Considerações Finais A B G C D E D H D D K
  37. 37. Considerações Finais • Solução deve caber na memória; A B G C D E D H D D K
  38. 38. Considerações Finais • Solução deve caber na memória; • Consequentemente, nem sempre a solução será ótima; A B G C D E D H D D K
  39. 39. Considerações Finais • Solução deve caber na memória; • Consequentemente, nem sempre a solução será ótima; • Utiliza no máximo a memória gasta pelo A*; A B G C D E D H D D K
  40. 40. Considerações Finais • Solução deve caber na memória; • Consequentemente, nem sempre a solução será ótima; • Utiliza no máximo a memória gasta pelo A*; • Quando houver memória para armazenar toda a árvore, executará otimamente eficiente; A B G C D E D H D D K
  41. 41. Considerações Finais • Solução deve caber na memória; • Consequentemente, nem sempre a solução será ótima; • Utiliza no máximo a memória gasta pelo A*; • Quando houver memória para armazenar toda a árvore, executará otimamente eficiente; • Em uma implementação real, há outros pontos a serem considerados. A B G C D E D H D D K
  42. 42. Referências Russell, S. (1992). Efficient memory-bounded search methods. In Proceedings of the 10th European Conference on Artificial Intelligence, ECAI ’92, pages 1–5, New York, NY, USA. John Wiley & Sons, Inc.! ! Russell, S. J. and Norvig, P. (2003). Artificial intelligence: A modern approach. pages 101–111. Pearson Education, 2 edition.! !
  43. 43. Obrigado Dúvidas?

×