Professional Documents
Culture Documents
Nesta aula so descritas algumas estratgias de busca informada em espaos de estados que so usadas quando h informaes especficas sobre o problema Em geral, as informaes especficas tendem a melhorar o processo de busca
augusto@usp.br http://dcm.fmrp.usp.br/~augusto
Inteligncia Artificial
Busca Informada
A busca em grafos pode atingir uma complexidade elevada devido ao nmero de alternativas Estratgias de busca informada utilizam conhecimento especfico do problema (alm da definio do prprio problema) para encontrar solues de forma mais eficiente do que a busca sem informaes A abordagem geral que utilizaremos denominada busca pela melhor escolha (best-first search) O termo busca pela melhor escolha tem seu uso consagrado mas ele inexato
Se fosse realmente possvel expandir o melhor n primeiro, no haveria a necessidade de se realizar uma busca; seria um caminho direto ao objetivo O que podemos fazer escolher o n que parece ser o melhor de acordo com a funo de avaliao Se a funo de avaliao for precisa, esse ser de fato o melhor n; caso contrrio, a busca pode se perder
2
Busca Informada
Na busca best-first, a escolha do n n a ser expandido efetuada com base em uma funo de avaliao f(n)
Em geral, o n n com o menor valor f(n) selecionado para a expanso, uma vez que a funo de avaliao mede a distncia de n at o objetivo, ou seja, at um n final
A forma mais comum de adicionar conhecimento do problema ao algoritmo de busca (da o nome busca informada) e, portanto, um componente fundamental dos algoritmos de busca best-first uma funo heurstica, denotada por h(n)
h(n) = custo estimado do caminho mais econmico partindo do n n e chegando a um n final
As funes heursticas so especficas do problema, exceto pela seguinte restrio que se aplica a todos
h(n)=0 se n um n final
Funo Heurstica
Heurstica (arte de descobrir): conhecimentos que permitem uma soluo rpida para algum problema
Heureca (Eu encontrei, Arquimedes)
Uma heurstica uma funo que quando aplicada a um estado retorna um nmero que corresponde a uma estimativa da qualidade (mrito) do estado atual em relao a um estado final Em outras palavras, a heurstica nos informa aproximadamente quo longe o estado atual est de um estado final
Heursticas podem subestimar ou superestimar a qualidade de um estado Heursticas que apenas subestimam so altamente desejveis e so chamadas admissveis
i.e. nmero menores so melhores
Heursticas admissveis so otimistas, pois estimam que o custo da soluo de um problema seja menor do que na realidade
4
Estado Atual
1 2 4 5 7 1 4 7 2 5 8
3 6 8 3 6 = = = = = = =
Estado Final
3
2 posies
3 2 4 5 7 1 1 4 7 2 5 8
8 6 8 3 6 1
3 posies 3 posies
Estado Final
Exerccio
Encontre o caminho de s at t usando busca gulosa pela melhor escolha
h(s)=9 2
h(e)=7
s
2 5 h(a)=5
a
2 h(f)=4 2
h(c)=4 3
b
h(b)=4
f
2
d
h(d)=3 3
g
2
h(g)=2
h(t)=0
9
h(e)=7
s
2 5 h(a)=5
a
2 h(f)=4 2
h(c)=4 3
b
h(b)=4
f
2
d
h(d)=3 3
g
2
h(g)=2
h(t)=0
10
h(e)=7
s
h(a)=5
h(e)=7
2 5 h(a)=5
a
2 h(f)=4 2
h(c)=4 3
b
h(b)=4
f
2
d
h(d)=3 3
g
2
h(g)=2
h(t)=0
11
h(e)=7
s
h(a)=5
h(e)=7
2 5 h(a)=5
a
2 h(f)=4 2
h(b)=4
b
h(c)=4 3
b
h(b)=4
f
2
d
h(d)=3 3
g
2
h(g)=2
h(t)=0
12
h(e)=7
s
h(a)=5
h(e)=7
2 5 h(a)=5
a
2 h(f)=4 2
h(b)=4
b
h(c)=4
c
3
b
h(b)=4
f
2
h(c)=4
d
h(d)=3 3
g
2
h(g)=2
h(t)=0
13
h(e)=7
s
h(a)=5
h(e)=7
2 5 h(a)=5
a
2 h(f)=4 2
h(b)=4
b
h(c)=4
c
3
b
h(b)=4
f
2
h(c)=4
h(d)=3
d
h(d)=3 3
g
2
h(g)=2
h(t)=0
14
h(e)=7
s
h(a)=5
h(e)=7
2 5 h(a)=5
a
2 h(f)=4 2
h(b)=4
b
h(c)=4
c
3
b
h(b)=4
f
2
h(c)=4
h(d)=3
d
h(d)=3 3
g
2
h(g)=2
h(t)=0
h(t)=0
15
f(Arad)=h(Arad)
Arad 366
17
Arad 366
Sibiu 253
Timisoara 329
Zerind 374
18
Arad 366
Sibiu 253
Timisoara 329
Zerind 374
Fagaras 176
Oradea 380
19
Arad 366
Sibiu 253
Timisoara 329
Zerind 374
Fagaras 176
Oradea 380
Bucharest 0
Custo da soluo encontrada A-S-F-B = 450 Custo da soluo tima A-S-RV-P-B = 418
20
O que sabemos?
Busca de custo uniforme (uniform cost)
Similar busca em largura Mede o custo de cada n, desde a raiz da busca tima e completa Pode ser muito lenta
Seria possvel combinar estas estratgias para criar um algoritmo timo e completo que seja tambm muito rpido?
21
s
g(a)=2 a
s e g(e)=2
g(a)=2 a g(b)=4 b
s e g(e)=2
g(a)=2 a g(b)=4 b
s e g(e)=2 f g(f)=7
s
h(a)=5 a
s e h(e)=7
h(a)=5 a h(b)=4 b
s e h(e)=7
h(a)=5 a h(b)=4 b h(c)=4 c
s e h(e)=7
Intuio: Expanda o n que aparenta ser o mais prximo do objetivo, onde a estimativa da distncia at o objetivo h(n)
22
Busca A*
Coloque os estados na fila em ordem de custo total at o objetivo, f(n)
Resumidamente:
g(n) o custo at chegar ao n n h(n) a distncia estimada do n n at um n final f(n) = g(n) + h(n)
Podemos imaginar f(n) como uma estimativa de custo da soluo mais barata que passa pelo n n Note que possvel usar os algoritmos de busca em largura ou de custo uniforme alterando apenas a estratgia na qual os ns so colocados na fila Se a heurstica utilizada nunca superestima a distncia at o n final (heurstica otimista), ento o algoritmo A* timo e completo
23
Busca A*
conveniente relembrar que uma estratgia de busca definida por meio da ordem de expanso dos ns Na estratgia de busca best-first a idia bsica prosseguir com a busca sempre a partir do n mais promissor A Busca pela Melhor Escolha (best-first) um refinamento da busca em largura, que em sua forma completa tambm conhecido como busca A*
Ambas estratgias comeam pelo n inicial e mantm um conjunto de caminhos candidatos Busca em largura expande o caminho candidato mais curto Best-First refina este princpio calculando uma estimativa heurstica para cada candidato e escolhe expandir o melhor candidato segundo esta estimativa
24
A*
Vamos assumir que h um custo envolvido entre cada arco:
s(X,Y,C) que verdadeira se h um movimento permitido no espao de estados do n X para o n Y ao custo C; neste caso, Y um sucessor de X
s
g(n)
Sejam dados um n inicial s e um n final t Seja o estimador heurstico a funo f tal que para cada n n no espao, f(n) estima a dificuldade de n, ou seja, f(n) o custo do caminho mais barato de s at t via n A funo f(n) ser construda como: f(n) = g(n) + h(n)
g(n) uma estimativa do custo do caminho timo de s at n h(n) uma estimativa do custo do caminho timo de n at t
n
h(n)
25
A*
Quando um n n encontrado pelo processo de busca temos a seguinte situao
Um caminho de s at n j foi encontrado e seu custo pode ser calculado como a soma dos custos dos arcos no caminho
Este caminho no necessariamente um caminho timo de s at n (pode existir um caminho melhor de s at n ainda no encontrado pela busca) mas seu custo serve como uma estimativa g(n) do custo mnimo de s at n
O outro termo, h(n) mais problemtico pois o mundo entre n e t no foi ainda explorado
Portanto, h(n) tipicamente uma heurstica, baseada no conhecimento geral do algoritmo sobre o problema em questo Como h depende do domnio do problema, no h um mtodo universal para construir h
26
A*
Vamos estudar o algoritmo best-first em sua forma completa A* que minimiza o custo total estimado da soluo O processo de busca pode ser visto como um conjunto de sub-processos, cada um explorando sua prpria alternativa, ou seja, sua prpria sub-rvore Sub-rvores tm sub-rvores que so exploradas por subprocessos dos sub-processos, etc Dentre todos os processos apenas um encontra-se ativo a cada momento: aquele que lida com a alternativa atual mais promissora (aquela com menor valor f) Os processos restantes aguardam silenciosamente at que a estimativa f atual se altere e alguma outra alternativa se torne mais promissora Ento, a atividade comutada para esta alternativa
27
A*
Podemos imaginar o mecanismo de ativaodesativao da seguinte forma
O processo trabalhando na alternativa atual recebe um oramento limite Ele permanece ativo at que o oramento seja exaurido Durante o perodo em que est ativo, o processo continua expandindo sua sub-rvore e relata uma soluo caso um n final seja encontrado O oramento limite para essa execuo definido pela estimativa heurstica da alternativa competidora mais prxima
28
A*
9 2
s
Distncia entre duas cidades atravs de um caminho (rodovia) 2 5 5
a
2 2
f
2
d
3
g
2
t
29
A*
Dado um mapa, o objetivo encontrar o caminho mais curto entre a cidade inicial s e a cidade destino t Para estimar o custo do caminho restante da cidade X at a cidade t utilizaremos a distncia em linha reta denotada por dist(X,t) f(X) = g(X) + h(X) = = g(X) + dist(X,t) Note que quando X cidade inicial (X=s) ento g(s)=0
f(s)=0+9=9 9 2
s
2 5 5
a
2 2
4 3 3
f
2
d
3
g
2
t
30
A*
Neste exemplo, podemos imaginar a busca A* consistindo em dois processos, cada um explorando um dos caminhos alternativos Processo 1 explora o caminho via a Processo 2 explora o caminho via e
9 2
s
2 5 5
a
2 2
4 3 3
f
2
d
3
g
2
t
31
A*
f(a)=g(a)+dist(a,t)=2+5=7 f(e)=g(e)+dist(e,t)=2+7=9 Como o valor-f de a menor do que de e, o processo 1 (busca via a) permanece ativo enquanto o processo 2 (busca via e) fica em estado de espera
3 9 2
f(e)=9
s
2 5 5
f(a)=7 2
4 3
f
2
d
3
g
2
t
32
A*
f(a)=g(a)+dist(a,t)=2+5=7 f(e)=g(e)+dist(e,t)=2+7=9 Como o valor-f de a menor do que de e, o processo 1 (busca via a) permanece ativo enquanto o processo 2 (busca via e) fica em estado de espera f(b)=g(b)+dist(b,t)=4+4=8
9 2
f(e)=9
s
2 5 5
f(a)=7 2
4 3 3
b
f(b)=8
f
2
d
3
g
2
t
33
A*
e 7 f(e)=9 f(a)=g(a)+dist(a,t)=2+5=7 s f(e)=g(e)+dist(e,t)=2+7=9 2 Como o valor-f de a menor do 5 que de e, o processo 1 (busca 5 a f(a)=7 via a) permanece ativo 2 enquanto o processo 2 (busca via e) fica em estado de espera 2 4 f 4 b 4 c f(b)=g(b)+dist(b,t)=4+4=8 f(c)=g(c)+dist(c,t)=6+4=10 f(b)=8 f(c)=10 2 3 Como f(e)<f(c) agora o processo 2 prossegue para a 2 g 3 d cidade f 2
3 9 2
t
34
A*
f(f)=g(f)+dist(f,t)=7+4=11 Como f(f)>f(c) agora o processo 2 espera e o processo 1 prossegue
9 2
f(e)=9
s
2 5 5
f(a)=7 2 f(f)=11
4 f(c)=10 3 3
b
f(b)=8
f
2
d
3
g
2
t
35
A*
f(f)=g(f)+dist(f,t)=7+4=11 Como f(f)>f(c) agora o processo 2 espera e o processo 1 prossegue f(d)=g(d)+dist(d,t)=9+3=12 Como f(d)>f(f) o processo 2 reinicia
9 2
f(e)=9
s
2 5 5
f(a)=7 2 f(f)=11
4 f(c)=10 3 3
b
f(b)=8
f
2
d
3 f(d)=12
g
2
t
36
A*
f(f)=g(f)+dist(f,t)=7+4=11 Como f(f)>f(c) agora o processo 2 espera e o processo 1 prossegue f(d)=g(d)+dist(d,t)=9+3=12 Como f(d)>f(f) o processo 2 reinicia chegando at o destino t f(g)=g(g)+dist(g,t)=9+2=11
3 9 2
f(e)=9
s
2 5 5
f(a)=7 2 f(f)=11
4 f(c)=10 3
b
f(b)=8
f
2
d
3 f(d)=12
g
2 f(g)=11
t
37
A*
f(f)=g(f)+dist(f,t)=7+4=11 Como f(f)>f(c) agora o processo 2 espera e o processo 1 prossegue f(d)=g(d)+dist(d,t)=9+3=12 Como f(d)>f(f) o processo 2 reinicia chegando at o destino t f(g)=g(g)+dist(g,t)=9+2=11 f(t)=g(t)+dist(t,t)=11+0=11
9 2
f(e)=9
s
2 5 5
f(a)=7 2 f(f)=11
4 f(c)=10 3 3
b
f(b)=8
f
2
d
3 f(d)=12
g
2 f(g)=11
f(t)=11
38
A*
A busca, comeando pelo n inicial continua gerando novos ns sucessores, sempre expandindo na direo mais promissora de acordo com os valores-f Durante este processo, uma rvore de busca gerada tendo como raiz o n inicial e o algoritmo A* continua expandindo a rvore de busca at que uma soluo seja encontrada
39
A*
s
9 2
s
2 5 5
a
2 2
4 3 3
f
2
d
3
g
2
t
40
A*
s
9 2
s
2 f(a)=7
f(e)=9 5
a
2 2
4 3 3
f
2
d
3
g
2
t
41
A*
s
9 2
s
2 f(a)=7
f(e)=9 5
a
2 2
f(b)=8
4 3 3
f
2
d
3
g
2
t
42
A*
s
9 2
s
2 f(a)=7
f(e)=9 5
a
2 2
f(b)=8
4 3 3
f
2
f(c)=10
c d
g
3 2
t
43
A*
s
9 2
s
2 f(a)=7
f(e)=9 5
a
2 2
f(b)=8
f(f)=11
4 3 3
f
2
f(c)=10
c d
g
3 2
t
44
A*
s
9 2
s
2 f(a)=7
f(e)=9 5
a
2 2
f(b)=8
f(f)=11
4 3 3
f
2
f(c)=10
c d
g
3 2
f(d)=12
t
45
A*
s
9 2
s
2 f(a)=7
f(e)=9 5
a
2 2
f(b)=8
f(f)=11
4 3
f
2
f(c)=10
f(g)=11 3
d
3
g
2
f(d)=12
t
46
A*
s
9 2
s
2 f(a)=7
f(e)=9 5
a
2 2
f(b)=8
f(f)=11
4 3
f
2
f(c)=10
f(g)=11 3
d
3
g
2
f(d)=12
f(t)=11
t
47
Oradea 71 Zerind 75 Arad 140 Sibiu 118 80 Timisoara 111 70 Mehadia 75 Dobreta h(n) Arad Bucharest Craiova Dobreta Eforie Fagaras Giurgiu Hirsova Iasi Lugoj Mehadia Neamt Oradea 120 Craiova 366 0 160 242 161 176 77 151 226 244 241 234 380 146 138 101 85 Urziceni 86 Lugoj Rimnieu Vilcea 97 Pitesti 211 142 98 Hirsova 99 Fagaras Vaslui 151 Neamt 87 Iasi 92
Arad 366=0+366
Bucharest 90 Giurgiu
Eforie
Pitesti 100 Rimnieu Vilcea 193 Sibiu Timisoara Urziceni Vaslui Zerind 253 329 80 199 374
49
Oradea 71 Zerind 75 Arad 140 Sibiu 118 80 Timisoara 111 70 Mehadia 75 Dobreta h(n) Arad Bucharest Craiova Dobreta Eforie Fagaras Giurgiu Hirsova Iasi Lugoj Mehadia Neamt Oradea 120 Craiova 366 0 160 242 161 176 77 151 226 244 241 234 380 146 138 101 85 Urziceni 86 Lugoj Rimnieu Vilcea 97 Pitesti 211 142 98 Hirsova 99 Fagaras Vaslui 151 Neamt 87 Iasi 92
Bucharest 90 Giurgiu
Eforie
Sibiu 393=140+253
Timisoara 447=118+329
Zerind 449=75+374
Pitesti 100 Rimnieu Vilcea 193 Sibiu Timisoara Urziceni Vaslui Zerind 253 329 80 199 374
50
Oradea 71 Zerind 75 Arad 140 Sibiu 118 80 Timisoara 111 70 Mehadia 75 Dobreta h(n) Arad Bucharest Craiova Dobreta Eforie Fagaras Giurgiu Hirsova Iasi Lugoj Mehadia Neamt Oradea 120 Craiova 366 0 160 242 161 176 77 151 226 244 241 234 380 146 138 101 85 Urziceni 86 Lugoj Rimnieu Vilcea 97 Pitesti 211 142 98 Hirsova 99 Fagaras Vaslui 151 Neamt 87 Iasi 92
Bucharest 90 Giurgiu
Eforie
Timisoara 447=118+329
Zerind 449=75+374
Fagaras 415=239+176
Oradea 671=291+380
Pitesti 100 Rimnieu Vilcea 193 Sibiu Timisoara Urziceni Vaslui Zerind 253 329 80 199 374
51
Oradea 71 Zerind 75 Arad 140 Sibiu 118 80 Timisoara 111 70 Mehadia 75 Dobreta h(n) Arad Bucharest Craiova Dobreta Eforie Fagaras Giurgiu Hirsova Iasi Lugoj Mehadia Neamt Oradea 120 Craiova 366 0 160 242 161 176 77 151 226 244 241 234 380 146 138 101 85 Urziceni 86 Lugoj Rimnieu Vilcea 97 Pitesti 211 142 98 Hirsova 99 Fagaras Vaslui 151 Neamt 87 Iasi 92
Bucharest 90 Giurgiu
Eforie
Timisoara 447=118+329
Zerind 449=75+374
Fagaras 415=239+176
97 Pitesti 417=317+100
Craiova 526=366+160
Pitesti 100 Rimnieu Vilcea 193 Sibiu Timisoara Urziceni Vaslui Zerind 253 329 80 199 374
52
Oradea 71 Zerind 75 Arad 140 Sibiu 118 80 Timisoara 111 70 Mehadia 75 Dobreta h(n) Arad Bucharest Craiova Dobreta Eforie Fagaras Giurgiu Hirsova Iasi Lugoj Mehadia Neamt Oradea 120 Craiova 366 0 160 242 161 176 77 151 226 244 241 234 380 146 138 101 85 Urziceni 86 Lugoj Rimnieu Vilcea 97 Pitesti 211 142 98 Hirsova 99 Fagaras Vaslui 151 Neamt 87 Iasi 92
Bucharest 90 Giurgiu
Eforie
Timisoara 447=118+329
Zerind 449=75+374
97 Pitesti 417=317+100
Craiova 526=366+160
Pitesti 100 Rimnieu Vilcea 193 Sibiu Timisoara Urziceni Vaslui Zerind 253 329 80 199 374
53
Oradea 71 Zerind 75 Arad 140 Sibiu 118 80 Timisoara 111 70 Mehadia 75 Dobreta h(n) Arad Bucharest Craiova Dobreta Eforie Fagaras Giurgiu Hirsova Iasi Lugoj Mehadia Neamt Oradea 120 Craiova 366 0 160 242 161 176 77 151 226 244 241 234 380 146 138 101 85 Urziceni 86 Lugoj Rimnieu Vilcea 97 Pitesti 211 142 98 Hirsova 99 Fagaras Vaslui 151 Neamt 87 Iasi 92
Bucharest 90 Giurgiu
Eforie
Timisoara 447=118+329
Zerind 449=75+374
Craiova 526=366+160
Pitesti 100 Rimnieu Vilcea 193 Sibiu Timisoara Urziceni Vaslui Zerind 253 329 80 199 374
54
A*: Contornos em f=380, f=400 e f=420 (ns no interior do contorno tm valores-f menores ou iguais aos do contorno)
Oradea 71 Neamt
h(n) Arad 87 Zerind Bucharest 151 75 Craiova Iasi Dobreta Arad 140 92 Eforie Sibiu 380 Fagaras Fagaras 99 Vaslui Giurgiu 118 80 Hirsova Rimnieu 400 Iasi Timisoara Vilcea Lugoj 142 Mehadia 211 111 Pitesti Lugoj Neamt 97 Hirsova Oradea 70 98 Pitesti 85 146 Mehadia 101 Urziceni Rimnieu Vilcea 86 75 138 Sibiu Bucharest Timisoara Dobreta 120 420 90 Urziceni Eforie Craiova Vaslui Giurgiu Zerind
A*
A rvore de busca ser representada de duas formas:
l(N,F/G) representa um nico n folha (leaf)
N um n do espao de estados G g(N), custo do caminho encontrado desde o n inicial at N F f(N) = G + h(N)
A*
s
l(s,0/0)
57
A*
s
f(a)=7
f(e)=9
58
A*
s
f(a)=7
f(e)=9
O competidor mais prximo de a e, com f(e)=9 Portanto, a permitido expandir enquanto f(a) no exceder 9
59
A*
s
f(a)=7
f(e)=9
f(b)=8
60
A*
s
f(a)=7
f(e)=9
f(b)=8
t(s,9/0, [ l(e,9/2), t(a,10/2, [ t(b,10/4, [l(c,10/6)]) ] ) ] ) Os ns b e c so expandidos e como f(c)=10 o limite de expanso atingido e ento a sub-rvore via a no tem mais permisso para expandir
61
f(c)=10
A*
s
f(a)=7
f(e)=9
f(b)=8
f(c)=10
t(s,9/0, [ l(e,9/2), t(a,10/2, [ t(b,10/4, [l(c,10/6)]) ] ) ] ) Note que agora f(a)=10 enquanto f(s)=9 Os valores foram atualizados devido ao fato que novos ns, b e c, foram gerados Agora o sucessor mais promissor de s e com f(e)=9
62
A*
A atualizao dos valores-f necessrio para permitir o programa reconhecer a subrvore mais promissora em cada nvel da rvore de busca (a rvore que contm o n mais promissor) Este atualizao leva a uma generalizao da definio da funo f de ns para rvores
63
A*
Para um nico n (folha) n, temos a definio original
f(n) = g(n) + h(n)
64
A*
O predicado principal
expandir(P,rvore,Limite,rvore1,Resolvido,Soluo)
Este predicado expande uma (sub)rvore atual enquanto o valor-f dela permanea inferior ou igual Limite Argumentos:
P: caminho entre o n inicial e rvore rvore: atual (sub)rvore Limite: valor-f limite para expandir rvore rvore1: rvore expandida dentro de Limite; assim o valor-f de rvore1 maior que Limite (a menos que um n final tenha sido encontrado durante a expanso) Resolvido: Indicador que assume sim, no ou nunca Soluo: Um caminho (soluo) do n inicial atravs de rvore1 at um n final dentro de Limite (se existir tal n)
65
A*
Os argumentos de entrada so P, rvore e Limite expandir/6 produz trs tipos de resultados, indicados pelo valor do argumento Resolvido
1. Resolvido = sim 2. 3.
Soluo = uma soluo encontrada expandindo rvore dentro de Limite rvore1 = no instanciada Resolvido = no rvore1 = rvore expandida de forma que seu valor-f exceda Limite (vide slide seguinte) Soluo = no instanciada Resolvido = nunca rvore1 e Soluo = no instanciadas
O ltimo caso indica que rvore uma alternativa invivel e nunca deve ter outra chance de crescer; isto ocorre quando o valor-f de rvore <= Limite mas as rvore no pode crescer porque nenhuma folha dela possui sucessor ou o sucessor existente criaria um ciclo
66
A Relao expandir/6
N inicial P (caminho)
n
Expandindo rvore at que seu valor-f exceda Limite resulta em rvore1
rvore rvore1
f > Limite
67
Algoritmo A*
% Assuma que 9999 maior que qualquer valor-f resolvai1(No,Solucao) :expandir([],l(No,0/0),9999,_,sim,Solucao). % % % % expandir(P,Arvore,Limite,Arvore1,Resolvido,Solucao) P um caminho entre n inicial da busca e subrvore Arvore, Arvore1 Arvore expandida at Limite. Se um n final encontrado ento Solucao a soluo e Resolvido = sim
% Caso 1: n folha final, construir caminho da soluo expandir(P,l(N,_),_,_,sim,[N|P]) :final(N). % Caso 2: n folha, valor-f <= Limite. Gerar sucessores e expandir dentro de Limite expandir(P,l(N,F/G),Limite,Arvore1,Resolvido,Solucao) :F =< Limite, (findall(M/Custo, (s(N,M,Custo), \+ pertence(M,P)),Vizinhos), Vizinhos \= [], % n N tem sucessores !, avalie(G,Vizinhos,Ts), % crie subrvores melhorf(Ts,F1), % valor-f do melhor sucessor expandir(P,t(N,F1/G,Ts),Limite,Arvore1,Resolvido,Solucao) ; Resolvido = nunca % N no tem sucessores beco sem sada ).
68
Algoritmo A* (cont.)
% Caso 3: no-folha, valor-f <= Limite. Expanda a subrvore mais % promissora; dependendo dos resultados, o predicado continue % decide como proceder expandir(P,t(N,F/G,[T|Ts]),Limite,Arvore1,Resolvido,Solucao) :F =< Limite, melhorf(Ts,MF), min(Limite,MF,Limite1), % Limite1 = min(Limite,MF) expandir([N|P],T,Limite1,T1,Resolvido1,Solucao),
continue(P,t(N,F/G,[T1|Ts]),Limite,Arvore1,Resolvido1,Resolvido,Solucao).
% Caso 4: no-folha com subrvores vazias % Beco sem sada que nunca ser resolvido expandir(_,t(_,_,[]),_,_,nunca,_) :- !. % Caso 5: valor f > Limite, rvore no pode crescer expandir(_,Arvore,Limite,Arvore,nao,_) :f(Arvore,F), F > Limite.
69
Algoritmo A* (cont.)
% continue(Caminho,Arvore,Limite,NovaArvore,SubarvoreResolvida,ArvoreResolvida,Solucao)
continue(_,_,_,_,sim,sim,_). % soluo encontrada % Limite ultrapassado, procurar outra subrvore para expandir continue(P,t(N,F/G,[T1|Ts]),Limite,Arvore1,nao,Resolvido,Solucao) :inserir(T1,Ts,NTs), melhorf(NTs,F1), expandir(P,t(N,F1/G,NTs),Limite,Arvore1,Resolvido,Solucao). % abandonar T1 pois beco sem sada continue(P,t(N,F/G,[T1|Ts]),Limite,Arvore1,nunca,Resolvido,Solucao) :melhorf(Ts,F1), expandir(P,t(N,F1/G,Ts),Limite,Arvore1,Resolvido,Solucao). % avalie(G0,[No1/Custo1,...],[l(MelhorNo,MelhorF/G,...]) % ordena a lista de folhas pelos seus valores-f avalie(_,[],[]). avalie(G0,[N/C|NaoAvaliados],Ts) :G is G0 + C, h(N,H), F is G + H, avalie(G0,NaoAvaliados,Avaliados), inserir(l(N,F/G),Avaliados,Ts).
70
Algoritmo A* (cont.)
% insere T na lista de rvore Ts mantendo a ordem dos valores-f inserir(T,Ts,[T|Ts]) :f(T,F), melhorf(Ts,F1), F =< F1, !. inserir(T,[T1|Ts],[T1|Ts1]) :inserir(T,Ts,Ts1). % Obter o valor f f(l(_,F/_),F). f(t(_,F/_,_),F). melhorf([T|_],F) :f(T,F). melhorf([],9999). min(X,Y,X) :X =< Y, !. min(X,Y,Y). pertence(E,[E|_]). pertence(E,[_|T]) :pertence(E,T).
71
% valor-f de uma folha % valor-f de uma rvore % melhor valor-f de uma lista de rvores % Nenhuma rvore: definir valor-f ruim
Admissibilidade de A*
Um algoritmo de busca chamado de admissvel se ele sempre produz uma soluo tima (caminho de custo mnimo), assumindo que uma soluo exista A implementao apresentada, que produz todas as solues por meio de backtracking e pode ser considerada admissvel se a primeira soluo encontrada tima Para cada n n no espao de estados vamos denotar h*(n) como sendo o custo de um caminho timo de n at um n final Um teorema sobre a admissibilidade de A* diz que um algoritmo A* que utiliza uma funo heurstica h tal que para todos os ns no espao de estados h(n) <= h*(n) admissvel Este resultado tem grande valor prtico
Mesmo que no conheamos o exato valor de h*, ns s precisamos achar um limite inferior para h* e utiliz-la como h em A* Isto suficiente para garantir que A* ir encontrar uma soluo tima
72
Admissibilidade de A*
H um limite inferior trivial
h(n) = 0 para todo n no espao de estados
Embora este limite trivial garanta admissibilidade sua desvantagem que no h nenhuma heurstica e assim no h como fornecer nenhum auxlio para a busca, resultando em alta complexidade
A* usando h(n)=0 comporta-se de forma similar busca em largura e igual busca de custo uniforme De fato, A* se comporta exatamente igual busca em largura se todos os arcos entre ns tm custo unitrio, ou seja, s(X,Y,1)
73
Admissibilidade de A*
Portanto interessante utilizar h>0 para garantir admissibilidade e h o mais prximo possvel de h* (h<=h*) para garantir eficincia Se mltiplas heursticas esto disponveis:
h(n) = mximo {h1(n), h2(n), , hm(n)}
74
Em outras palavras, o custo de cada n gerado no mesmo caminho nunca diminui Se h no monotnica, para se garantir a monotonicidade de f:
quando f(suc(n)) < f(n) usa-se f(suc(n)) = max( f(n), g(suc(n))+h(suc(n)) )
75
Complexidade de A*
A utilizao de heurstica para guiar o algoritmo A* reduz a busca a apenas uma regio do espao do problema Apesar da reduo no esforo da busca, a ordem de complexidade ainda exponencial na profundidade de busca O(bd)
Isso vlido para tempo e memria uma vez que o algoritmo mantm todos os ns gerados
Em situaes prticas o espao de memria mais crtico e A* pode utilizar toda a memria disponvel em questo de minutos
76
Complexidade de A*
A* o algoritmo de busca mais rpido, ou seja, para uma dada heurstica, nenhum outro algoritmo pode expandir menos ns que A* A velocidade de A* depende da qualidade da heurstica
Se a heurstica desprezvel (por exemplo, h(n)=0 para todo n) o algoritmo degenera para a busca de custo uniforme Se a heurstica perfeita (h=h*) no h busca de fato; o algoritmo marcha diretamente at o objetivo
Geralmente, os problemas reais se encontram entre as duas situaes acima e, portanto, o tempo de execuo de A* vai depender da qualidade da heurstica
77
Complexidade de A*
Algumas variaes de A* foram desenvolvidas para utilizar menos memria, penalizando o tempo
A idia bsica similar busca em profundidade iterativa O espao necessrio reduz de exponencial para linear na profundidade de busca O preo a re-expanso de ns j expandidos no espao de busca
IDA*
IDA* similar busca em profundidade iterativa
Na busca em profundidade iterativa as buscas em profundidade so realizadas em limites crescentes de profundidade; em cada iterao a busca em profundidade limitada pelo limite de profundidade atual Em IDA* as buscas em profundidade so limitadas pelo limite atual representando valores-f dos ns
79
IDA*
procedure idastar(Inicio,Solucao) Limite f(Inicio) repeat Iniciando no n Incio, realize busca em profundidade sujeita condio que um n N expandido apenas se f(N) <= Limite if busca em profundidade encontrou n final then indique Soluo encontrada else Calcule NovoLimite como o mnimo valor-f dos ns alcanados ao ultrapassar Limite, ou seja, NovoLimite min{f(N): N gerado pela busca e f(N) > Limite} endif Limite NovoLimite until Soluo encontrada
80
IDA*
s
f(s)=6
Limite = 6
81
IDA*
s
f(s)=6
Limite = 6
82
IDA*
s
f(s)=6
Limite = 6
83
IDA*
s
f(s)=6
NovoLimite = mn{7,9} = 7 Efetue busca em profundidade limitada por f<=7, iniciando pelo n s
Limite = 7
84
IDA*
s
f(s)=6
Limite = 7
85
IDA*
s
f(s)=6
f(a)=7
Limite = 7
86
IDA*
s
f(s)=6
f(a)=7
Limite = 7
87
IDA*
s
f(s)=6
f(a)=7
Limite = 7
88
IDA*
s
f(s)=6
f(a)=7
NovoLimite = mn{8,9} = 8 Efetue busca em profundidade limitada por f<=8, iniciando pelo n s
Limite = 8
89
IDA*
s
f(s)=6
Limite = 8
90
IDA*
s
f(s)=6
f(a)=7
Limite = 8
91
IDA*
s
f(s)=6
f(a)=7
f(b)=8
Limite = 8
92
IDA*
s
f(s)=6
f(a)=7
f(b)=8
Limite = 8
93
IDA*
s
f(s)=6
f(a)=7
f(b)=8
Limite = 8
94
IDA*
s
f(s)=6
f(a)=7
f(b)=8
NovoLimite = mn{10,9} = 9 Efetue busca em profundidade limitada por f<=9, iniciando pelo n s
Limite = 9
95
IDA*
s
f(s)=6
Limite = 9
96
IDA*
s
f(s)=6
f(a)=7
Limite = 9
97
IDA*
s
f(s)=6
f(a)=7
f(b)=8
Limite = 9
98
IDA*
s
f(s)=6
f(a)=7
f(b)=8
Limite = 9
99
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
Limite = 9
100
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
Limite = 9
101
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
NovoLimite = mn{10,11} = 10 Efetue busca em profundidade limitada por f<=10, iniciando pelo n s
Limite = 10
102
IDA*
s
f(s)=6
Limite = 10
103
IDA*
s
f(s)=6
f(a)=7
Limite = 10
104
IDA*
s
f(s)=6
f(a)=7
f(b)=8
Limite = 10
105
IDA*
s
f(s)=6
f(a)=7
f(b)=8
f(c)=10
Limite = 10
106
IDA*
s
f(s)=6
f(a)=7
f(b)=8
f(c)=10
Limite = 10
107
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
f(c)=10
Limite = 10
108
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
f(c)=10
Limite = 10
109
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
NovoLimite = mn{11,12} = 11 Efetue busca em profundidade limitada por f<=11, iniciando pelo n s
f(c)=10
Limite = 11
110
IDA*
s
f(s)=6
Limite = 11
111
IDA*
s
f(s)=6
f(a)=7
Limite = 11
112
IDA*
s
f(s)=6
f(a)=7
f(b)=8
Limite = 11
113
IDA*
s
f(s)=6
f(a)=7
f(b)=8
f(c)=10
Limite = 11
114
IDA*
s
f(s)=6
f(a)=7
f(b)=8
f(c)=10
Limite = 11
115
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
f(c)=10
Limite = 11
116
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
f(f)=11
f(c)=10
Limite = 11
117
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
f(f)=11
f(c)=10
f(g)=11
Limite = 11
118
IDA*
s
f(s)=6
f(a)=7
f(e)=9
f(b)=8
f(f)=11
f(c)=10
f(g)=11
Limite = 11
f(t)=11
119
IDA*
% Assuma que 9999 maior que qualquer valor-f :- dynamic proximo_limite/1,solucao/1. resolvai2(No,Solucao) :retract(proximo_limite(_)), % limpa proximo limite fail ; assert(proximo_limite(0)), % inicializa proximo limite idastar(l(No,0/0),Solucao). idastar(l(N,F/G),Solucao) :retract(proximo_limite(Limite)), assert(proximo_limite(9999)), df(l(N,F/G),[N],Limite,Solucao). idastar(No,Solucao) :proximo_limite(Limite), Limite < 9999, idastar(No,Solucao).
120
IDA*
% % % % df(No,Caminho,Limite,Solucao) Realiza busca em profundidade dentro de Limite Caminho um caminho entre n inicial ate o No atual F e' o valor-f do no atual que se encontra no inicio do Caminho
% Caso 1: n N final dentro de Limite, construir caminho da solucao df(l(N,F/G),[N|P],Limite,[N|P]) :F =< Limite, final(N). % Caso 2: n N com valor-f <= Limite % Gerar sucessor de N e expandir dentro de Limite df(l(N,F/G),[N|P],Limite,Solucao) :F =< Limite, s(N,M,Custo), \+ pertence(M,P), Gm is G + Custo, % avaliar no' M h(M,Hm), Fm is Gm + Hm, df(l(M,Fm/Gm),[M,N|P],Limite,Solucao).
121
IDA*
% Caso 3: valor f > Limite, atualizar proximo limite % e falhar df(l(N,F/G),_,Limite,_) :F > Limite, atualize_proximo_limite(F), fail. atualize_proximo_limite(F) :proximo_limite(Limite), Limite =< F, ! ; retract(proximo_limite(Limite)),!, assert(proximo_limite(F)). pertence(E,[E|_]). pertence(E,[_|T]) :pertence(E,T).
122
IDA*
Uma propriedade interessante de IDA* refere-se sua admissibilidade
Assumindo f(n) = g(n)+h(n), se h admissvel (h(n) <= h*(n)) ento garantido que IDA* encontre uma soluo tima
Entretanto, no garantido que IDA* explore os ns mesma ordem que A* (ou seja, na ordem de valores-f crescentes)
Quando f no da forma f=g+h e f no monotnica
123
RBFS
Vimos que IDA* possui uma implementao simples Entretanto, no pior caso, quando os valores-f no so compartilhados entre vrios ns ento muitos limites sucessivos de valores-f so necessrios e a nova busca em profundidade expandir apenas um novo n enquanto todos os demais so apenas re-expanses de ns expandidos e esquecidos Nessa situao existe uma tcnica para economizar espao denominada RBFS (recursive best-first search)
124
RBFS
RBFS similar a A*, mas enquanto A* mantm em memria todos os ns expandidos, RBFS apenas mantm o caminho atual assim como seus irmos Quando RBFS suspende temporariamente um subprocesso de busca (porque ele deixou de ser o melhor), ela esquece a subrvore de busca para economizar espao Assim como IDA*, RBFS apenas linear na profundidade do espao de estados em quantidade de memria necessria
125
RBFS
O nico fato que RBFS armazena sobre a subrvore de busca abandonada o valor-f atualizado da raiz da subrvore Os valores-f so atualizados copiando-se os valores-f de forma similar ao algoritmo A* Para distinguir entre os valores-f estticos e aqueles copiados, usaremos:
f(n) = valor-f do n n utilizando a funo de avaliao (sempre o mesmo valor durante a busca) F(n) = valor-f copiado ( alterado durante a busca uma vez que depende dos ns descendentes de n)
RBFS
Assim como A*, RBFS explora subrvores dentro de um limite de valor-f O limite determinado pelos valores-F dos filhos ao longo do caminho atual (o melhor valor-F dos filhos, ou seja, o valor-F do competidor mais promissor do n atual) Seja n o melhor n (aquele com menor valor-F)
Ento n expandido e seus filhos so explorados at algum limite de valor-f Quando o limite excedido (F(n) > Limite) ento todos os ns expandidos a partir de n so esquecidos Entretanto, o valor F(n) atualizado retido e utilizado na deciso em como a busca deve continuar
127
RBFS
Os valores-F so determinados no apenas copiando os valores obtidos a partir de um dos filhos mas tambm so herdados dos ns pais da seguinte forma Seja n um n que deve ser expandido pela busca Se F(n)>f(n) ento sabemos que n deve ter sido expandido anteriormente e que F(n) foi determinado a partir dos filhos de n, mas os filhos foram removidos da memria Suponha que um filho ni de n seja novamente expandido e o valor esttico f(ni) seja calculado novamente Ento F(ni) determinado como sendo
if f(ni)<F(n) then F(ni) F(n) else F(ni) f(ni) F(ni) mx{F(n), f(ni)}
128
RBFS
s
129
RBFS
s
F(a)=7
F(e)=9
Limite = 9
130
RBFS
s
F(a)=7
F(e)=9
F(b)=8
Limite = 9
131
RBFS
s
F(a)=7
a
Como F(c) > Limite, o caminho s-a-b-c temporariamente abandonado e os ns b e c so removidos da memria; o valor F(c)=10 ento copiado para o n a, ou seja, F(a) = 10
F(e)=9
F(b)=8
Limite = 9
132
RBFS
s
F(a)=10
F(e)=9
Limite = 10
133
RBFS
s
F(a)=10
a
Como F(f) > Limite, o caminho s-e-f temporariamente abandonado e o n f removido da memria; o valor F(f)=11 ento copiado para o n e, ou seja, F(e) = 11
F(e)=9
Limite = 10
134
RBFS
s
F(a)=10
F(e)=11
Limite = 11
135
RBFS
s
F(a)=10
F(e)=11
F(b)=10
Limite = 11
136
RBFS
s
F(a)=10
F(e)=11
F(b)=10
F(c)=10
Limite = 11
137
RBFS
s
F(a)=10
a
Como F(d) > Limite, o caminho s-a-b-c-d temporariamente abandonado e os ns b, c e d so removidos da memria; o valor F(d)=12 ento copiado para o n a, ou seja, F(a)=12
F(e)=11
F(b)=10
F(c)=10
Limite = 11
138
RBFS
s
F(a)=12
F(e)=11
Limite = 12
139
RBFS
s
F(a)=12
F(e)=11
F(f)=11
Limite = 12
140
RBFS
s
F(a)=12
F(e)=11
F(f)=11
F(g)=11
Limite = 12
141
RBFS
s
F(a)=12
F(e)=11
f
Com a busca com Limite = 12 uma soluo encontrada
F(f)=11
F(g)=11
Limite = 12
F(t)=11
142
RBFS
rbfs(Caminho,Filhos,Limite,NovoMelhorFF,Resolvido, Solucao):
Caminho = caminho at ento na ordem reversa Filhos = filhos da cabea do Caminho Limite = limite superior no valor-F da busca para os Filhos NovoMelhorFF = melhor valor-f justamente quando busca ultrapassa Limite Resolvido = sim, no, nunca Solucao = caminho da soluao, se Resolvido = sim
143
RBFS
% Assuma que 9999 maior que qualquer valor-f resolvai3(No,Solucao) :rbfs([],[l(No,0/0/0)],9999,_,sim,Solucao). % rbfs(Caminho,Filhos,Limite,NovoMelhorFF,Resolvido,Solucao) rbfs(Caminho,[l(No,G/F/FF)|Nos],Limite,FF,nao,_) :FF > Limite, !. rbfs(Caminho,[l(No,G/F/FF)|_],_,_,sim,[No|Caminho]) :F = FF, % Mostrar solucao apenas uma vez,quando F=FF final(No). rbfs(_,[],_,_,nunca,_) :- !. % Sem candidatos,beco sem saida rbfs(Caminho,[l(No,G/F/FF)|Ns],Limite,NovoFF,Resolvido,Sol) :FF =< Limite, % Dentro de Limite: gerar filhos findall(Filho/Custo, (s(No,Filho,Custo),\+ pertence(Filho,Caminho)), Filhos), herdar(F,FF,FFherdado), % Filhos podem herdar FF avalie(G,FFherdado,Filhos,Sucessores), % Ordenar filhos melhorff(Ns,ProximoMelhorFF), % FF do competidor mais promissor dos filhos min(Limite,ProximoMelhorFF,Limite2), !, rbfs([No|Caminho],Sucessores,Limite2,NovoFF2,Resolvido2,Sol), continue(Caminho,[l(No,G/F/NovoFF2)|Ns],Limite, NovoFF,Resolvido2,Resolvido,Sol).
144
RBFS
% continue(Caminho,Nos,Limite,NovoFF,FilhoResolvido,Resolvido,Solucao) continue(Caminho,[N|Ns],Limite,NovoFF,nunca,Resolvido,Sol) :!, rbfs( Caminho,Ns,Limite,NovoFF,Resolvido,Sol). % N um beco sem saida continue(_,_,_,_,sim,sim,Sol). continue(Caminho,[N|Ns],Limite,NovoFF,nao,Resolvido,Sol) :inserir(N,Ns,NovoNs), !,% Assegurar que filhos sao ordenados pelos valores rbfs(Caminho,NovoNs,Limite,NovoFF,Resolvido,Sol). avalie(_,_,[],[]). avalie(G0,FFherdado,[No/C|NCs],Nos) :G is G0 + C, h(No,H), F is G + H, max(F,FFherdado,FF), avalie(G0,FFherdado,NCs,Nos2), inserir(l(No,G/F/FF),Nos2,Nos). herdar(F,FF,FF) :FF > F, !. herdar(F,FF,0). % Filho herda FF do pai se % FF do pai e' maior que F do pai
145
RBFS
inserir(l(N,G/F/FF),Nos,[l(N,G/F/FF)|Nos]) :melhorff(Nos,FF2), FF =< FF2, !. inserir(N,[N1|Ns],[N1|Ns1]) :inserir(N,Ns,Ns1). melhorff([l(N,F/G/FF)|Ns],FF). melhorff([],9999). pertence(E,[E|_]). pertence(E,[_|T]) :pertence(E,T). min(X,Y,X) :X =< Y, !. min(X,Y,Y). max(X,Y,X) :X >= Y, !. max(X,Y,Y).
146
Alm de encontrar estados finais, os algoritmos de busca local so teis para resolver problemas de otimizao, nos quais o objetivo encontrar o melhor estado de acordo com uma funo objetivo
148
mnimo global
estado atual
espao de estados
149
O algoritmo no mantm uma rvore de busca mas somente o estado atual e o valor de sua funo de avaliao O algoritmo no explora valores da funo de avaliao alm dos vizinhos imediatos ao estado atual
como escalar o monte Everest em um nevoeiro denso com amnsia como usar culos que limitam sua viso a 3 metros
150
151
mximo local
estado atual
espao de estados
152
153
Escolha um estado inicial do espao de busca (pode ser escolhido de forma aleatria) Considere todos os vizinhos (sucessores) no espao de busca Escolha o vizinho com a melhor qualidade (funo de avaliao) e mova para aquele estado Repita os passos de 2 at 4 at que todos os estados vizinhos tenham qualidade menor que o estado atual Retorne o estado atual como sendo a soluo Se h mais de um vizinho com a melhor qualidade:
Escolher o primeiro melhor Escolher um entre todos de forma aleatria
154
O algoritmo foi deixado o mais prximo possvel aos j vistos, mas pode ser otimizado de vrias formas
O retrocesso pode ser eliminado (por exemplo, por um corte) A fila de prioridade pode ser substituda por um algoritmo de ordenao (por exemplo, quicksort) De fato, a fila de prioridade pode ser eliminada, pois o que importa somente o sucessor de melhor qualidade (entretanto, se a fila for removida isso tambm elimina a possibilidade de retrocesso) Tais otimizaes so deixadas como exerccios
155
estender([No|Caminho],NovosCaminhos) :findall([NovoNo,No|Caminho]:H, (s(No,NovoNo), \+ pertence(NovoNo,[No|Caminho]), h(NovoNo,H)), NovosCaminhos). % fila_prioridade(NovosCaminhos,CaminhosExistentes,CaminhosOrdenados) % concatena (com prioridade) os NovosCaminhos em CaminhosExistenes formando CaminhosOrdenados % assumindo que CaminhosExistentes ja esta ordenado por prioridade (ou seja, por h) fila_prioridade([],L,L). fila_prioridade([Caminho:H|Caminhos],Existente,Final) :insert(Caminho:H,Existente,ExistenteAumentado), fila_prioridade(Caminhos,ExistenteAumentado,Final). insert(Caminho:H,[Path:Hs|Paths],[Path:Hs|NewPaths]) :H > Hs, !, insert(Caminho:H,Paths,NewPaths). insert(C,Paths,[C|Paths]).
156
2 8 6 2 8 6 2 8
Exemplo 1
1 2 8 6 3 5
4 7 1
5
5 3 5 1 2 6 3 8 5
h(n)
Neste exemplo, a heurstica distncia Manhattan permite encontrar uma soluo rapidamente por hill-climbing
4 7
4 7 1 4 7
4 7
3 5 6 1 2 8 2 4 7 8 3 5 6 3 5 6 1 3 2 8 5 6
1 4
2 8 7
3 5 6 3
4 7 1
1 4 7 1 4 7 2 5 8 3 6
2 5 8
1
6 1 2 5 8 3 6
4 7
4 7
2
157
Exemplo 2
Neste exemplo, com a mesma heurstica, hillclimbing no consegue encontrar uma soluo Todos os ns vizinhos (sucessores) tm valores maiores (mnimo local) Observe que este jogo tem soluo em apenas mais 12 movimentos
1 4 6 1 4 6 2 5 3 8 7 2 5 7 1 2 5 7 8 3 3 8
h(n)
4 6
1 4 6
2 7
3 5 8
2 5 7 3 8
4 6
158
Hill-Climbing: Variaes
Hill-Climbing Estocstico
Nem sempre escolha o melhor vizinho
espao de estados
160
Hill-Climbing: Variaes
Tmpera Simulada (Simulated Annealing)
Termo utilizado em metalurgia No estratgia best-first mas uma derivao O objetivo que as molculas de metal encontrem uma localizao estvel em relao aos seus vizinhos O aquecimento provoca movimento das molculas de metal para localizaes indesejveis Durante o resfriamento, as molculas reduzem seus movimentos e situam-se em uma localizao mais estvel Tmpera o processo de aquecer um metal e deix-lo esfriar lentamente de forma que as molculas fiquem em localizaes estveis
161
Tmpera Simulada
1. 2. 3. 4. 5. 6. 7.
8. 9. 10. 11.
Escolha um estado inicial do espao de busca de forma aleatria i 1 T Temperatura(i) Enquanto (T > Tf) Faa Escolha um vizinho (sucessor) do estado atual de forma aleatria deltaE energia(vizinho) energia(atual) Se (deltaE > 0) Ento o movimento aceito (mova para o vizinho de melhor qualidade) Seno o movimento aceito com probabilidade exp(deltaE/T) Fim Se i i+1 T Temperatura(i) Fim Enquanto Retorne o estado atual como sendo a soluo energia(N) uma funo que calcula a energia do estado N e pode ser vista como qualidade Temperatura(i) uma funo que calcula a temperatura na iterao i, assumindo sempre valores positivos Tf a temperatura final (por exemplo, Tf = 0)
162
Tmpera Simulada
No incio qualquer movimento aceito Quando a temperatura reduzida, probabilidade de aceitar um movimento negativo reduzida Movimentos negativos so as vezes essenciais para escapar de mximos locais Movimentos negativos em excesso afastam do mximo global
163
Resumo
Vimos que os algoritmos IDA* e RBFS necessitam de quantidade de espao linear na profundidade da busca Diferentemente de IDA* e como A*, RBFS expande ns na ordem best-first mesmo no caso de uma funo f no monotnica
165
Slides baseados nos livros: Bratko, I.; Prolog Programming for Artificial Intelligence, 3rd Edition, Pearson Education, 2001. Clocksin, W.F.; Mellish, C.S.; Programming in Prolog, 5th Edition, Springer-Verlag, 2003.
Material elaborado por Jos Augusto Baranauskas Reviso 2009
166