SlideShare uma empresa Scribd logo
SMA*
Fernando Simeone
Mestrado em Ciência da Computação
Universidade Federal de Lavras
!
Projeto e Análise de Algoritmos (2014/2)
Tópicos
• Introdução
• O algoritmo
• Desempenho
• Considerações finais
• Referências
Introdução
Introdução
Introdução
• O problema de memória do algoritmo A*;
Introdução
• O problema de memória do algoritmo A*;
• SMA* (Simplified Memory-Bounded);
Introdução
• O problema de memória do algoritmo A*;
• SMA* (Simplified Memory-Bounded);
• Principais dificuldades:
Introdução
• O problema de memória do algoritmo A*;
• SMA* (Simplified Memory-Bounded);
• Principais dificuldades:
• Garantir a solução ótima;
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.
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)
O algoritmo
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
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
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
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
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
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
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
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
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
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)
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
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
+∞
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 (∞)
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 (∞)
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
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
O algoritmo
A
B
C
D
E
G H
K
10
10
10
10
10
8
8
16
8
8
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
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
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
Desempenho
Desempenho
Nós expandidos X memória
Desempenho
Nós expandidos X memória
Com +/- 32% da memória gasta pelo A* consegue efetuar o
mesmo número de expansões
Considerações Finais
Considerações Finais
A
B G
C D
E D
H D
D K
Considerações Finais
• Solução deve caber na memória;
A
B G
C D
E D
H D
D K
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
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
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
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
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.!
!
Obrigado
Dúvidas?

Mais conteúdo relacionado

Mais procurados

41949428 mercedez-pld
41949428 mercedez-pld41949428 mercedez-pld
41949428 mercedez-pld
Alfredo Gracida
 
Manual falhas diesel (1)
Manual falhas   diesel (1)Manual falhas   diesel (1)
Manual falhas diesel (1)
Jorge Alberto
 
Codigos falha vw constelation
Codigos falha vw constelationCodigos falha vw constelation
Codigos falha vw constelation
Geraldo Sebastian
 
cálculo de probabilidades
 cálculo de probabilidades cálculo de probabilidades
cálculo de probabilidades
luispetitt
 
73 ginga brasil
73 ginga brasil73 ginga brasil
73 ginga brasil
Nando Costa
 
Equalizer 2
Equalizer 2Equalizer 2
Equalizer 2
naranzeta
 
Skoda octavia 1.9
Skoda   octavia 1.9Skoda   octavia 1.9
Skoda octavia 1.9
Lucas Máximo
 
Manual eletronico-do-gol-power
Manual eletronico-do-gol-powerManual eletronico-do-gol-power
Manual eletronico-do-gol-power
Rodrigo Hoos
 
Nissan 2.5 euro5 a partir de 2013
Nissan 2.5 euro5 a partir de 2013Nissan 2.5 euro5 a partir de 2013
Nissan 2.5 euro5 a partir de 2013
Geraldo Sebastian
 
Diagrama do motor isb
Diagrama do motor isbDiagrama do motor isb
Diagrama do motor isb
andersonbarbosa151
 
Codigos de falhas volvo fh12 d12 a
Codigos de falhas volvo fh12 d12 aCodigos de falhas volvo fh12 d12 a
Codigos de falhas volvo fh12 d12 a
Edivaldo Veronese
 
Clare fischer harmonic exercises for piano
Clare fischer   harmonic exercises for pianoClare fischer   harmonic exercises for piano
Clare fischer harmonic exercises for piano
julianjaramillo28
 
Apostila de Teoria musical
Apostila de Teoria musicalApostila de Teoria musical
Apostila de Teoria musical
jaconiasmusical
 

Mais procurados (13)

41949428 mercedez-pld
41949428 mercedez-pld41949428 mercedez-pld
41949428 mercedez-pld
 
Manual falhas diesel (1)
Manual falhas   diesel (1)Manual falhas   diesel (1)
Manual falhas diesel (1)
 
Codigos falha vw constelation
Codigos falha vw constelationCodigos falha vw constelation
Codigos falha vw constelation
 
cálculo de probabilidades
 cálculo de probabilidades cálculo de probabilidades
cálculo de probabilidades
 
73 ginga brasil
73 ginga brasil73 ginga brasil
73 ginga brasil
 
Equalizer 2
Equalizer 2Equalizer 2
Equalizer 2
 
Skoda octavia 1.9
Skoda   octavia 1.9Skoda   octavia 1.9
Skoda octavia 1.9
 
Manual eletronico-do-gol-power
Manual eletronico-do-gol-powerManual eletronico-do-gol-power
Manual eletronico-do-gol-power
 
Nissan 2.5 euro5 a partir de 2013
Nissan 2.5 euro5 a partir de 2013Nissan 2.5 euro5 a partir de 2013
Nissan 2.5 euro5 a partir de 2013
 
Diagrama do motor isb
Diagrama do motor isbDiagrama do motor isb
Diagrama do motor isb
 
Codigos de falhas volvo fh12 d12 a
Codigos de falhas volvo fh12 d12 aCodigos de falhas volvo fh12 d12 a
Codigos de falhas volvo fh12 d12 a
 
Clare fischer harmonic exercises for piano
Clare fischer   harmonic exercises for pianoClare fischer   harmonic exercises for piano
Clare fischer harmonic exercises for piano
 
Apostila de Teoria musical
Apostila de Teoria musicalApostila de Teoria musical
Apostila de Teoria musical
 

Mais de Fernando Simeone

Computacao Numérica
Computacao NuméricaComputacao Numérica
Computacao Numérica
Fernando Simeone
 
Hierarquia de Chomsky
Hierarquia de ChomskyHierarquia de Chomsky
Hierarquia de Chomsky
Fernando Simeone
 
Algoritmos aproximativos
Algoritmos aproximativosAlgoritmos aproximativos
Algoritmos aproximativos
Fernando Simeone
 
Algoritmo Counting sort
Algoritmo Counting sortAlgoritmo Counting sort
Algoritmo Counting sort
Fernando Simeone
 
Javascript
JavascriptJavascript
Javascript
Fernando Simeone
 
Guia da Startup
Guia da StartupGuia da Startup
Guia da Startup
Fernando Simeone
 

Mais de Fernando Simeone (6)

Computacao Numérica
Computacao NuméricaComputacao Numérica
Computacao Numérica
 
Hierarquia de Chomsky
Hierarquia de ChomskyHierarquia de Chomsky
Hierarquia de Chomsky
 
Algoritmos aproximativos
Algoritmos aproximativosAlgoritmos aproximativos
Algoritmos aproximativos
 
Algoritmo Counting sort
Algoritmo Counting sortAlgoritmo Counting sort
Algoritmo Counting sort
 
Javascript
JavascriptJavascript
Javascript
 
Guia da Startup
Guia da StartupGuia da Startup
Guia da Startup
 

Último

Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 

Último (6)

Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 

Algoritmo SMA*

  • 1. SMA* Fernando Simeone Mestrado em Ciência da Computação Universidade Federal de Lavras ! Projeto e Análise de Algoritmos (2014/2)
  • 2. Tópicos • Introdução • O algoritmo • Desempenho • Considerações finais • Referências
  • 5. Introdução • O problema de memória do algoritmo A*;
  • 6. Introdução • O problema de memória do algoritmo A*; • SMA* (Simplified Memory-Bounded);
  • 7. Introdução • O problema de memória do algoritmo A*; • SMA* (Simplified Memory-Bounded); • Principais dificuldades:
  • 8. Introdução • O problema de memória do algoritmo A*; • SMA* (Simplified Memory-Bounded); • Principais dificuldades: • Garantir a solução ótima;
  • 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. 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)
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 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. 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. 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
  • 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
  • 37. Considerações Finais • Solução deve caber na memória; A B G C D E D H D D K
  • 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. 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. 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. 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. 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.! !