You are on page 1of 6

Uma aplicaca o de busca do menor

caminho com obstaculos


Carlos Henrique Silva Galdino1 , Raphael Pereira de Faria1
1

Instituto de Ciencias Exatas


Universidade Federal de Itajuba(UNIFEI)
Campus Prof. Jose Rodrigues Seabra
{carloshsgaldino,raphaelpfmontanaro}@gmail.com

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 field in the area of Artificial
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 propoe a realizar um estudo sobre a busca do caminho
de menor custo entre dois pontos, de modo que a soma dos pesos dos nos constituintes deste trajeto seja minimizada. Este problema da teoria dos grafos e
considerado como solucionado, embora ainda sejam pesquisadas otimizaco es
para a sua resoluca o. Apos a analise do estado da arte deste campo da a rea da
Inteligencia Artificial, o artigo mostra as diretrizes tomadas na implementaca o
do software, que exemplifica o que aqui for descrito.

1. Introduca o
Em sua essencia, a busca de caminho e simplesmente o processo de movimento de um
local inicial ao destino desejado [Bourg & Seeman 2004]. Encontrar tecnicas de busca
de caminho que sejam efetivas e importante para o sucesso dessa a rea na inteligencia
artificial, e em a reas que se beneficiam desse avanco, como os jogos.
Existem muitas tecnicas. Uma pode se sobressair em certas circunstancias, mas se
comportar de maneira severamente errada em outras. O sucesso de uma dada abordagem
depende dos requerimentos e a` suposico es do problema. Quanto mais fatores tenham de
ser levados em consideraca o, maior sera a complexidade da soluca o. A busca de caminho,
entretanto, e complexa.
Este trabalho se propoe a encontrar o menor caminho entre dois pontos, e tres
algoritmos foram levados em consideraca o: Best-First Search, algoritmo de Dijkstra e
A*(le-se a estrela).

2. Revisao bibliografica
2.1. Best-First Search
O algoritmo Best-First Search tem a sua execuca o baseada na equaca o
f (n) = h(n)

f (n) representa o custo para se alcancar o objetivo. No BFS, o custo e representado 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 consideraca o o quanto
ainda deve ser percorrido, em um dado momento da busca, do ponto atual ao ponto final
[Patel 2009].
Uma representaca o do algoritmo e [adaptado de Pearl 1984 & Millington 2006]:
1. Crie uma lista, OPEN(aberta), na qual o no inicial I e inserido.
2. Se OPEN esta vazia, entao o algoritmo termina.
3. Remova de OPEN o no N em que o valor de f (N ) seja o menor possvel, e o
adicione em uma lista CLOSED(fechada).
4. Expanda o no N.
5. Se qualquer um dos nos expandidos a partir de N e o no de destino, retorne sucesso
e a soluca o (fazendo o caminho de volta de I ate S).
6. Para cada um dos nos expandidos E:
(a) calcule o valor de f (E);
(b) Se E nao se encontra em quaisquer uma das listas, adicione-o a` lista OPEN.
7. Va para 2.
O algoritmo mantem duas listas. A primeira, aberta, representa o conjunto de
nos que ainda podem ser pesquisados e utilizados na composica o do caminho. Ja a lista
fechada contem todos nos que ja foram visitados, e que nao precisam ser examinados
novamente.
Como dito anteriormente, o algoritmo leva em consideraca o apenas o quao perto
um dado no se encontra do no final. Os nos expandidos (E) a partir de N sao todos os nos
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 nao se limita apenas a grafos, podendo ser
modificada para grids compostos por quadrados ou hexagonos, por exemplo.
A estrutura de cada no deve permitir a referencia ao seu pai. Todo no E, expandido
de N, tem como pai este u ltimo. Assim, apos a expansao de nos, e a sua inclusao nas listas
determinadas, tem-se o caminho entre S e I.
Por tras de sua simplicidade, o BFS esconde uma imperfeica o: nao ha garantia
de que ele encontre o menor caminho. Entretanto, ele e executado muito mais veloz que
o algoritmo de Dijkstra, porque o BFS usa a funca o heurstica para guiar o seu caminho
ate o destino de maneira rapida. Por exemplo, se o destino se encontra ao sul da posica o
inicial, o BFS focara em caminhos que sejam guiados nessa direca o[Patel 2009]. Perceba
que a heurstica deve ser admissvel, como descrito abaixo.
2.2. Algoritmo de Dijkstra
Este algoritmo tem sua base na formula:
f (n) = g(n)
Aqui, f (n) e composta apenas por g(n), a qual leva em consideraca o o quanto
foi percorrido ate agora entre o no atual e o no inicial. O seu algoritmo e semelhante ao

BFS, sendo modificado apenas no calculo de f (n). Alem disso, o algoritmo de Dijkstra
deve, no passo 6 do algoritmo acima, verificar se o no expandido E ja se encontra na lista
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 no N nao seja negativo, e que
haja memoria e tempo suficientes. Alem disso, em sua implementaca o original [Dijkstra 1959], tal algoritmo realiza uma busca desinformada, na qual nao se conhece o no
final. De fato, o algoritmo procura o menor caminho de todos os nos expandidos ate o
no de origem, algo que pode se mostrar ineficiente, mas que nao acontece ao se utilizar o
algoritmo do BFS. E como qualquer problema de otimizaca o combinatorial pode ser formulado como um problema de busca do menor caminho, o algoritmo de Dijkstra tambem
e de grande valia ao apresentar soluco es nessa a rea.
2.3. A*
O algoritmo A* faz uma combinaca o dos dois algoritmos mostrados acima, sendo baseado
na equaca o [Russel & Norvig 2009]
f (n) = g(n) + h(n)
Diferentemente dos algoritmos acima, o A* considera os custos do no inicial ate o no
corrente e o custo do no corrente ate o no final. Atraves dessa funca o de avaliaca o o
algoritmo e capaz de encontrar a soluca o mais barata, onde o custo depende do contexto
em que esta sendo aplicado, que por exemplo pode ser quantidade de nos do caminho
ou tempo gasto para se chegar ao destino. Abaixo temos uma representaca o do pseudocodigo do algoritmo [adaptado de Bourg & Seeman 2004]:
1. Adicione o no inicial a` lista OPEN.
2. Enquanto a lista OPEN nao estiver vazia, faca:
(a) O no corrente sera o no de menor custo da lista OPEN.
(b) Se o no corrente for igual ao no destino, entao o caminho esta completo e
o algoritmo termina.
(c) Senao, mova o no corrente da lista OPEN para a lista CLOSED e examine
cada no adjacente ao no corrente.
(d) Para cada no adjacente, faca:
i. Se o no nao esta na lista OPEN e nao esta na lista CLOSED e nao
e um obstaculo, entao:
ii. Mova-o para a lista OPEN e calcule o valor de f (n).
Onde OPEN representa a lista dos nos que ainda nao foram analisados e CLOSED a lista
dos nos ja visitados.
2.4. Heursticas
Segundo [Patel 2009] a funca o heurstica informa a estimativa do menor custo de um no n
ate o destino, sendo importante para um bom funcionamento do A* a escolha de uma boa
funca o 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* ira funcionar de forma

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 necessario
escolher uma heurstica admissvel, onde nunca se superestime o custo para se chegar ao
destino. A seguir serao apresentadas duas heursticas admissveis.
2.4.1. Distancia de Manhattan
Segundo [Patel 2009] a funca o dessa heurstica e :
h(n) = D (|n.x destino.x| + |n.y destino.y|)
onde D representa o custo para se mover de um no n para um no adjacente. Assim o
valor total sera D vezes a soma das diferencas absolutas das coordenadas do no corrente
e destino.
2.4.2. Distancia Euclidiana
A funca o 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 distancia euclidiana conhecida. A distancia euclidiana por ser menor que a de manhattan ira encontrar os menores caminhos, mas sera um
pouco mais lenta por expandir um numero maior de nos.

3. Metodologia
O software desenvolvido realiza a busca do caminho de menor custo entre um ponto
inicial e um ponto final em um grid com 45 quadrados de largura por 45 de altura. O
grid e utilizado para se manter as informaco es da busca, e o algoritmo extrai dele as
informaco es necessarias (como se estivesse trabalhando em cima de um grafo).
Alem disso, e possvel conceder diferentes tipos de custo a cada quadrado no grid
(de maneira abstrata, o caminho normal e de cor branca representaria um caminho sem
complicaco es, como asfalto; um caminho mais resistente poderia ser a grama, e outro
de ainda maior rigidez e que atrasa o movimento, pantano). E finalmente, caso seja
de interesse, pode-se conceder a um quadrado o status de obstaculo, o qual nao podera
participar do caminho encontrado pelo algoritmo. Apos a escolha dos quadrados (ponto
inicial, final, terrenos e obstaculos), o aplicativo se encarrega de encontrar o caminho
desejado (caso haja algum - do contrario, uma mensagem de que nao existe caminho
entre tais quadrados aparece).
O algoritmo de escolha desta aplicaca o e o A*. Seu sucesso reside no fato de
ele combinar a informaca o que o algoritmo de Dijkstra utiliza, com a estimativa dada
pelo BFS. Outro fator de grande importancia e o facil manuseio de diferentes custos de
terrenos. E finalmente, a heurstica escolhida foi a Distancia de Manhattan, por ser admissvel, e diferentemente da euclidiana, ocorre uma menor expansao de nos[Patel 2009].

A linguagem de programaca o usada foi Java, tanto pela familiaridade dos autores
quanto pela facilidades que ela apresenta. Uma otimizaca o bem-vinda ao algoritmo A*
e a troca da lista OPEN por uma Fila de Prioridade que tenha uma representaca o interna baseada em Heap. Dessa maneira, o algoritmo apresentara uma maior eficiencia na
extraca o do elemento de menor prioridade (aquele em que f (n) e o menor), o que resulta em um algoritmo mais veloz. Tal representaca o e encontrada na linguagem Java por
meio da coleca o Priority Queue. Java tambem apresenta artifcios graficos que auxiliam
na exibica o dos resultados conquistados pelo algoritmo.

4. Apresentaca o dos resultados


A seguir serao apresentadas algumas telas do aplicativo desenvolvido.

Figura 1. Tela Inicial

de um possvel cenario

Figura 2. Configuracao
para a busca

do caminho encontrado pelo algoritmo


Figura 3. Exibicao

5. Analise dos Resultados


O metodo A* funcionou de modo perfeito para a soluca o do problema, sendo bem eficiente e calculando quase instantaneamente o caminho. Ele levou em conta os terrenos
com pesos distintos, assim como considerou tambem os obstaculos. A desvantagem
do metodo e ter de manter em memoria todos os nos visitados, o que para um grande
numero de possibilidades pode aumentar consideravelmente o processamento e calculo
da soluca o.

6. Conclusao
Apos apresentarmos alguns dos algoritmos que solucionam o problema da busca de caminho, podemos concluir que o algoritmo escolhido para implementaca o, no caso o A*
foi a melhor escolha, devido a` facilidade de adaptaca o a` diferentes contextos, facilidade
tambem de compreensao e implementaca o do mesmo e e claro a` sua eficiencia para a
resoluca o do problema proposto. Fatores como familiaridade com a linguagem Java e os
recursos que a mesma oferece para a programaca o tambem facilitaram o processo de desenvolvimento e todo o codigo, bem como o aplicativo desenvolvido podem ser acessados
no seguinte endereco: http://code.google.com/p/projetoia2009v2/

7. Bibliografia
BOURG, David M.; SEEMANN, Glenn. AI for Game Developers. North Mankato:
OReilly Media, Inc., 2004.
MILLINGTON, Ian. Artificial Intelligence for Games (The Morgan Kaufmann Series in Interactive 3D Technology). Greensboro: Morgan Kaufmann, 2006.
RUSSELL, Stuart J.; NORVIG, Peter. Artificial 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.

You might also like