Você está na página 1de 20

Busca no Espa co de Estados

Prof. Dr. Silvio do Lago Pereira


slago@ime.usp.br

Introdu c ao

Busca no espa co de estados e uma das t ecnicas mais utilizadas para resolu ca o de problemas em Intelig encia Articial [1,3,4]. A id eia consiste em supor a exist encia de um agente capaz de executar a co es que modicam o estado corrente de seu mundo. Assim, dados um estado inicial representando a congura ca o corrente do mundo do agente, um conjunto de a co es que o agente e capaz de executar e uma descri ca o do estado meta que se deseja atingir, a solu ca o do problema consiste numa seq u encia de a co es que, quando executada pelo agente, transforma o estado inicial num estado meta. Nesse artigo, introduzimos o conceito de espa co de estados e o utilizamos para especicar formalmente um problema de busca, bem como um algoritmo n ao-determin stico que resolve esse tipo de problema. Em seguida, apresentamos as estrat egias de busca cega (em largura e em profundidade) como formas de tornar o algoritmo determin stico. Finalmente, apresentamos as estrat egias de busca heur stica (menor-custo, melhor-estimativa e A ) como formas de garantir a qualidade das solu co es e melhorar a eci encia da busca determin stica.

Espa co de estados

Um espa co de estados e denido por um conjunto S de estados e por um conjunto A de a co es que mapeiam um estado em outro [3]. Como exemplo, vamos considerar o Mundo do Aspirador [4]. Nesse mundo, o agente e um aspirador cuja fun ca o e limpar as salas de um edif cio. Numa vers ao bastante simplicada, vamos supor que o mundo desse agente seja composto de apenas duas salas, cada uma delas podendo estar limpa ou suja, e que o aspirador seja capaz de executar apenas tr es a co es: entrarSala1, entrarSala2 e aspirar.
PSfrag replacements
sala 1 sala 2 A co es do agente - entrarSala1 - entrarSala2 - aspirar

Figura 1. Mundo do Aspirador Simplicado

S. L. Pereira

2.1

Representa c ao de estados

Estados s ao representados por estruturas, onde cada componente denota um atributo do estado representado. Por exemplo, no Mundo do Aspirador, cada estado pode ser representado por uma estrutura da forma [X, Y, Z ], onde X {1, 2} indica a posi ca o do aspirador, Y {0, 1} indica se a primeira sala est a suja e Z {0, 1} indica se a segunda sala est a suja. Dessa forma, o estado em que o aspirador encontra-se na segunda sala e apenas essa sala est a suja e representado por [2, 0, 1]. O conjunto de estados para o Mundo do Aspirador e: S = {[1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1], [2, 0, 0], [2, 0, 1], [2, 1, 0], [2, 1, 1]}. 2.2 Representa c ao de a co es

As a co es s ao representadas por operadores da forma oper(, s, s ) , onde e uma a ca o que transforma o estado s no estado s , dado que a condi ca o esteja satisfeita. Por exemplo, a a ca o aspirar pode ser representada pelos seguintes operadores: oper(aspirar, [1, Y, Z ], [1, 0, Z ]) Y = 1 oper(aspirar, [2, Y, Z ], [2, Y, 0]) Z = 1 Geralmente, condi co es que envolvem apenas teste de igualdade podem ser estabelecidas de forma impl cita. Por exemplo, os operadores acima tamb em podem ser codicados como oper(aspirar, [1, 1, Z ], [1, 0, Z ]) oper(aspirar, [2, Y, 1], [2, Y, 0]) Assim, o conjunto de a co es para o Mundo do Aspirador e: A = {oper(entrarSala1, [2, Y, Z ], [1, Y, Z ]), oper(entrarSala2, [1, Y, Z ], [2, Y, Z ]), oper(aspirar, [1, 1, Z ], [1, 0, Z ]), oper(aspirar, [2, Y, 1], [2, Y, 0])} 2.3 Estados sucessores

Dado um estado s S , seus estados sucessores s ao todos aqueles que podem ser atingidos, a partir de s, pela aplica ca o de um dos operadores do dom nio. Por exemplo, expandindo o estado [2, 0, 1], obtemos como estados sucessores [1, 0, 1] e [2, 0, 0]. Esses estados s ao gerados pela aplica ca o dos operadores entrarSala1 e aspirar, respectivamente. Note, por exemplo, que o operador entrarSala2 n ao pode ser usado na expans ao do estado [2, 0, 1]; j a que, nesse estado, a condi ca o impl cita do operador (i.e. Y = 1) n ao est a satisfeita.

Busca no Espa co de Estados

Exerc cio 1 Desenhe um grafo representando o espa co de estados para o Mundo do Aspirador. Nesse grafo, cada n o ser a um estado do mundo e cada arco (rotulado com uma a ca o) ser a uma transi ca o entre dois estados. Os arcos devem ser direcionados do estado para seu estado sucessor. Exerc cio 2 Considere uma vers ao do Mundo do Aspirador onde h a um pr edio com dois pisos, cada um deles com duas salas (1 e 2) e um sagu ao (0). N ao h a passagem direta de uma sala para outra, de modo que o aspirador tem que estar no sagu ao para entrar numa sala ou para mudar de piso. Para representar os estados nessa vers ao do problema, podemos usar uma estrutura da forma [P os, P iso1 , P iso2 ], onde P os = [P iso, Sala], sendo P iso {1, 2} e Sala {0, 1, 2}, indica a posi ca o corrente do aspirador e P isoi = [X, Y ], sendo X, Y {0, 1}, representa as salas do piso i, como na vers ao simplicada do problema. Por exemplo, se o aspirador estiver no sagu ao do primeiro piso e houver lixo apenas na sala 1 do segundo piso, o estado correspondente ser a [[1, 0], [0, 0][1, 0]]. Com base nessa representa ca o, codique os operadores para as a co es subir, descer, entrarSala1, entrarSala2, aspirar e sair.

O problema de busca

Um problema de busca [2,4] e especicado atrav es de tr es componentes: um espa co de estados (denotado pelos conjuntos S e A); um estado inicial (denotado por um estado particular s0 S ) e um conjunto de estados meta (denotado por um conjunto G S ). Continuando com o Mundo do Aspirador como exemplo, um poss vel problema de busca seria o seguinte: dado que inicialmente o aspirador esteja na primeira sala e que ambas as salas estejam sujas, encontre um estado onde ambas as salas estejam limpas. Nesse caso, temos espa co de estados: conjuntos S e A, conforme descritos na se ca o 2; estado inicial: [1, 1, 1] e estados meta: G = {[1, 0, 0], [2, 0, 0]}. A solu ca o para um problema de busca consiste numa seq u encia de a co es que rotulam o caminho que leva do estado inicial a um dos estados meta no espa co de estados do problema. Exerc cio 3 Encontre duas solu co es poss veis para o problema de busca especicado acima, identicando-as no grafo que representa o espa co de estados para a vers ao simplicada do Mundo do Aspirador (veja exerc cio 1).

S. L. Pereira

3.1

Algoritmo de busca n ao-determin stico

Geralmente, os algoritmos de busca n ao especicam explicitamente o conjunto de estados de um problema. Isso acontece porque esses estados podem ser gerados sob demanda, a ` medida em que forem sendo encontrados durante a busca. Dados um conjunto A de a co es, um estado inicial s0 S e um conjunto de estados meta G S , um algoritmo n ao-determin stico1 de busca pode ser especicado sa seguinte maneira: Busca(A, s0 , G ) 1 {s0 } 2 enquanto = fa ca 3 s remove( ) 4 se s G ent~ ao devolva caminho(s) 5 sucessores(s, A) 6 devolva fracasso Nesse algoritmo, a fun ca o remove( ) remove e devolve um dos estados no conjunto , escolhido de forma aleat oria; a fun ca o caminho(s) devolve a seq u encia de a co es que rotulam o caminho que vai de s0 at e s, no espa co de estados do problema; e, nalmente, a fun ca o sucessores(s, A) devolve o conjunto dos estados sucessores de s, obtidos a partir da aplica ca o dos operadores em A. O rastreamento da execu ca o de um algoritmo de busca, produz uma estrutura denominada a rvore de busca. Exemplo 1. Sejam A o conjunto de a co es para o Mundo do Aspirador, s 0 = [1, 1, 1] e G = {[1, 0, 0], [2, 0, 0]}. O rastreamento da chamada Busca(A, s0 , G ) pode produzir, por exemplo, a a rvore de busca apresentada na Figura 2. Na primeira itera ca o do la co no algoritmo Busca, temos = {[1, 1, 1]}. Ent ao, quando a fun ca o remove e chamada, a u nica escolha poss vel e s = [1, 1, 1]. Entretanto, como esse estado n ao e meta (s G ), seus sucessores ([2, 1, 1] e [1, 0, 1]) s ao adicionados ao conjunto e a execu ca o prossegue. Assim, na segunda itera ca o do la co, teremos = {[2, 1, 1], [1, 0, 1]}. Como o algoritmo e n ao-determin stico, qualquer um desses estados poder a ser escolhido. Vamos supor que a escolha seja s = [2, 1, 1]. Como esse estado n ao e meta, na terceira itera ca o teremos = {[1, 1, 1], [2, 1, 0], [1, 0, 1]}. O algoritmo escolhe s = [2, 1, 0] e adiciona seu u nico sucessor [1, 1, 0] a . Dessa forma, iniciamos a quarta itera ca o do la co com = {[1, 1, 1], [1, 1, 0], [1, 0, 1]}. Supondo que nessa itera ca o a escolha seja s = [1, 1, 0], passa a ser o conjunto {[1, 1, 1], [1, 0, 0], [1, 0, 1]}. Finalmente, se na quinta itera ca o a escolha for s = [1, 0, 0], como esse e um estado meta, a busca termina e o caminho [entrarSala2, aspirar, entrarSala1, aspirar] e devolvida como solu ca o do problema.
1

Algoritmos n ao-determin stico s ao aqueles que fazem algum tipo de escolha aleat oria.

Busca no Espa co de Estados


[1,1,1] entrarSala2 [2,1,1] entrarSala1 [1,1,1] aspirar aspirar

[1,0,1]

[2,1,0] entrarSala1

[1,1,0] aspirar

PSfrag replacements
[1,0,0]

meta atingida

Figura 2. Arvore de busca gerada pelo algoritmo Busca

Exerc cio 4 Mostre que, fazendo outras escolhas, o algoritmo de busca n aodetermin stica poderia ter encontrado uma solu ca o mais curta (i.e. com menos a co es) para o problema do exemplo 1. Exerc cio 5 Mostre que, fazendo outras escolhas, o algoritmo de busca n aodetermin stica poderia car executando innitamente, sem nunca encontrar uma solu ca o para o problema do exemplo 1. 3.2 Detec c ao de ciclos no espa co de estados

Um problema com o algoritmo de busca n ao-determin stica e que, caso o espa co de estados do problema contenha ciclos, ele pode executar innitamente. Para evitar que isso aconte ca, podemos guardar os estados j a expandidos e impedir que esses estados sejam expandidos novamente durante a busca. Busca (A, s0 , G ) 1 2 {s0 } 3 enquanto = fa ca 4 s remove( ) 5 se s G ent~ ao devolva caminho(s) 6 {s} 7 (sucessores(s, A) ) 8 devolva fracasso Nessa nova vers ao do algoritmo, o conjunto e utilizado para guardar os estados expandidos durante a busca. Quando um estado e expandido, todos seus sucessores j a expandidos anteriormente s ao descartados, de modo que apenas

S. L. Pereira

estados ainda n ao explorados s ao adicionados ao conjunto . Com essa modica ca o, garantimos que o algoritmo Busca termine, sempre que o espa co de estados do problema de busca for nito. Exerc cio 6 Desenhe uma das a rvores de buscas que poderiam ser produzidas pelo rastreamento da chamada Busca (A, s0 , G ), sendo A o conjunto de a co es para o Mundo do Aspirador, s0 = [1, 1, 1] e G = {[2, 0, 0]}.

Estrat egias de busca cega

As estrat egias de busca cega ou busca n ao-informada consistem em pol ticas que sistematizam o comportamento de um algoritmo de busca, sem levar em conta a qualidade da solu ca o encontrada2 [2,4]. H a duas estrat egias de busca cega que s ao bastante utilizadas na pr atica: busca em largura (breadth-rst search) e busca em profundidade (depth-rst search). 4.1 Busca em largura

Na busca em largura, o estado inicial (n vel 0) e expandido primeiro, sendo seus sucessores posicionados no n vel 1 da a rvore de busca. Em seguida, cada um dos estados do n vel 1 s ao expandidos, sendo seus sucessores posicionados no n vel 2, e assim por diante, de tal forma que todos os estados num n vel n sejam expandidos antes daqueles no n vel n + 1. O algoritmo de busca em largura e obtido simplesmente sistematizando a ordem de inser ca o e remo ca o de estados no conjunto , que agora passa a se comportar como uma la3 : BuscaLargura(A, s0 , G ) 1 2 {s0 } 3 enquanto = fa ca 4 s removeP rimeiro( ) 5 se s G ent~ ao devolva caminho(s) 6 {s} 7 insereN oF inal(sucessores(s, A) , ) 8 devolva fracasso Nesse algoritmo, a fun ca o removeP rimeiro e o procedimento insereN oF inal servem para tratar a vari avel como uma la. Agora, o algoritmo de busca n ao tem escolha: o estado a ser expandido e sempre aquele que encontra-se no in cio da la .
2

Como veremos, as estrat egias de busca heur stica tentam minimizar o custo da solu ca o, seja em termos do n umero de a co es ou em termos dos custos dessas a co es. Numa la, tamb em chamada lista Fifo, o primeiro que entra e o primeiro que sai.

Busca no Espa co de Estados

Exemplo 2. Sejam A o conjunto de a co es para o Mundo do Aspirador, s 0 = [1, 1, 1] e G = {[1, 0, 0], [2, 0, 0]}. O rastreamento de BuscaLargura(A, s0 , G ) produz a arvore de busca da Figura 3, onde os estados est ao numerados na ordem em que eles s ao selecionados para expans ao durante a busca. O algoritmo BuscaLargura sempre encontra uma solu ca o com o menor n umero de a co es4 . Particularmente, nesse exemplo, como todos os estados do n vel 3 s ao examinados antes daqueles no n vel 4, a busca terminar a assim que o estado [2, 0, 0] for atingido; devolvendo o caminho [aspirar, entrarSala2, aspirar] como solu ca o do problema.

[1,1,1] entrarSala2 [2,1,1] aspirar aspirar

[1,0,1] entrarSala2

[2,1,0] entrarSala1

[2,0,1] aspirar

[1,1,0] aspirar

[2,0,0]

meta atingida

PSfrag replacements
[1,0,0]

Figura 3. Arvore de busca gerada pelo algoritmo BuscaLargura

Exerc cio 7 O Problema dos Jarros [3] consiste no seguinte: H a dois jarros com capacidades de 3 e 4 litros, respectivamente. Nenhum dos jarros cont em qualquer medida ou escala, de modo que s o se pode saber o conte udo exato quando eles est ao cheios. Sabendo-se que podemos encher ou esvaziar um jarro, bem como trasferir a gua de um jarro para outro, encontre uma seq u encia de passos que deixe o jarro de 4 litros com exatamente 2 litros de a gua. Para representar os estados desse problema, podemos usar um par [X, Y ], onde X {0, 1, 2, 3} representa o conte udo do primeiro jarro e Y {0, 1, 2, 3, 4} representa o conte udo do segundo jarro. As a co es podem ser representadas pelos seguintes operadores:
4

Como veremos, uma solu ca o com o menor n umero de a co es n ao e, necessariamente, a solu ca o de menor custo.

S. L. Pereira

oper(enche1, [X, Y ], [3, Y ]) X < 3 oper(enche2, [X, Y ], [X, 4]) Y < 4 oper(esvazia1, [X, Y ], [0, Y ]) X > 0 oper(esvazia2, [X, Y ], [X, 0]) Y > 0 oper(despeja1em2, [X, Y ], [0, X + Y ]) X > 0, Y < 4, X + Y 4 oper(despeja1em2, [X, Y ], [X + Y 4, 4]) X > 0, Y < 4, X + Y > 4 oper(despeja2em1, [X, Y ], [X + Y, 0]) X < 3, Y > 0, X + Y 3 oper(despeja2em1, [X, Y ], [3, X + Y 3]) X < 3, Y > 0, X + Y > 3 O estado inicial e s0 = [0, 0] e o conjunto de estados meta e G = {[X, 2]}. Com base nessa especica ca o, desenhe a a rvore de busca criada pelo algoritmo BuscaLargura, ao procurar a solu ca o do problema.

4.2

Busca em profundidade

Na busca em profundidade, expandimos sempre o estado mais a ` esquerda, no n vel mais profundo da a rvore de busca; at e que uma solu ca o seja encontrada, ou at e que um beco5 seja atingido. Nesse u ltimo caso, retrocedemos e reiniciamos a busca no pr oximo estado ainda n ao expandido, posicionado mais a ` esqueda, no n vel mais profundo da a rvore6 . Assim como no caso da busca em largura, o algoritmo de busca em profundidade e obtido pela sistematiza ca o da ordem de inser ca o e remo ca o de estados no conjunto . No caso da busca em profundidade, entretanto, em vez de uma la usamos uma pilha7 . Essa eau nica mudan ca necess aria para transformar a busca em largura numa busca em profundidade. BuscaProfundidade(A, s0 , G ) 1 2 {s0 } 3 enquanto = fa ca 4 s removeP rimeiro( ) 5 se s G ent~ ao devolva caminho(s) 6 {s} 7 insereN oInicio(sucessores(s, A) , ) 8 devolva fracasso Nesse algoritmo, a fun ca o removeP rimeiro e o procedimento insereN oInicio garantem que a vari avel seja tratada como uma pilha.
5

6 7

Um beco e um estado que n ao pode ser expandido, seja porque ele j a foi visitado anteriormente, ou porque n ao h a nenhum operador aplic avel para a sua expans ao. Essa pol tica de retrocesso e tamb em conhecida como backtracking. Numa pilha, tamb em chamada lista Lifo, o u ltimo que entra e o primeiro que sai.

Busca no Espa co de Estados

Exemplo 3. Sejam A o conjunto de a co es para o Mundo do Aspirador, s 0 = [1, 1, 1] e G = {[2, 0, 1]}. O rastreamento de BuscaProfundidade(A, s0 , G ) produz a a rvore de busca da Figura 4, onde os estados est ao numerados na ordem em que eles s ao selecionados para expans ao durante a busca. Note que o estado 5-[2, 0, 0] e um beco. O u nico operador que pode ser aplicado a esse estado e entrarSala1, mas isso resultaria no estado sucessor [1, 0, 0], que e um estado j a visitado anteriormente. Sendo assim, a busca retrocede e toma outro caminho, que produz a solu ca o [aspirar, entrarSala2].

[1,1,1] entrarSala2 [2,1,1] aspirar aspirar

[1,0,1] entrarSala2

[2,1,0] entrarSala1

[2,0,1]

meta atingida

[1,1,0] aspirar

[1,0,0] entrarSala2

PSfrag replacements
[2,0,0]

Figura 4. Arvore de busca gerada pelo algoritmo BuscaProfundidade

Exerc cio 8 Sejam A o conjunto de a co es para o Mundo do Aspirador, s0 = [1, 1, 1] e G = {[1, 0, 0], [2, 0, 0]}. Mostre que, para esse problema, a busca em profundidade encontra uma solu ca o com uma a ca o a mais que aquela encontrada pela busca em largura, para o mesmo problema. Exerc cio 9 O Problema do Fazendeiro [5] consiste no seguinte: Um fazendeiro encontra-se na margem esquerda de um rio, levando consigo um lobo, uma ovelha e um repolho. O fazendeiro precisa atingir a outra margem do rio com toda a sua carga intacta, mas para isso disp oe somente de um pequeno bote com capacidade para levar apenas ele mesmo e mais uma de suas cargas. O fazendeiro poderia cruzar o rio quantas vezes fossem necess arias para trasportar seus pertences, mas o problema e que, na aus encia do fazendeiro, o lobo pode comer a ovelha e essa, por sua vez, pode comer o repolho. Encontre uma seq u encia de passos que resolva esse problema.

10

S. L. Pereira

Para representar os estados desse problema, podemos usar uma estrutura da forma [F, L, O, R], cujas vari aveis denotam, respectivamente, as posi co es do fazendeiro, do lobo, da ovelha e do repolho. Cada vari avel pode assumir os valores e ou d, dependendo da margem do rio onde o objeto se encontra. As a co es podem ser representadas pelos seguintes operadores: oper(vai, [e, L, O, R], [d, L, O, R]) L = O, O = R oper(levaLobo, [e, e, O, R], [d, d, O, R]) O = R oper(levaOvelha, [e, L, e, R], [d, L, d, R]) oper(levaRepolho, [e, L, O, e], [d, L, O, d]) L = O oper(volta, [d, L, O, R], [e, L, O, R]) L = O, O = R oper(trazLobo, [d, d, O, R], [e, e, O, R]) O = R oper(trazOvelha, [d, L, d, R], [e, L, e, R]) oper(trazRepolho, [d, L, O, d], [e, L, O, e]) L = O O estado inicial e s0 = [e, e, e, e] e o conjunto de estados meta e G = {[d, d, d, d]}. Com base nessa especica ca o, desenhe a a rvore de busca criada pelo algoritmo BuscaProfundidade, ao procurar a solu ca o do problema. Exerc cio 10 Considere os seguintes operadores, que descrevem os v oos existentes entre cidades de um pa s: oper(1, a, b), oper(2, a, b), oper(3, a, d), oper(4, b, e), oper(5, b, f ), oper(6, c, g ), oper(7, c, h), oper(8, c, i), oper(9, d, j ), oper(10, e, k ), oper(11, e, l), oper(12, g, m), oper(13, j, n), oper(14, j, o), oper(15, k, f ), oper(16, l, h), oper(17, m, d), oper(18, o, a), oper(19, n, b) Por exemplo, o operador oper(1, a, b) indica que o v oo 1 parte da cidade A e chega a ` cidade B . Com base nesses operadores, e supondo que eles sejam usados na ordem em que eles foram declarados, desenhe as a rvores de busca em largura e em profundidade que s ao criadas durante a busca por uma seq u encia de v oos que levem da cidade A at e a cidade J .

Estrat egias de busca heur stica

Como vimos na se ca o anterior, as estrat egias de busca cega encontram solu co es testando e expandindo estados, sistematicamente. Infelizmente, al em de serem inecientes, essas estrat egias n ao garantem encontrar solu co es de custo m nimo. Nessa se ca o, vamos apresentar mais tr es estrat egias de busca: a primeira, baseada no conceito de custo de a ca o, e ineciente, mas garante encontrar uma solu ca o de custo m nimo; a segunda, baseada do conceito de fun ca o heur stica 8 , e muito eciente, mas n ao garante encontrar uma solu ca o de custo m nimo; e, nalmente, a terceira, que combina as duas estrat egias anteriores, n ao s o e muito eciente, mas tamb em garante encontrar uma solu ca o de custo m nimo [2,3,4].
8

Essa palavra tem a mesma raiz da palavra eureka, do grego, e signica descoberta.

Busca no Espa co de Estados

11

5.1

Custo de a c ao

Em muitos problemas, as a co es podem ter custos associados, dependendo da diculdade que o agente tem em execut a-las. Para levar essa informa ca o em conta durante a busca, precisamos adicionar mais um campo na especica ca o dos operadores: oper(, s, s , g ()) , onde g () e o custo da a ca o , que transforma o estado s num estado s , dado que a condi ca o esteja satisfeita.

B 3 7 9 A 3 D 1 E C 5 F 2

4 I 3 H 5

L J 6

Figura 5. Mapa de vias entre cidades

Como exemplo, vamos considerar o Problema das Rotas [4]. Esse problema consiste em, dado um mapa de vias (veja a Figura 5), uma cidade de origem e uma cidade de destino, encontrar uma rota de dist ancia m nima entre essas duas cidades. Nesse dom nio, o agente e capaz de viajar de uma cidade a ` outra e, portanto, suas a co es podem ser especicadas conforme segue9 : via(a, b, 7) via(a, c, 9) via(a, d, 3) via(b, f, 3) via(b, i, 4) via(c, j, 5) via(d, e, 1) via(f, g, 2) via(g, h, 3) via(i, k, 5) via(j, l, 6) via(k, l, 4) oper(vai(A, B ), A, B, C ) via(A, B, C ) oper(vai(A, B ), A, B, C ) via(B, A, C )
9

Declarar as vias em separado e necess ario porque as elas s ao bidirecionais.

12

S. L. Pereira

Custo de caminho. Quando as a co es t em custo, o custo de um caminho n [a1 , a2 , . . . , an ] e i=1 g (ai ), onde g (ai ) e o custo da a ca o ai . Por exemplo, de acordo com a Figura 5, o custo do caminho [vai(a, d), vai(d, e)] e 3 + 1 = 4. Numa a rvore de busca, todo estado s est a associado a um caminho que leva do estado inicial s0 at e s. Ent ao, podemos denir o custo de um estado numa a rvore de busca como sendo o custo do caminho que leva at e ele. 5.2 Busca pelo menor custo

O algoritmo de busca pelo menor custo combina os comportamentos da busca em largura e da busca em profundidade. Nesse tipo de busca, cada vez que um estado e expandido, um custo e associado a cada um de seus sucessores. O algoritmo progride expandindo sempre o estado de menor custo, at e que um estado meta seja encontrado. O algoritmo de busca pelo menor custo e obtido atrav es do uso de uma la de prioridades ascendente10 para guardar os estados a serem expandidos. BuscaMenorCusto(A, s0 , G ) 1 2 {s0 } 3 enquanto = fa ca 4 s removeP rimeiro( ) 5 se s G ent~ ao devolva caminho(s) 6 {s} 7 insereEmOrdem(sucessoresG(s, A) , ) 8 devolva fracasso No algoritmo BuscaMenorCusto, a fun ca o removeP rimeiro e o procedimento insereEmOrdem servem para tratar o conjunto como uma la de prioridades. Al em disso, a fun ca o sucessoresG devolve uma lista de estados sucessores e seus respectivos custos (necess arios para estabelecer a ordem dos estados na la de prioridades ascendente), que s ao dados pela fun ca o g (s). Exemplo 4. Sejam A o conjunto de a co es para o Problema das Rotas, s0 = a e G = {[k ]}. O rastreamento de BuscaMenorCusto(A, s0 , G ) produz a a rvore de busca da Figura 6, onde os estados est ao numerados na ordem em que s ao expandidos durante a busca e cada um deles tem um custo associado. Observe que o algoritmo pula de uma ramo para outro da a rvore, misturando busca em largura com busca em profundidade. Observe tamb em que, quando o estado i : 11 e expandido, o estado meta k : 16 e gerado. Entretanto, em vez de parar a busca, o algoritmo prossegue expandindo os estados g : 12, j : 14 e h : 15, que t em custos menores. Isso e necess ario porque, eventualmente, a expans ao de um desses estados poderia gerar um estado k com custo menor que 16.
10

Nesse tipo de la, os itens s ao mantidos em ordem crescente.

Busca no Espa co de Estados


a:0 vai(a,b) b:7 vai(b,f) f : 10 vai(f,g) g : 12 vai(g,h) h : 15 vai(b,i) i : 11 vai(i,k) k : 16 vai(a,c) c:9 vai(c,j) j : 14 vai(j,l) l : 20 vai(a,d) d:3 vai(d,e) e:4

13

meta atingida

PSfrag replacements

Figura 6. Arvore de busca gerada pelo algoritmo BuscaMenorCusto

Exerc cio 11 Desenhe a a rvore de busca produzida, para o Problema das Rotas, quando o algoritmo BuscaMenorCusto e chamado com s0 = k e G = [a]. Exerc cio 12 Explique o que acontece quando o algoritmo BuscaMenorCusto trabalha com um conjunto de a co es que tenham todas o mesmo custo. Exerc cio 13 Considere o mapa de v oos da Figura 7, representado pelos operadores a seguir: voo(a, b, 1) voo(a, c, 9) voo(a, d, 4) voo(b, c, 7) voo(b, e, 6) voo(b, f, 1) voo(c, f, 7) voo(d, f, 4) voo(d, g, 5) voo(e, h, 9) voo(f, h, 4) voo(g, h, 1) oper(voa(A, B ), A, B, C ) voo(A, B, C ) oper(voa(A, B ), A, B, C ) voo(B, A, C ) Sejam A o conjunto de a co es acima, s0 = a e G = [h]: (a) Desenhe a a rvore de busca produzida por BuscaMenorCusto(A, s0 , G ). (b) Mostre que, usando os operadores na ordem declarada acima, os algoritmos de busca em largura e em profundidade encontram solu co es de custo superior a `quele encontrado pela busca de menor custo, quando s0 = a e G = [h].

14

S. L. Pereira
B 6 E 7 A 9 C 7 F 4 D 4 5 G 4 1 9 1 H

Figura 7. Mapa de v oos entre cidades

5.3

Fun c ao heur stica

Uma fun ca o heur stica e uma fun ca o que estima o custo m nimo de um caminho (desconhecido) que leva de um determinado estado a um estado meta. Seja h uma fun ca o que calcula o custo m nimo exato11 de um caminho que leva de um determinado estado a um estado meta. Formalmente, uma fun ca o heur stica pode ser qualquer fun ca o h que apresente as seguintes propriedades: h(s) = 0 se e somente se s G e para todo s S , h(s) h (s). Essas propriedades garantem que a estimativa dada pela fun ca o heur stica seja admiss vel, ou seja, que nunca superestime o custo real de uma solu ca o. Note que as fun co es heur sticas dependem do dom nio de aplica ca o, bem como da criatividade e experi encia de quem a projeta. Exemplo 5. O problema do Quebra-Cabe ca de 8 [4] consiste em movimentar as pe cas do quebra-cabe ca horizontal ou verticalmente (para ocupar a posi ca o vazia adjacente a ` pe ca) de modo que a congura ca o nal seja alcan cada:
Estado corrente Estado meta

1 8 7

3 2 6

4 5

1 8 7

3 4

Por exemplo, expandindo o estado corrente acima, temos:


11

Evidentemente, se tiv essemos essa fun ca o, na pr atica, n ao precisar amos de algoritmos de busca. Assim, a suposi ca o da exist encia de h e apenas te orica

Busca no Espa co de Estados


Estado Meta

15

1 8 7

3 2 6

4 5

1 8 7

3 4

Qual a melhor escolha?

PSfrag replacements s1

1 8 7

3 2 6

s2

1 8

3 2

4 5 6

Agora, usando uma fun ca o heur stica, o algoritmo de busca deveria expandir o melhor entre esses dois estados sucessores. Mas como decidir qual deles e o melhor? Uma possibilidade e vericar o qu ao longe cada pe ca encontra-se de sua posi ca o na congura ca o nal e apontar como melhor estado aquele cuja soma das dist ancias e m nima. Por exemplo, no estado s1 , as pe cas 1, 5, 6, 7 e 8 j a est ao em suas posi co es nais. Para as pe cas 2, 3 e 4, a dist ancia e 1. Portanto, h(s 1 ) = 3. Analogamente, temos h(s2 ) = 5. Esses valores indicam que uma solu ca o a partir do estado s1 pode ser obtida com no m nimo mais tr es expans oes, enquanto que uma solu ca o a partir de s2 requer no m nimo mais cinco expans oes. Ent ao, evidentemente, o algoritmo de busca deve expandir o estado s1 . Exerc cio 14 Usando soma de dist ancias, calcule h para o estado a seguir: PSfrag replacements
s s1 s2

3 7 2

8 1

4 5 6

Exerc cio 15 Explique porque a soma das dist ancias das pe cas e uma heur stica admiss vel para o Problema do Quebra-Cabe ca de 8. Exerc cio 16 Considere um dom nio onde o agente e capaz de permutar dois itens quaisquer de uma lista e o problema consiste em, dada uma lista com os itens numa ordem arbitr aria, encontrar uma seq u encia de permuta co es que colocam os itens da lista em ordem crescente. Por exemplo, suponha que o estado inicial seja a lista [4, 3, 2, 1]. Expandindo esse estado temos: PSfrag replacements
s s1 s2 [3,4,2,1]

[4,3,2,1]

[2,3,4,1]

[1,3,2,4]

[4,2,3,1]

[4,1,2,3]

[4,3,1,2]

16

S. L. Pereira

Agora, o agente deveria escolher o melhor desses seis estados para continuar a busca. Intuitivamente, n ao e dif cil de se perceber que os estados [1, 3, 2, 4] e [4, 2, 3, 1] s ao os melhores; pois, a partir desses estados, podemos atingir a meta permutando apenas mais um par de itens. Considere a fun ca o heur stica h(s) = |{(ai , aj ) : ai , aj s i j }|, que contabiliza o n umero de invers oes na lista representada por um estado s: (a) Calcule o valor de h para cada um dos seis estados sucessores acima. (b) Explique porqu e a fun ca o h n ao e admiss vel para o Problema de Ordena ca o. (c) Tente encontrar uma outra heur stica que seja admiss vel. 5.4 Busca pela melhor estimativa

O algoritmo de busca pela melhor estimativa e semelhante ao algoritmo de busca pelo menor custo. A diferen ca e que, em vez de se basear no custo g (s), do caminho j a percorrido at e s, para selecionar os estados a serem expandidos durante a busca, a busca pela melhor estimativa se baseia no custo estimado h(s) do caminho que ainda precisa ser percorrido, a partir de s, at e um estado meta. BuscaMelhorEstimativa(A, s0 , G ) 1 2 {s0 } 3 enquanto = fa ca 4 s removeP rimeiro( ) 5 se s G ent~ ao devolva caminho(s) 6 {s} 7 insereEmOrdem(sucessoresH (s, A) , ) 8 devolva fracasso Nesse algoritmo, a fun ca o sucessoresH devolve uma lista de estados sucessores e seus respectivos custos estimados (necess arios para estabelecer a ordem dos estados na la de prioridades ascendente), que s ao dados pela fun ca o h(s). Exemplo 6. Vamos considerar novamente o Problema das Rotas, especicado na subse ca o 5.1. Como heur stica, usaremos a dist ancia em linha reta entre a cidade corrente e a cidade que se deseja atingir12 . Vamos encontrar uma rota que leve da cidade a a ` cidade k e, para facilitar a exposi ca o, vamos denir a fun ca o heur stica da seguinte forma: h(a) = 15 h(b) = 7 h(c) = 6 h(d) = 14
12

Essa heur stica pode ser calculada a partir das coordenadas de cada cidade no mapa.

Busca no Espa co de Estados

17

h(e) = 15 h(f ) = 7 h(g ) = 8 h(h) = 5 h(i) = 5 h(j ) = 3 h(k ) = 0 h(l) = 4 O rastreamento de BuscaMelhorEstimativa(A, a, [k ]) produz a a rvore de busca da Figura 8, onde os estados est ao numerados na ordem em que s ao expandidos durante a busca e cada um deles tem uma heur stica associada. Observe que o uso da heur stica orienta a busca de tal forma que algoritmo, praticamente, segue direto em dire ca o a ` meta. Evidentemente, a busca pela melhor estimativa nem sempre e t ao eciente assim. Tudo vai depender do problema sendo resolvido e da heur stica utilizada. Entretanto, apesar de eciente, a busca pela melhor estimativa n ao pode garantir que uma solu ca o de custo m nimo ser a encontrada. Nesse exemplo, a solu ca o encontrada tem custo 24, um custo bem superior ao custo daquela solu ca o encontrada pelo algoritmo de busca pelo menor custo (veja o exemplo 4).

a : 15 vai(a,b) b:7 vai(a,c) c:6 vai(c,j) j:3 vai(j,l) vai(a,d) d : 14

PSfrag replacements
s s1 s2

l:4 vai(l.k) k:0

meta atingida

Figura 8. Arvore de busca gerada pelo algoritmo BuscaMelhorEstimativa

Exerc cio 17 Considere o Problema do Quebra-cabe ca de 8, apresentado no exemplo 5. Para esse problema, qual algoritmo seria mais apropriado: busca pelo menor custo ou busca pela melhor estimativa? Justique. Exerc cio 18 Desenhe a a rvore de busca, para o Problema das Rotas, quando o algoritmo BuscaMelhorEstimativa e chamado com s0 = k e G = {[a]}.

18

S. L. Pereira

5.5

Busca A

Conforme vimos, a busca pelo menor custo minimiza o custo do caminho percorrido at e o estado corrente, enquanto a busca pela melhor estimativa tenta minimizar o custo estimado do caminho a ser percorrido do estado corrente at e um estado meta. Para garantir a solu ca o de custo m nimo, a busca pelo menor custo acaba tendo que examinar uma grande quantidade de estados no espa co de estados do problema, podendo ser muito ineciente. Por outro lado, a busca pela melhor estimativa reduz o espa co de busca consideravelmente; por em, n ao consegue garantir uma solu ca o de custo m nimo. Felizmente, e poss vel combinar essas duas estrat egias de busca num mesmo algoritmo, denominado A [3,4]. O algoritmo de busca A minimiza o custo total do caminho percorrido, desde o estado inicial at e um estado meta, usando uma fun ca o da forma f (s) = g (s) + h(s), onde g (s) e uma fun ca o de custo e h(s) e uma fun ca o heur stica. BuscaA (A, s0 , G ) 1 2 {s0 } 3 enquanto = fa ca 4 s removeP rimeiro( ) 5 se s G ent~ ao devolva caminho(s) 6 {s} 7 insereEmOrdem(sucessoresF (s, A) , ) 8 devolva fracasso Nesse algoritmo, a fun ca o sucessoresF devolve uma lista de estados sucessores e seus respectivos custos g (s) + h(s) (necess arios para estabelecer a ordem dos estados na la de prioridades ascendente), que s ao dados pela fun ca o f (s). Exemplo 7. Vamos continuar com o Problema das Rotas, cujos custos das a co es foram especicados na subse ca o 5.1 e cujos valores da fun ca o heur stica foram denidos no exemplo 6. O rastreamento de BuscaA (A, a, [k ]) produz a a rvore de busca da Figura 9, onde os estados est ao numerados na ordem em que s ao expandidos durante a busca e cada um deles tem associada a soma de seu custo com a sua heur stica. Observe que o uso da fun ca o custo g (s) garante que o algoritmo encontre uma solu ca o de custo m nimo (como na busca pelo menor custo) e, ao mesmo tempo, o uso da heur stica h(s) reduz o espa co de busca explorado, melhorando a eci encia do algoritmo (como na busca pela melhor estimativa). Exerc cio 19 Desenhe a a rvore de busca, para o Problema das Rotas, quando o algoritmo BuscaA e chamado com s0 = k e G = {[a]}. Exerc cio 20 No Quebra-Cabe ca de 8, cada a ca o tem custo 1. Usando a heur stica da soma das dist ancias, desenhe a a rvore de busca gerada pelo algoritmo A , quando o estado inicial do quebra-cabe ca e [[1, 2, 3], [b, 6, 4], [8, 7, 5]].

Busca no Espa co de Estados


a : 0+15 vai(a,b) b : 7+7 vai(b,f) vai(b,i) i : 11+5 vai(i,k) k : 16+0 vai(a,c) c : 9+6 vai(c,j) j : 14+3 vai(a,d) d : 3+14

19

PSfrag replacements
s s1 s2

f : 10+7

meta atingida

Figura 9. Arvore de busca gerada pelo algoritmo BuscaA

Implementa c ao dos algoritmos de busca em Prolog

O c odigo a seguir implementa em Swi-Prolog, vers ao 5.2.7, um algoritmo de busca gen erico que deve ser parametrizado com o tipo de busca que se deseja realizar, conforme as instru co es dadas no coment ario.
/*-----------------------------------------------------------------------------------+ | Algoritmo de busca gen erico (selecione uma estrat egia) | | Para executar, especifique o problema (veja anexo B) e digite: | | ?- busca. <enter> | +-----------------------------------------------------------------------------------*/ % % % % % % % selecione a estrat egia de busca desejada 1 - largura 2 - profundidade 3 - menor custo 4 - melhor estimativa 5 - A* modificando a linha a seguir

estrat egia(5). busca :- inicial(So), busca([0-0-0-So-[]],[]). busca([_-G-_-Estado-Caminho|_],_) :meta(M), member(Estado,M), !, reverse(Caminho,Solu ca ~o), estrat egia(T), (T=1 -> N = busca em largura ; T=2 -> N = busca em profundidade ; T=3 -> N = busca pelo menor custo ; T=4 -> N = busca pela melhor estimativa ; T=5 -> N = busca A), format(~nEstrat egia........: ~w, [N]), format(~nCusto da solu ca ~o..: ~w,[G]), format(~nSeq ue ^ncia de a co ~es: ~w~n,[Solu ca ~o]). busca([_-G-_-Estado-Caminho|ListaEstados],Expandidos) :sucessores(Estado,Sucessores), union([Estado],Expandidos,NovosExpandidos), subtract(Sucessores,NovosExpandidos,SucessoresNaoExpandidos), estende(G,Estado,Caminho,SucessoresNaoExpandidos,NovosEstados), insere(NovosEstados,ListaEstados,NovaListaEstados),

20

S. L. Pereira
busca(NovaListaEstados,NovosExpandidos).

sucessores(Estado,Sucessores) :findall(X,oper(_,Estado,X,_),Sucessores).

estende(_,_,_,[],[]). estende(X,E,C,[S|Ss],[F-G-H-S-[A|C]|Ps]) :oper(A,E,S,Y), G is X+Y, h(S,H), estrat egia(Tipo), (Tipo=1 -> F is 0 ; Tipo=2 -> F is 0 ; Tipo=3 -> F is G ; Tipo=4 -> F is H ; Tipo=5 -> F is G+H), estende(X,E,C,Ss,Ps).

insere(NovosEstados,ListaEstados,NovaListaEstados) :estrat egia(Tipo), (Tipo=1 -> append(ListaEstados,NovosEstados,NovaListaEstados) ; Tipo=2 -> append(NovosEstados,ListaEstados,NovaListaEstados) ; append(ListaEstados,NovosEstados,Lista), sort(Lista,NovaListaEstados)).

Exemplo de especica c ao de problema em Prolog

/*-----------------------------------------------------------------------------------+ | Especifica ca ~o do Problema das Rotas | +-----------------------------------------------------------------------------------*/ % defina as a co ~es do problema % atribua custo 1 se as a co ~es n~ ao tiverem custo via(a,b,7). via(d,e,1). via(a,c,9). via(f,g,2). via(a,d,3). via(g,h,3). via(b,f,3). via(i,k,5). via(b,i,4). via(j,l,6). via(c,j,5). via(k,l,4).

oper(vai(A,B),A,B,C) :- via(A,B,C). oper(vai(A,B),A,B,C) :- via(B,A,C). % defina o estado inicial e a meta inicial(a). meta([k]). % defina a fun ca ~o heur stica % declare h(_,0), se n~ ao houver heur stica a ser utilizada h(a,15). h(g,8). h(b,7). h(h,5). h(c,6). h(i,5). h(d,14). h(j,3). h(e,15). h(k,0). h(f,7). h(l,4).

Refer encias
1. 2. 3. 4. Amble, T. Logic Programming and Knowledge Engineering, Addison-Wesley, 1987. Bratko, I. Prolog - Programming for Articial Intelligence, Addison-Wesley, 1990. Rich, E. and Knight, K. Intelig encia Articial, 2a ed., Makron Books, 1995. Russell, S. and Norvig, P. Articial Intelligence - A Modern Approach, Prentice-Hall, 1995. 5. Sterling, L. and Shapiro, E. The Art of Prolog, MIT Press, 1986.