Algoritmo SMA*
-
Upload
fernando-simeone -
Category
Technology
-
view
101 -
download
1
Transcript of Algoritmo SMA*
![Page 1: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/1.jpg)
SMA*Fernando Simeone
Mestrado em Ciência da Computação Universidade Federal de Lavras
!Projeto e Análise de Algoritmos (2014/2)
![Page 2: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/2.jpg)
Tópicos • Introdução
• O algoritmo
• Desempenho
• Considerações finais
• Referências
![Page 3: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/3.jpg)
Introdução
![Page 4: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/4.jpg)
Introdução
![Page 5: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/5.jpg)
Introdução• O problema de memória do algoritmo A*;
![Page 6: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/6.jpg)
Introdução• O problema de memória do algoritmo A*;
• SMA* (Simplified Memory-Bounded);
![Page 7: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/7.jpg)
Introdução• O problema de memória do algoritmo A*;
• SMA* (Simplified Memory-Bounded);
• Principais dificuldades:
![Page 8: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/8.jpg)
Introdução• O problema de memória do algoritmo A*;
• SMA* (Simplified Memory-Bounded);
• Principais dificuldades:
• Garantir a solução ótima;
![Page 9: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/9.jpg)
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.
![Page 10: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/10.jpg)
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
168
8
f(n) = g(n) + h(n)
![Page 11: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/11.jpg)
O algoritmo
![Page 12: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/12.jpg)
EntradasSMA*(grafo, v_inicial, v_final)
A
B
C
D
E
G H
K
10
10
10
10
10
8
8
168
8
![Page 13: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/13.jpg)
HeurísticaDistância mínima entre dois pontos:
A
B
C
D
E
G H
K
10
10
10
10
10
8
8
168
8
12
![Page 14: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/14.jpg)
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
88
168
8
Sucessores
A
12A
![Page 15: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/15.jpg)
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
88
168
8
Sucessores
A
12A
![Page 16: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/16.jpg)
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
88
168
8
Sucessores
A
12A
n
![Page 17: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/17.jpg)
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
88
168
8
Sucessores
A
12
n
A
B10 + 5 = 15
s
![Page 18: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/18.jpg)
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
88
168
8
Sucessores
A
12
n
A
B15
s
![Page 19: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/19.jpg)
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
88
168
8
Sucessores
A
12
n
A
B15
![Page 20: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/20.jpg)
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
88
168
8
Sucessores
An
A
B G
1215
s
8 + 5 = 13
![Page 21: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/21.jpg)
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
88
168
8
Sucessores
An
A
B G
1315
s
13
(15)
![Page 22: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/22.jpg)
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
88
168
8
Sucessores
A
A
G
13 (15)
n
13
![Page 23: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/23.jpg)
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
88
168
8
Sucessores
An
s
A
G
H
13 (15)13
+∞
![Page 24: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/24.jpg)
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
88
168
8
Sucessores
An
s
A
G
H
13 (15)
+∞
13 (∞)
![Page 25: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/25.jpg)
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
88
168
8
Sucessores
An
A
G
13 (15)
13 (∞)
![Page 26: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/26.jpg)
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
88
168
8
Sucessores
An
s
A
G
D
13 (15)
13 (∞)
24 + 0 = 24
![Page 27: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/27.jpg)
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
88
168
8
Sucessores
An
s
A
G
D
13 (15)
24 (∞)
24
![Page 28: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/28.jpg)
O algoritmo
A
B
C
D
E
G H
K
10
10
10
10
10
88
168
8
![Page 29: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/29.jpg)
O algoritmo
A
B G
13 (15)15 24 (∞)
A
B
C
D
E
G H
K
10
10
10
10
10
88
168
8
![Page 30: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/30.jpg)
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
88
168
8
![Page 31: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/31.jpg)
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
88
168
8
![Page 32: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/32.jpg)
Desempenho
![Page 33: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/33.jpg)
Desempenho
Nós expandidos X memória
![Page 34: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/34.jpg)
Desempenho
Nós expandidos X memóriaCom +/- 32% da memória gasta pelo A* consegue efetuar o mesmo número de expansões
![Page 35: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/35.jpg)
Considerações Finais
![Page 36: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/36.jpg)
Considerações Finais A
B G
C D
E D
H D
D K
![Page 37: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/37.jpg)
Considerações Finais • Solução deve caber na memória;
A
B G
C D
E D
H D
D K
![Page 38: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/38.jpg)
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
![Page 39: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/39.jpg)
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
![Page 40: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/40.jpg)
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
![Page 41: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/41.jpg)
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
![Page 42: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/42.jpg)
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.!!
![Page 43: Algoritmo SMA*](https://reader033.fdocumentos.com/reader033/viewer/2022042518/55b36697bb61ebd66d8b4574/html5/thumbnails/43.jpg)
ObrigadoDúvidas?