Bfhs

21
9/26/2007 Breadth First Heuristic Search Fábio Pisaruk MAC-425 Inteligência Artificial

Transcript of Bfhs

Page 1: Bfhs

9/26/2007

Breadth First Heuristic Search

Fábio PisarukMAC-425 Inteligência Artificial

Page 2: Bfhs

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.

Page 3: Bfhs

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.

Page 4: Bfhs

9/26/2007

Contorno e fronteira

início

meta

interior

fronteiracontorno

Page 5: Bfhs

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!

Page 6: Bfhs

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.

Page 7: Bfhs

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.

Page 8: Bfhs

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?

Page 9: Bfhs

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.

Page 10: Bfhs

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.

Page 11: Bfhs

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!

Page 12: Bfhs

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.

Page 13: Bfhs

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.

Page 14: Bfhs

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.

Page 15: Bfhs

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!

Page 16: Bfhs

9/26/2007

Simulação...

Camada Relay

ClosedList[l-1]

ClosedList[l]

Gap 1

Gap 2

Page 17: Bfhs

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.

Page 18: Bfhs

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.

Page 19: Bfhs

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.

Page 20: Bfhs

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.

Page 21: Bfhs

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.