You are on page 1of 6

Uma aplicacao de busca do menor caminho com obst culos a

Carlos Henrique Silva Galdino1 , Raphael Pereira de Faria1 Instituto de Ci ncias Exatas e Universidade Federal de Itajub (UNIFEI) a Campus Prof. Jos Rodrigues Seabra e
{carloshsgaldino,raphaelpfmontanaro}@gmail.com
1

Abstract. This paper proposes a study in the area of the shortest path between two points, such that the sum of the weights of its constituent edges is minimized. This problem is solved in the graph theory, although there still exists research for optimizations. After analyzing the state of art of this eld in the area of Articial Intelligence, the paper shows the guidelines that were followed in order to reach a software implementation, that exemplify what is to be described here. Resumo. Este artigo se prop e a realizar um estudo sobre a busca do caminho o de menor custo entre dois pontos, de modo que a soma dos pesos dos n s cono stituintes deste trajeto seja minimizada. Este problema da teoria dos grafos e considerado como solucionado, embora ainda sejam pesquisadas otimizacoes para a sua resolucao. Ap s a an lise do estado da arte deste campo da area da o a Intelig ncia Articial, o artigo mostra as diretrizes tomadas na implementacao e do software, que exemplica o que aqui for descrito.

1. Introducao
Em sua ess ncia, a busca de caminho e simplesmente o processo de movimento de um e local inicial ao destino desejado [Bourg & Seeman 2004]. Encontrar t cnicas de busca e de caminho que sejam efetivas e importante para o sucesso dessa area na intelig ncia e articial, e em areas que se beneciam desse avanco, como os jogos. Existem muitas t cnicas. Uma pode se sobressair em certas circunst ncias, mas se e a comportar de maneira severamente errada em outras. O sucesso de uma dada abordagem ` depende dos requerimentos e a suposicoes do problema. Quanto mais fatores tenham de ser levados em consideracao, maior ser a complexidade da solucao. A busca de caminho, a entretanto, e complexa. Este trabalho se prop e a encontrar o menor caminho entre dois pontos, e tr s o e algoritmos foram levados em consideracao: Best-First Search, algoritmo de Dijkstra e A*(l -se a estrela). e

2. Revis o bibliogr ca a a
2.1. Best-First Search O algoritmo Best-First Search tem a sua execucao baseada na equacao f (n) = h(n)

f (n) representa o custo para se alcancar o objetivo. No BFS, o custo e repre sentado exclusivamente pelo h(n), a heurstica a ser utilizada. Uma heurstica e uma estimativa que auxilia na busca do menor caminho, e que leva em consideracao o quanto ainda deve ser percorrido, em um dado momento da busca, do ponto atual ao ponto nal [Patel 2009]. Uma representacao do algoritmo e [adaptado de Pearl 1984 & Millington 2006]: 1. Crie uma lista, OPEN(aberta), na qual o n inicial I e inserido. o 2. Se OPEN est vazia, ent o o algoritmo termina. a a 3. Remova de OPEN o n N em que o valor de f (N ) seja o menor possvel, e o o adicione em uma lista CLOSED(fechada). 4. Expanda o n N. o o 5. Se qualquer um dos n s expandidos a partir de N e o n de destino, retorne sucesso o e a solucao (fazendo o caminho de volta de I at S). e 6. Para cada um dos n s expandidos E: o (a) calcule o valor de f (E); ` (b) Se E n o se encontra em quaisquer uma das listas, adicione-o a lista OPEN. a 7. V para 2. a O algoritmo mant m duas listas. A primeira, aberta, representa o conjunto de e n s que ainda podem ser pesquisados e utilizados na composicao do caminho. J a lista o a fechada contem todos n s que j foram visitados, e que n o precisam ser examinados o a a novamente. Como dito anteriormente, o algoritmo leva em consideracao apenas o qu o perto a um dado n se encontra do n nal. Os n s expandidos (E) a partir de N s o todos os n s o o o a o os quais, considerando-se que o algoritmo e aplicado a um grafo, consegue-se chegar por meio uma aresta orientada de N a E. Esta ideia n o se limita apenas a grafos, podendo ser a modicada para grids compostos por quadrados ou hex gonos, por exemplo. a A estrutura de cada n deve permitir a refer ncia ao seu pai. Todo n E, expandido o e o de N, tem como pai este ultimo. Assim, ap s a expans o de n s, e a sua inclus o nas listas o a o a determinadas, tem-se o caminho entre S e I. Por tr s de sua simplicidade, o BFS esconde uma imperfeicao: n o h garantia a a a de que ele encontre o menor caminho. Entretanto, ele e executado muito mais veloz que o algoritmo de Dijkstra, porque o BFS usa a funcao heurstica para guiar o seu caminho at o destino de maneira r pida. Por exemplo, se o destino se encontra ao sul da posicao e a inicial, o BFS focar em caminhos que sejam guiados nessa direcao[Patel 2009]. Perceba a que a heurstica deve ser admissvel, como descrito abaixo. 2.2. Algoritmo de Dijkstra Este algoritmo tem sua base na f rmula: o f (n) = g(n) Aqui, f (n) e composta apenas por g(n), a qual leva em consideracao o quanto foi percorrido at agora entre o n atual e o n inicial. O seu algoritmo e semelhante ao e o o

BFS, sendo modicado apenas no c lculo de f (n). Al m disso, o algoritmo de Dijkstra a e deve, no passo 6 do algoritmo acima, vericar se o n expandido E j se encontra na lista o a aberta, mas apresenta um valor menor do que o que encontrado antes, devendo portanto ser substitudo. Diferentemente do BFS, o algoritmo de Dijkstra sempre encontra o caminho ideal entre S e I, desde que o custo para se chegar a algum n N n o seja negativo, e que o a haja mem ria e tempo sucientes. Al m disso, em sua implementacao original [Dijko e stra 1959], tal algoritmo realiza uma busca desinformada, na qual n o se conhece o n a o nal. De fato, o algoritmo procura o menor caminho de todos os n s expandidos at o o e n de origem, algo que pode se mostrar ineciente, mas que n o acontece ao se utilizar o o a algoritmo do BFS. E como qualquer problema de otimizacao combinatorial pode ser for mulado como um problema de busca do menor caminho, o algoritmo de Dijkstra tamb m e e de grande valia ao apresentar solucoes nessa area. 2.3. A* O algoritmo A* faz uma combinacao dos dois algoritmos mostrados acima, sendo baseado na equacao [Russel & Norvig 2009] f (n) = g(n) + h(n) Diferentemente dos algoritmos acima, o A* considera os custos do n inicial at o n o e o corrente e o custo do n corrente at o n nal. Atrav s dessa funcao de avaliacao o o e o e algoritmo e capaz de encontrar a solucao mais barata, onde o custo depende do contexto em que est sendo aplicado, que por exemplo pode ser quantidade de n s do caminho a o ou tempo gasto para se chegar ao destino. Abaixo temos uma representacao do pseudo c digo do algoritmo [adaptado de Bourg & Seeman 2004]: o ` 1. Adicione o n inicial a lista OPEN. o 2. Enquanto a lista OPEN n o estiver vazia, faca: a (a) O n corrente ser o n de menor custo da lista OPEN. o a o (b) Se o n corrente for igual ao n destino, ent o o caminho est completo e o o a a o algoritmo termina. (c) Sen o, mova o n corrente da lista OPEN para a lista CLOSED e examine a o cada n adjacente ao n corrente. o o (d) Para cada n adjacente, faca: o i. Se o n n o est na lista OPEN e n o est na lista CLOSED e n o o a a a a a e um obst culo, ent o: a a ii. Mova-o para a lista OPEN e calcule o valor de f (n). Onde OPEN representa a lista dos n s que ainda n o foram analisados e CLOSED a lista o a dos n s j visitados. o a 2.4. Heursticas Segundo [Patel 2009] a funcao heurstica informa a estimativa do menor custo de um n n o at o destino, sendo importante para um bom funcionamento do A* a escolha de uma boa e ` funcao heurstica. Alguns dos possveis fatos que temos de considerar quanto a escolha da heurstica e que se a heurstica for igual a zero, o algoritmo A* ir funcionar de forma a

semelhante ao algoritmo de Dijkstra e se considerarmos uma heurstica onde o seu valor e relativamente alto ao valor de g(n), o algoritmo se torna um BFS. Assim e necess rio a escolher uma heurstica admissvel, onde nunca se superestime o custo para se chegar ao destino. A seguir ser o apresentadas duas heursticas admissveis. a 2.4.1. Dist ncia de Manhattan a Segundo [Patel 2009] a funcao dessa heurstica e: h(n) = D (|n.x destino.x| + |n.y destino.y|) onde D representa o custo para se mover de um n n para um n adjacente. Assim o o o valor total ser D vezes a soma das diferencas absolutas das coordenadas do n corrente a o e destino. 2.4.2. Dist ncia Euclidiana a A funcao desta heurstica e: h(n) = D (n.x destino.x)2 + (n.y destino.y)2

onde D e o mesmo que na heurstica apresentada anteriormente, diferindo apenas que nesse caso consideramos a tradicional dist ncia euclidiana conhecida. A dist ncia euclida a iana por ser menor que a de manhattan ir encontrar os menores caminhos, mas ser um a a pouco mais lenta por expandir um n mero maior de n s. u o

3. Metodologia
O software desenvolvido realiza a busca do caminho de menor custo entre um ponto inicial e um ponto nal em um grid com 45 quadrados de largura por 45 de altura. O grid e utilizado para se manter as informacoes da busca, e o algoritmo extrai dele as informacoes necess rias (como se estivesse trabalhando em cima de um grafo). a Al m disso, e possvel conceder diferentes tipos de custo a cada quadrado no grid e (de maneira abstrata, o caminho normal e de cor branca representaria um caminho sem complicacoes, como asfalto; um caminho mais resistente poderia ser a grama, e outro de ainda maior rigidez e que atrasa o movimento, p ntano). E nalmente, caso seja a de interesse, pode-se conceder a um quadrado o status de obst culo, o qual n o poder a a a participar do caminho encontrado pelo algoritmo. Ap s a escolha dos quadrados (ponto o inicial, nal, terrenos e obst culos), o aplicativo se encarrega de encontrar o caminho a desejado (caso haja algum - do contr rio, uma mensagem de que n o existe caminho a a entre tais quadrados aparece). O algoritmo de escolha desta aplicacao e o A*. Seu sucesso reside no fato de ele combinar a informacao que o algoritmo de Dijkstra utiliza, com a estimativa dada a pelo BFS. Outro fator de grande import ncia e o f cil manuseio de diferentes custos de a terrenos. E nalmente, a heurstica escolhida foi a Dist ncia de Manhattan, por ser ad a missvel, e diferentemente da euclidiana, ocorre uma menor expans o de n s[Patel 2009]. a o

A linguagem de programacao usada foi Java, tanto pela familiaridade dos autores quanto pela facilidades que ela apresenta. Uma otimizacao bem-vinda ao algoritmo A* e a troca da lista OPEN por uma Fila de Prioridade que tenha uma representacao in terna baseada em Heap. Dessa maneira, o algoritmo apresentar uma maior eci ncia na a e extracao do elemento de menor prioridade (aquele em que f (n) e o menor), o que re sulta em um algoritmo mais veloz. Tal representacao e encontrada na linguagem Java por meio da colecao Priority Queue. Java tamb m apresenta artifcios gr cos que auxiliam e a na exibicao dos resultados conquistados pelo algoritmo.

4. Apresentacao dos resultados


A seguir ser o apresentadas algumas telas do aplicativo desenvolvido. a

Figura 1. Tela Inicial

Figura 2. Conguracao de um possvel cenario para a busca

Figura 3. Exibicao do caminho encontrado pelo algoritmo

5. An lise dos Resultados a


O m todo A* funcionou de modo perfeito para a solucao do problema, sendo bem ee ciente e calculando quase instantaneamente o caminho. Ele levou em conta os terrenos com pesos distintos, assim como considerou tamb m os obst culos. A desvantagem e a do m todo e ter de manter em mem ria todos os n s visitados, o que para um grande e o o n mero de possibilidades pode aumentar consideravelmente o processamento e c lculo u a da solucao.

6. Conclus o a
Ap s apresentarmos alguns dos algoritmos que solucionam o problema da busca de camo inho, podemos concluir que o algoritmo escolhido para implementacao, no caso o A* ` foi a melhor escolha, devido a facilidade de adaptacao a diferentes contextos, facilidade ` ` tamb m de compreens o e implementacao do mesmo e e claro a sua eci ncia para a e a e resolucao do problema proposto. Fatores como familiaridade com a linguagem Java e os recursos que a mesma oferece para a programacao tamb m facilitaram o processo de de e senvolvimento e todo o c digo, bem como o aplicativo desenvolvido podem ser acessados o no seguinte endereco: http://code.google.com/p/projetoia2009v2/

7. Bibliograa
BOURG, David M.; SEEMANN, Glenn. AI for Game Developers. North Mankato: OReilly Media, Inc., 2004. MILLINGTON, Ian. Articial Intelligence for Games (The Morgan Kaufmann Series in Interactive 3D Technology). Greensboro: Morgan Kaufmann, 2006. RUSSELL, Stuart J.; NORVIG, Peter. Articial intelligence a modern approach. Upper Saddle River, N.J: Prentice Hall/Pearson Education, 2003. PEARL, Judea. Heuristics intelligent search strategies for computer problem solving. Reading, Mass: Addison-Wesley Pub. Co., 1984. DIJKSTRA, E. W. (1959). A note on two problems in connexion with graphs. Numerische Mathematik , 1 (1), 269-271. PATEL, Amit. Amits Notes about Path-Finding. Palo Alto, maio. 2009. Disponvel em: . Acesso em: 05 nov. 2009.