Bfhs
-
Upload
fabio-pisaruk -
Category
Documents
-
view
72 -
download
0
Transcript of Bfhs
9/26/2007
Breadth First Heuristic Search
Fábio PisarukMAC-425 Inteligência Artificial
9/26/2007
Introdução
Breadth First Heuristic Search é um algoritmo de busca em grafos não-dirigidos, baseado na busca em largura, utilizando divisão-e-conquista na reconstrução da resposta e, listas de nós, gerados e visitados, mais compactas.
9/26/2007
Comparação entre os contornos de buscas Best-First e Breadth-First
início
meta
Breadth-FirstBest-First
Contorno definido pela heurística aplicada na expansão dos nós.
9/26/2007
Contorno e fronteira
início
meta
interior
fronteiracontorno
9/26/2007
Revisão: Busca em larguraD
A
F
G
I
BJ
E
B
C
OpenList : {A},ClosedList : {}OpenList : {B,C},ClosedList : {A}OpenList : {C,E,F},ClosedList : {A,B}OpenList : {E,F,D},ClosedList : {A,B,C}OpenList : {F,D,I},ClosedList : {A,B,C,E}OpenList : {D,I},ClosedList : {A,B,C,E,F}OpenList : {I,G},ClosedList : {A,B,C,E,F,D}OpenList : {G,J},ClosedList : {A,B,C,E,F,D,I}OpenList : {J},ClosedList : {A,B,C,E,F,D,I,G}Estado meta alcançado!
9/26/2007
Cont...
A busca em largura utiliza duas listas, a fim de evitar expansões de nós repetidos:●OpenList : nós gerados e não expandidos●ClosedList: nós já expandidos.Cada nó possui um ponteiro para o seu antecessor, de modo que a resposta possa ser obtida caminhando-se do nó meta ao nó origem através destes ponteiros.
9/26/2007
Problemas
●Para muitos problemas práticos a lista de nós expandidos(ClosedList) pode se tornar muito grande.
●A busca gera muitos nós que não têm a menor chance de fazer parte da solução.
9/26/2007
Questões
●Será que precisamos guardar todos os nós expandidos a fim de evitar repetições?
●É possível evitar a geração de nós que não farão parte da solução?
9/26/2007
Questões...
Se quisermos evitar repetições e, ao mesmo tempo, sermos capazes de construir a resposta, através dos ponteiros de antecessores, a resposta é não.Mas, se quisermos apenas um dos dois, a resposta é sim.Para evitar a geração de nós que, com certeza, não farão parte da solução, podemos podá-los através do uso de heurísticas.
9/26/2007
Solução
Manter uma closedList mais compacta, com o custo de não ser mais possível a geração da resposta através dos ponteiros para os nós antecessores.Na verdade, manteremos diversas closedLists/openLists, uma para cada nível da expansão da busca.Lembre-se que a busca em largura funciona expandindo-se todos os nós de um certo nível, colocando os nós gerados na openList e os nós expandidos na closedList.
9/26/2007
Busca em largura com listas por camada
D
A
F
G
I
LJ
E
B
C
OpenList[0] :{A},ClosedList[0]={}OpenList[0] :{},OpenList[1]:{B,C},ClosedList[0] : {A} OpenList[1]: {C},OpenList[2]:{E,F},ClosedList[1] : {B}OpenList[1]: {},OpenList[2]:{E,F,D},ClosedList[1] : {B,C}OpenList[2]: {F,D},OpenList[3]:{I},ClosedList[2] : {E}OpenList[2]: {D},OpenList[3]:{I},ClosedList[2] : {E,F}OpenList[2]: {},OpenList[3]:{I,G},ClosedList[2] : {E,F,D}OpenList[3]: {G},OpenList[4]:{L,J},ClosedList[3] : {I}OpenList[3]: {},OpenList[4]:{L, J},ClosedList[3] : {I,G}OpenList[4]: {J},Estado meta alcançado!
9/26/2007
Quais listas devemos manter?
Localidade de uma busca em largura num grafo:max {g*(n) – g*(n') , 0}n,n' : nós do grafon' pertence aos predecessores de n.g*(x) : comprimento do menor caminho até o no x, ou, a primeira camada em que o nó x aparece durante a buscaTeorema: Número de camadas closedList necessárias a fim de evitar repetições é igual à localidade do grafo.Calcular localidade não é simples no caso geral.Corolário: Grafos não-dirigidos possuem localidade igual a um.Pelo corolário acima, observamos que armazenar somente a camada imediatamente anterior é suficiente para evitar repetições.
9/26/2007
Listas mantidas
Em cada instante t teremos as seguintes listas :● closedList[l]● closedList[l-1]● closedList[0]● closedList[relay]● openList[l] ● openList[l+1]
Onde l é a camada sendo expandida no instante t e relay é uma camada intermediária.
9/26/2007
Como reconstruir a resposta?
Uma vez que não mais armazenamos todos os nós já expandidos, não podemos utilizar os ponteiros de nós antecessores para construir a resposta. Usaremos uma estratégia de divisão-e-conquista para gerar respostas aos subproblemas que, concatenados, formam a solução.
9/26/2007
Simulação(upperBound=4, relay=2)
D
A
F
G
I
LJ
E
B
C
Open[0] :{A},Closed[0]={}Open[0] :{},Open[1]:{B,C},Closed[0] : {A} Open[1]: {C},Open[2]:{E,F},Closed[1] : {B},Closed[0] : {A} Open[1]: {},Open[2]:{E,F,D},Closed[1] : {B,C},Closed[0] : {A} Open[2]: {F,D},Open[3]:{I},Closed[2] : {E},Closed[1] : {B,C},Closed[0] : {A} Open[2]: {D},Open[3]:{I},Closed[2] : {E,F},Closed[1] : {B,C},Closed[0] : {A} Open[2]: {},Open[3]:{I,G},Closed[2] : {E,F,D},Closed[0] : {A}Open[3]: {G},Open[4]:{L,J},Closed[3] : {I}Open[3]: {},Open[4]:{L, J},Closed[3] : {I,G}Open[4]: {J},Estado meta alcançado!
9/26/2007
Simulação...
Camada Relay
ClosedList[l-1]
ClosedList[l]
Gap 1
Gap 2
9/26/2007
Reconstrução da solução através de divisão-e-conquista
Uma vez que o estado meta é alcançado, precisamos reconstruir a solução completa. Devido aos gaps, isso é não é possível. Aplicamos então o algoritmo BFHS recursivamente nos dois gaps, concatenado as soluções encontradas para os subproblemas.
9/26/2007
Implementação
Implementamos o algoritmo BHFS e o aplicamos ao problema ReguaPuzzle.Alguns detalhes:● custo de cada operação deve ser unitário● é preciso definir um limite superior*● camada relay divide o problema em dois subproblemas,
aproximadamente de mesmo custo.● o grafo de estados do ReguaPuzzle não é dirigido● desconsideramos heuríticas na expansão dos nós**● subproblemas têm limites superiores inferiores aos dos
problemas decompostos(limites justos).(*) utilizamos um limite inferior que é incrementado até que uma solução seja encontrada.(**) as heurísticas estavam baseadas no custo para se alcançar algum estado meta(no problema ReguaPuzzle as metas são pré-definidas) entretanto, cada subproblema possui metas que não coincidem com as metas pré-definidas do ReguaPuzzle.
9/26/2007
Melhorias e comentários
● embora a abordagem de divisão-e-conquista seja eficaz, é mais eficiente parar a recursão antes
● closedLists poderiam ser removidas apenas quando um certo quantidade de memória estiver sendo utilizado, diminuindo assim o comprimento dos gaps
● aumentar o limite superior até que uma solução seja encontrada é uma estratégia mais conservadora, preservando memória ao custo de uma busca menos eficiente.
● o autor sugere ainda a remoção de “alguns” nós das closedLists*.
● a utilização de diversas listas, ao invés de uma, diminue a probabilidade de colisões nos hashs.
● utilização de relay ¾ ao invés de ½(*) era necessário uma heurística admissível para os subproblemas.
9/26/2007
Resultados e conclusões
Quando um problema de busca em grafos não-digiridos for limitado pela memória disponível, utilizar BHFS pode ser uma boa opção.Nas simulações, BHFS resolveu instâncias maiores que a busca A*, devido à falta de memória enfrentada pelo mesmo.Talvez um dos pontos mais interessantes deste algoritmo seja o de conseguir bons desempenhos, utilizando-se de uma estratégia de busca trivial como a busca em largura.
9/26/2007
Referências
●Rong Zhou and Eric A. Hansen. 2004. Breadth-First Heuristic Search.
●Rong Zhou and Eric A. Hansen. 2004. BFHSP: A Breadth-First Heuristic Search Planner.