procura informada - autenticação · nós na fila de folhas ordenados por ordem crescente da ......
Post on 06-Dec-2018
218 Views
Preview:
TRANSCRIPT
Resumo • Estratégias de procura informadas
– Gananciosa – A* – IDA* – Melhor Primeiro Recursiva (RBFS)
• Heurísticas • Algorítmos de procura local
– Hill-climbing – Simulated annealing – Local beam – Genetic algorithms
Árvore de Procura • Uma estratégia de procura determina a ordem
de expansão dos nós • As procuras informadas usam conhecimento
específico do problema para determinar a ordem de expansão dos nós
• Tipicamente este conhecimento é incorporado sob a forma de heurísticas (estimativas)
Procura Melhor Primeiro • Ideia: usar uma função de avaliação f(n) para cada nó
– f(n) usa conhecimento específico do problema – O “melhor” nó é o que tem o menor valor de f(n) Expandir primeiro o nó folha que tem o menor valor de f(n)
• Implementação: Nós na fila de folhas ordenados por ordem crescente da função de avaliação – Nós folha = {n1, n2, n3, …} f (n1) ≤ f (n2) ≤ f (n3) ≤ …
• Casos especiais: – Procura Gananciosa – Procura A*
Procura gananciosa
• Função de avaliação f(n) = h(n) (heurística) • = estimativa do custo do caminho desde n até
ao objectivo • e.g., hdlr(n) = distância em linha recta desde n
até Bucareste • Procura gananciosa expande o nó que parece
estar mais próximo do objectivo
Procura Gananciosa: exemplo
Nós folha = {Fagaras(176), Rimnicu Vilcea(193), Timisoara(329), Arad(366), Zerind(374), Oradea(380)}
Procura Gananciosa: exemplo
Nós folha = {Bucharest(0), Rimnicu Vilcea(193), Sibiu(253), Timisoara(329), Arad(366), Zerind(374), Oradea(380)}
Procura gananciosa: propriedades
• Completa? Não – pode entrar em ciclo exº, Iasi Fagaras = Iasi, Neamt, Iasi, …
• Tempo? O(rm) mas uma boa heurística pode reduzi-lo dramaticamente
• Espaço? O(rm) no pior caso mantém todos os nós em memória
• Óptima? Não
• Semelhante à procura em profundidade, mas mais exigente em memória (como a procura em largura)
Procura A* • Ideia: evitar expandir caminhos que já têm um
custo muito elevado • Função de avaliação f(n) = g(n) + h(n) • g(n) = custo desde o nó inicial até n • h(n) = estimativa do custo deste n até um estado
objectivo • f(n) = estimativa do custo total da solução =
caminho desde estado inicial até estado objectivo (passando por n)
Procura A*: exemplo
Nós folha = {Rimnicu Vilcea(413), Fagaras(415), Timisoara(447), Zerind(449), Arad(646),Oradea(671)}
Procura A*: exemplo
Nós folha = {Fagaras(415), Pitesti(417), Timisoara(447), Zerind(449), Craiova(526), Sibiu(553), Arad(646), Oradea(671)}
Procura A*: exemplo
Nós folha = {Pitesti(417), Bucharest(450), Timisoara(447), Zerind(449), Craiova(526), Sibiu(553), Sibiu(591), Arad(646), Oradea(671)}
Procura A*: exemplo
Nós folha = {Bucharest(418), Bucharest(450), Timisoara(447), Zerind(449), Craiova(526), Sibiu(553), Sibiu(591), Rimnicu Vilcea(607), Craiova(615), Arad(646), Oradea(671)}
A* é óptima? • Não! Aqui fica um contra exemplo...
• G é objectivo óptimo mas D é o objectivo encontrado...
A
C
E G F
B
8=0+8
8=4+4 9=4+5
8=8+0 9=6+3 9=5+4 7=7+0
D
Heurísticas admissíveis • Uma heurística h(n) é admissível se para cada
nó n se verifica h(n) ≤ h*(n), onde h*(n) é o custo real do caminho desde n até ao objectivo.
• Uma heurística admissível nunca sobrestima o custo de atingir o objectivo, i.e. é realista ou optimista
• Exemplo: hdlr(n) (nunca sobrestima a distância real em estrada)
• Teorema: se h(n) é admissível, então a procura em árvore A* é óptima
A* é Óptima (prova) • Consideremos um nó objectivo não óptimo G2 que já foi
gerado mas não expandido (nó folha). Seja n um nó folha tal que n está no menor caminho para um nó objectivo óptimo G (com custo C*).
• h(G2) = 0 porque G2 é objectivo • f(G2) = g(G2) + h(G2) = g(G2) > C* porque G2 não é óptimo • f(n) = g(n) + h(n) ≤ C* porque h é admissível • Logo f(n) ≤ C* < f(G2) e G2 não será analisado antes de n e G
A* é Óptima • A* expande os nós por ordem crescente do valor de f • Gradualmente adiciona contornos/“curvas de nível" (à semelhança
dos mapas topográficos) que identificam conjuntos de nós • Contorno i tem todos os nós com f ≤ fi, com fi < fi+1
A* em grafo é óptima? • Não, mesmo que a heurística seja admissível!
Aqui fica um contra exemplo...
A
C D
B
7=0+7
5=4+1
8=8+0
8=7+1
7=6+1
9=9+0
D objectivo óptimo
objectivo encontrado
C
descartado!
C(8) é descartado por causa de C(7) e o objectivo encontrado (D(9)) não é óptimo...
A* e Procura em Grafo • A* com procura em grafo não é óptima com heurísticas
admissíveis • Pode ser descartado um nó que está no caminho que
leva à solução óptima pelo facto de o mesmo nó já ter sido explorado no passado
• Pode passar a ser óptima se for mantido o registo dos caminhos e do valor de f(n) associados a todos os nós já explorados – Um nó/caminho só é descartado se o valor de f(n) for maior do
que o valor registado • Caso contrário… a heurística tem de ser consistente!
– Teorema: se h(n) é consistente, então A* usando procura em grafo é óptima
Heurísticas Consistentes • Garantem que se existirem dois caminhos para chegar
ao mesmo objectivo óptimo então o caminho de menor custo é sempre seguido em primeiro lugar
• Uma heurística é consistente se para cada nó n, para cada sucessor n' de n gerado por uma acção a temos,
h(n) ≤ c(n,a,n') + h(n’) desigualdade triangular
um lado de um triângulo não pode ser maior que a soma dos outros dois lados
c(n,a,n') é o custo associado ao caminho de n a n‘ através de a
Heurísticas Consistentes • Uma heurística é consistente se para cada nó n, para cada
sucessor n' de n gerado por uma acção a temos, h(n) ≤ c(n,a,n') + h(n') desigualdade triangular um lado de um triângulo não pode ser maior que a soma dos outros dois c(n,a,n') é o custo associado ao caminho de n a n‘ através de a
• Se h é consistente, então temos f(n') = g(n') + h(n') = g(n) + c(n,a,n') + h(n') ≥ g(n) + h(n) ≥ f(n)
• Logo, o valor de f(n) nunca decresce ao longo de um caminho
Propriedades de A*
• Completa? Sim (excepto se o número de nós com f ≤ f(G) for infinito)
• Tempo? Exponencial • Espaço? Exponencial: mantém todos os nós em
memória (no pior caso) • Óptima? Sim
A* Iterativa (IDA*)
• IDA*: Iterative Deepening A* • Versão iterativa em profundidade da procura A* • Em cada iteração é incrementado o valor limite
para f(n); valor de f(n) superior ao limite n não é analisado
• Em cada nova iteração o valor limite é actualizado com o menor valor de f(n) para os nós não explorados na iteração anterior
• Não requer tanto espaço como A*
Implementação (I) Função IDA* (problema) devolve solução
estático: f-limite, limite actual para f raiz, um nó raiz ← CriaNó(EstadoInicial[problema]) f-limite ← f(raiz) loop solução, f-limite ← ProcProfContorno(raiz,f-limite) se solução não é nil então devolve solução se f-limite = ∞ então devolve falha
Implementação (II) Função ProcProfContorno (nó,f-limite) devolve solução,prox-f
estático: prox-f, próximo limite inicialmente ∞ se f(nó) > f-limite então devolve soluçãovazia, f(nó) se TesteObjectivo[problema](nó) então devolve solução,f-limite paracada nó s em sucessores(nó) solução,novo-f ← ProcProfContorno (s,f-limite) se solução não é nil então devolve solução,f-limite prox-f ← MIN(prox-f,novo-f) devolve nil,prox-f
IDA*: exemplo
A
C
E
B
4=0+4
8=8+0 8=8+0 9=6+3
D
A
C
E
B
4=0+4
8=8+0 9=6+3
D
A
l=f(A)=4
4=0+4
C B
5=3+2
l=f(B)=f(C)=5 l=f(D)=8
5=3+2 5=3+2
5=2+3 5=2+3
D
5=2+3
Melhor Primeiro Recursiva (RBFS)
• Melhor primeiro (A*) com espaço linear (em p) • Semelhante à procura em profundidade
(implementação recursiva) • Para cada nó explorado, mantém registo do
caminho alternativo com menor valor de f • Se o valor de f para o nó actual excede o valor
em memória, a recursão permite recuperar o melhor caminho alternativo
• Uma alteração corresponde a uma iteração IDA* • Óptima se h(n) é admissível
Heurísticas Admissíveis E.g., para o 8-puzzle: • h1(n) = número de peças mal colocadas • h2(n) = soma da distância de Manhattan (i.e., nº de quadrados até à
localização desejada para cada peça)
• h1(StartState) = ? 8 • h2(StartState) = ? 3+1+2+2+2+3+3+2 = 18
Dominância • Se h2(n) ≥ h1(n) para todos nós n (ambas admissíveis) • então h2 domina h1 • h2 é melhor para a procura
– Expande menos nós porque não é tão optimista / está mais próxima da realidade
• Custo da procura (média do nº de nós expandidos):
prof=12 Profundidade Iterativa = 3,644,035 nós A*(h1) = 227 nós A*(h2) = 73 nós
prof=24 Profundidade Iterativa = muitos nós... A*(h1) = 39,135 nós A*(h2) = 1,641 nós
Heurísticas Admissíveis: como inventá-las?
• Um problema com menos restrições é chamado problema relaxado
• O custo de uma solução óptima para um problema relaxado pode ser usado como uma heurística admissível para o problema original
• Exemplo do 8-puzzle: – Se as regras do 8-puzzle são relaxadas tal que uma peça se
pode mover para qualquer posição, então h1(n) devolve a solução com o menor número de jogadas
– Se as regras são relaxadas tal que cada peça se pode mover para qualquer posição adjacente, então h2(n) devolve a solução com o menor número de jogadas
Procura Local • Em muitos problemas de optimização, o
caminho que leva ao objectivo é irrelevante; o próprio estado objectivo é a solução (e.g., n-rainhas)
• Nestes casos, podemos usar procura local • Mantém um único “estado actual”; caminhos não
são memorizados • Em cada iteração procura “melhorar” o estado
actual; útil em optimização • Tipicamente, um estado transita para estados
“vizinhos” • PROBLEMA: não é completa!
Examplo: N-rainhas • Problema: Colocar as N rainhas numa matriz n × n de
modo que nenhuma esteja em posição de atacar as outras
• Estado inicial gerado aleatoriamente • Novos estados gerados a partir de movimentos para
estados vizinhos
Hill-climbing (trepa colinas) ou procura local ganaciosa
• É um simples ciclo que se move continuamente na direcção de um valor melhor. Termina quando nenhum sucessor tem valores melhores.
Procura com o Hill-climbing no problema das 8 rainhas
• h = nº de pares de rainhas que se estão a atacar – No tabuleiro apresentado: h = 17 – Num tabuleiro objectivo: h = 0
• Inteiros correspondem ao valor de h para sucessores resultantes de mover rainha na respectiva coluna (≥12)
Procura com o Hill-climbing no problema das 8 rainhas
• Função sucessor: mexer uma rainha para outra posição na mesma coluna.
• Tipicamente, o Hill-clibing escolhe aleatoriamente entre os melhores sucessores, se houver mais do que um.
Procura com o Hill-climbing no problema das 8 rainhas
• Mínimo local com h = 1 • Qualquer sucessor tem valor de h superior
Não encontrou solução e não evoluiu para outro estado…
Hill Climbing
• No caso das 8-rainhas – Começando num estado aleatório…
• Só resolve 14% dos casos (necessita em média de 4 iterações)
• Nos restantes casos fica “parado” ao fim de 3 iterações (em média)
Variantes do Hill Climbing • Stochastic Hill climbing: escolhe aleatoriamente
de entre os melhores sucessores • First-choice Hill Climbing: gera os sucessores
aleatoriamente até encontrar o primeiro com valores melhores que o estado actual e é esse que é escolhido (conveniente se um estado tiver milhares de possíveis sucessores)
• Random-restart Hill Climbing: conduz uma séria de procuras a partir de diferentes estados iniciais, gerados aleatoriamente; pára quando se encontra o objectivo
Hill Climbing
• Apesar de tudo: – Converge (ou não) rapidamente – Por exemplo, o Random-restart Hill Climbing
consegue encontrar uma solução para as n-rainhas, em menos de um minuto, mesmo para 3 milhões de rainhas.
Procura Simulated Annealing • Ideia: escapar ao mínimos locais permitindo que
se façam movimentos “maus”, mas vai gradualmente decrementando a sua frequência – Em vez de escolher o melhor sucessor, escolhe um
sucessor aleatoriamente que tipicamente é “aceite” se melhorar a situação
– Em Português: têmpera simulada
• Consegue-se provar que se temperatura T diminuir suficientemente devagar (em função do schedule), então a procura simulated annealing vai encontrar um máximo global com probabilidade próxima do 1
Simulated Annealing
• Metáfora: imaginar a tarefa de pôr uma bola de ping-pong no buraco mais profundo de uma superfície cheia de buracos
• Uma solução é deixar a bola ir parar a um mínimo local e depois abanar a superfície de modo a tirá-la do mínimo local
• Simulated annealing começa por “abanar” muito no início e depois vai abanando cada vez menos
Local Beam (procura em banda)
• Guarda a referência a k estados, em vez de 1 – Começa com k estados gerados aleatoriamente
• Em cada iteração, todos os sucessores dos k estados são gerados
• Se algum é um estado objectivo, pára; caso contrário escolhe os k melhores sucessores e repete
Procura Local Beam • Atenção que este algoritmo é mais do que correr
k Random-restart Hill Climbings em paralelo!! – Não têm de ser escolhidos sucessores de todos os
estados – Se um estado gera vários bons sucessores e os
outros k-1 estados não, os estados menos promissores são abandonados
• No entanto, também pode ter problemas: pode haver pouca diversidade nos k estados… – Stochastic Beam Search: k sucessores são
escolhidos aleatoriamente
Algoritmos Genéticos • Variante da stochastic beam search
• Começa com k estados gerados aleatoriamente (população) tal como procura em banda – Um estado é representados como uma string sobre
um alfabeto finito (geralmente {0,1}) • O estado sucessor é gerado através da
combinação de dois estados (pais) – Produz a próxima geração de estados por selecção,
cruzamento e mutação – A função de avaliação (fitness function) dá valores
mais altos aos melhores estados
Algoritmos Genéticos
• Fitness function (b): nº de pares de rainhas não atacantes (min = 0, max = (8 × 7)/2 = 28) – Probabilidade de selecção (c) em função da fitness
function • Exº 24/(24+23+20+11) = 31%
Algoritmos Genéticos
• O ponto de cruzamento é escolhido aleatoriamente • São criados os filhos (d) • Cada estado sofre mutações aleatórias (e)
top related