articulo a star

25
1.- TÍTULO “BÚSQUEDA HEURÍSTICA: ALGORITMO DE A* PARA JUEGOS DE ESTRATEGIAS“ 3.- RESUMEN La búsqueda es una de las técnicas más utilizadas para resolver los problemas de pathfinding o planificación que se presentan en la inteligencia artificial en los juegos de vídeo. En particular, la búsqueda es utilizada para resolver el problema de la navegación. La constante evolución de los juegos de vídeo ha llevado a que la inteligencia artificial constituya uno de los aspectos más importantes; es fundamental que los agentes (entidades autónomas) controlados por la computadora se comporten en forma inteligente. Un problema característico es la navegación, que consiste en determinar el camino más conveniente entre una posición inicial y una posición de destino. Si bien el planteo del problema es sencillo, el mismo está lejos de ser trivial debido a la creciente complejidad de los entornos simulados y los requerimientos de tiempo real de los juegos modernos 4.- ABSTRACT Search is one of the most widely used techniques for solving problems or planning pathfinding that occur on artificial intelligence in video games. In particular, search is used to solve the problem of navigation. The constant evolution of video games has led to artificial intelligence constitutes one

Upload: grett

Post on 21-Jun-2015

420 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Articulo a Star

1.- TÍTULO

“BÚSQUEDA HEURÍSTICA: ALGORITMO DE A* PARA JUEGOS DE

ESTRATEGIAS“

3.- RESUMEN

La búsqueda es una de las técnicas más utilizadas para resolver los problemas de

pathfinding o planificación que se presentan en la inteligencia artificial en los juegos

de vídeo. En particular, la búsqueda es utilizada para resolver el problema de la

navegación.

La constante evolución de los juegos de vídeo ha llevado a que la inteligencia artificial

constituya uno de los aspectos más importantes; es fundamental que los agentes

(entidades autónomas) controlados por la computadora se comporten en forma

inteligente. Un problema característico es la navegación, que consiste en determinar el

camino más conveniente entre una posición inicial y una posición de destino. Si bien el

planteo del problema es sencillo, el mismo está lejos de ser trivial debido a la creciente

complejidad de los entornos simulados y los requerimientos de tiempo real de los

juegos modernos

4.- ABSTRACT

Search is one of the most widely used techniques for solving problems or planning

pathfinding that occur on artificial intelligence in video games. In particular, search is

used to solve the problem of navigation.

The constant evolution of video games has led to artificial intelligence constitutes one

Page 2: Articulo a Star

of the most important, it is essential that the agents (autonomous entities) controlled

by the computer to behave intelligently. A typical problem is navigation, which

involves determining the most convenient route between a starting position and a

target position. While the problem statement is simple, it is far from trivial due to the

increasing complexity of simulated environments and real-time requirements of

modern games

5.- PALABRAS CLAVE

Algoritmo, búsqueda, heurística, pathfinding, método Manhattan, grafos, nodos.

6.- INTRODUCCIÓN

Los métodos de búsqueda heurísticas (del griego heuriskein, que significa encontrar)

están orientados a reducir la cantidad de búsqueda requerida para encontrar una

solución. Cuando un problema es presentado como un árbol de búsqueda el enfoque

heurístico intenta reducir el tamaño del árbol cortando nodos pocos prometedores.

Estos métodos se llaman métodos fuertes porque ellos son más poderosos que los

estudiados hasta aquí al incorporar conocimiento heurístico o heurística. Hay una

contradicción entre generalidad y potencia en el sentido que los métodos débiles son

esencialmente aplicables universalmente mientras que los fuertes son menos

universales en su aplicabilidad y el conocimiento o heurística usada en un problema

dado puede no ser totalmente aplicable o ser inaplicable en otro dominio o tarea.

Feigenbaum y Feldman definen la heurística como sigue: "Una heurística es una regla

para engañar, simplificar o para cualquier otra clase de ardid el cual limita

drásticamente la búsqueda de soluciones en grandes espacios de estados".

En esencia una heurística es simplemente un conjunto de reglas que evalúan la

posibilidad de que una búsqueda va en la dirección correcta. Generalmente los

métodos de búsqueda heurísticas se basan en maximizar o minimizar algunos aspectos

del problema.

Page 3: Articulo a Star

7.- REVISIÓN HISTÓRICA

A diferencia de la mayoría de teoremas clásicos de las Matemáticas, muchos de los

algoritmos que resuelven de manera eficiente problemas implementados sobre grafos

se descubrieron hace relativamente poco tiempo, en el pasado siglo. Así tenemos el

algoritmos de Dijkstra (de 1959) que permite, por ejemplo, calcular el camino más

corto entre dos ciudades sobre un mapa de carreteras, o el de Kruskal (de 1957) que

permite, por ejemplo, saber el trazado de líneas telefónicas que interconecten

distintos usuarios al menor costo gracias a que halla el árbol recubridor de peso

mínimo.

Hay otros problemas más clásicos, como el de los puentes de Königsberg, ya analizado

por Euler, que tuvieron solución hace tiempo gracias al algoritmo de Fleury. Este

algoritmo nos permite, cuando es posible, resolver los típicos problemas de trazar un

dibujo sin levantar el lápiz de papel y sin pasar más de una vez por el mismo sitio.

El algoritmo de búsqueda A* (A Asterisco) se clasifica dentro de los algoritmos de

búsqueda en grafos. Presentado por primera vez en 1968 por Peter E. Hart, Nils J.

Nilsson y Bertram Raphael, el algoritmo encuentra, siempre y cuando se cumplan unas

determinadas condiciones, el camino de menor coste entre un nodo origen y uno

objetivo.

8.- ESTADO DEL ARTE

Minería de datos, búsqueda de comportamiento en los datos.

Procesamiento de imágenes.

Medicina humana, software médicos, control de tumores, problemas

cancerígenos, VESALIO.

En la aeronavegación y transporte, el pilotaje automático, búsquedas de rutas

más próximas.

Page 4: Articulo a Star

Video juegos de estrategia, camino más corto, ejemplo Pacman: Los fantasmas

que persiguen a Pacman buscan el camino más corto, en lugar de aparecer en

forma aleatoria en el Mapa del Juego.

Juegos, ejemplo Age of Empires, un juego de conquista de civilizaciones, los

enemigos salvan obstáculos para llegar a la ciudad del adversario.

Otros juegos como el StarCarf y WarCraft tambien hacen uso de este algoritmo

para hallar el camino más corto de que deben recorrer sus personajes.

El SpamAssassin que usa una amplia variedad de reglas heurísticas para

determinar cuando un correo electrónico es spam. Cualquiera de las reglas

usadas de forma independiente pueden llevar a errores de clasificación, pero

cuando se unen múltiples reglas heurísticas, la solución es más robusta y

creíble. Esto se llama alta credibilidad en el reconocimiento de patrones

(extraído de las estadísticas en las que se basa). Cuando se usa la palabra

heurística en el procesamiento del lenguaje basado en reglas, el

reconocimiento de patrones o el procesamiento de imágenes, es usada para

referirse a las reglas.

9.- CUERPO DEL TRABAJO

9.1.- MARCO TEÓRICO

La búsqueda es una técnica para resolver problemas cuya solución consiste en una

serie de pasos que frecuentemente deben determinarse mediante la prueba

sistemática de las alternativas. Desde los inicios de la Inteligencia Artificial, la

búsqueda se ha aplicado en diversas clases de problemas como juegos de dos

Page 5: Articulo a Star

jugadores, problemas de satisfacción de restricciones y problemas de un único

agente.

Por lo tanto se puede decir que los algoritmos de búsqueda heurística son método

computacional para resolver problemas de pathfinding “búsqueda de la mejor ruta

del punto A al punto B”.

De los distintos tipos de algoritmos de búsqueda, los algoritmos búsqueda

heurística completa se encuentran ampliamente difundidos, el algoritmo A* es el

algoritmo de búsqueda heurística más popular.

9.1.1.- DEFINICIÓN

El algoritmo A* (denominado A estrella) es un algoritmo para la búsqueda de

caminos que te intenta encontrar el camino óptimo. Es decir, el camino más corto

pero con menor coste. Da la mejor solución pero el coste computacional es alto, en

comparación con otro.

El algoritmo A* es el único que garantiza, sea cual sea la función heurística, que se

tiene en cuenta el camino recorrido y por ende es mejor que la versión más

extendida de "primero el mejor", aquélla que sólo considera la distancia a la meta.

En definitiva, sí tiene razón en el caso concreto que usted plantea, pero no la tiene

en general.

9.1.2.- REPRESENTACIÓN

A continuación se muestra la clásica representación del algoritmo A *.

( ) ( ) ( )

Donde:

Page 6: Articulo a Star

g (n) es la distancia total que ha tomado para llegar desde la posición inicial a la

ubicación actual.

h '(n) es la estimación de la distancia desde la posición actual con el destino, es

una función heurística se utiliza para crear esta estimación sobre cuán lejos se está

para alcanzar la meta.

f '(n) es la suma de g (n) y h' (n). Este es el camino actual estimado más corto. f

(n) es el verdadero camino más corto que no se descubrieron hasta que el algoritmo

A * ha terminado.

Ejemplo: Una familia cuando se dirige de vacaciones, y uno pregunta al padre que

esta al volante, "¿Cuánto más falta para llegar?", a lo cual el Papa dirá supongo

"Otras 300 millas”, si la familia ya había conducido 100 millas en ese punto, que

representan g (n), el total de distancia recorrida hasta el momento. La estimación

de 300 millas se h '(n), el adivinar en cuánto más sería. Por lo tanto, el f '(n) sería de

100 + 300 = 400 millas.

Ejemplo de un Pequeño Juego

Cálculo de la distancia desde el punto de inicio al objetivo

9.1.3.- CARACTERISTICAS

Realiza la búsqueda informada teniendo en cuenta dos factores fundamentales,

el valor heurístico de los nodos y el coste real del recorrido.

Se utiliza en la búsqueda de un camino más corto.

Page 7: Articulo a Star

El Algoritmo no desarrolla un camino por interacción, sino que desarrolla varios

caminos y elige los más prometedores.

Tiene algunas buenas referencias y consejos acerca elementos de juego de la

programación y la industria del juego, ejemplo tetris, camino más corto entre

dos puntos.

Es una combinación entre búsquedas del tipo primero en anchura con primero

en profundidad: mientras que h(n) tiende a primero en profundidad, g(n)

tiende a primero en anchura. De este modo, se cambia de camino de búsqueda

cada vez que existen nodos más prometedores.

Si para todo nodo n del grafo se cumple que g(n) = 0, nos encontramos ante

una búsqueda voraz. Si para todo nodo n del grafo se cumple h(n) = 0, el

algoritmo A* pasa a ser una búsqueda de coste uniforme no informada.

Para garantizar la optimalidad del algoritmo, la función h(n) debe ser admisible,

quiere decir que no sobrestime el coste real de alcanzar el nodo objetivo, si

fuese así el algoritmo pasa a denominarse simplemente A, debido a que no se

asegura que el resultado obtenido sea el camino de coste mínimo.

Debido a que se tiene que almacenar todos los posibles siguientes nodos de

cada estado, la cantidad de memoria que requerirá será exponencial con

respecto al tamaño del problema.

9.1.4.- SEGUIMIENTO Y EXPLICACION DEL ALGORITMO

Para explicar el funcionamiento del algoritmo primero vamos a ver algunas

definiciones funcionamientos previos respecto a las áreas de búsquedas.

Page 8: Articulo a Star

INTRODUCCIÓN:

El Área de Búsqueda

Vamos a asumir que tenemos a alguien que quiere ir desde el punto A hasta el

punto B.

Asumamos también que un muro separa estos dos puntos, esto se puede ver

en el gráfico siguiente, donde el recuadro verde es el punto de inicio A, el rojo

es el punto de destino B y la zona azul el muro que hay entre ambos.

Representación del Área de Búsqueda

Lo primero que deberías advertir es que hemos dividido nuestra área de

búsqueda en una rejilla cuadrada. Simplificar el área, tal y como hemos hecho,

es el primer paso en un pathfinding. Este particular método reduce nuestra

área de búsqueda a una simple matriz bidimensional. Cada elemento de la

matriz representa uno de los cuadrados de la rejilla, y su estado se almacena

como transitable o intransitable. El camino se elige calculando qué cuadros

deberíamos pisar para ir desde A hasta B. Una vez que el camino haya sido

encontrado, el personaje de nuestro juego (o lo que sea) se moverá desde el

centro de un cuadrado hacia el centro del siguiente hasta que el objetivo haya

sido alcanzado.

A esos puntos centrales se les llama "nodos". Cuando leas en cualquier otro

sitio sobre pathfinding, a menudo verás a gente hablando sobre nodos. ¿Acaso

no es más fácil referirse a ellos como cuadrados? Esto se debe a que es posible

Page 9: Articulo a Star

dividir nuestra área en otras cosas aparte de cuadrados. Podrían ser

rectangulares, hexagonales, o de cualquier otra forma; y podrían situarse en

cualquier lugar dentro de esas formas - en el centro, por los bordes, o en

cualquier lugar. Se usa este sistema porque es el más simple.

Iniciando la Búsqueda

Una vez que hemos simplificado nuestro área de búsqueda en un número de

nodos accesible, tal y como hemos hecho con la rejilla de la figura anterior, el

siguiente paso es dirigir una búsqueda para encontrar el camino más corto. En

el pathfinding A*, lo hacemos empezando desde el punto A, comprobando los

cuadros adyacentes y generalmente buscando hacia fuera hasta que

encontremos nuestro destino.

Empezamos la búsqueda haciendo lo siguiente:

1. Empieza en el punto inicial A y añádelo a una "lista abierta" de cuadrados a

tener en cuenta. La lista abierta es como una lista de la compra. Ahora

mismo solo tenemos un elemento en la lista, pero más tarde tendremos

más. La lista contiene los cuadrados que podrían formar parte del camino

que queremos tomar, pero que quizás no lo haga.

Básicamente, esta es una lista de los cuadrados que necesitan ser

comprobados.

2. Mira en todos los cuadrados alcanzables o transitables adyacentes al punto

de inicio, ignorando cuadrados con muros, agua u otros terrenos

prohibidos. Añádelos a la lista abierta también. Por cada uno de esos

cuadrados, guarda el punto A como su “cuadrado padre". El cuadrado

padre es muy importante para trazar nuestro camino. Se explicará más

adelante.

Page 10: Articulo a Star

3. Saca el cuadro inicial A desde tu lista abierta y añádelo a una "lista cerrada"

de cuadrados que no necesitan, por ahora, ser mirados de nuevo.

En este punto, deberías tener algo como la siguiente ilustración. En este diagrama,

el cuadrado verde oscuro del centro es tu cuadrado de inicio. Está bordeado de azul

claro para indicar que el cuadrado ha sido añadido a la lista cerrada. Todos los

cuadros adyacentes están ahora en la lista abierta para ser comprobados, están

bordeados con verde claro. Cada uno tiene un puntero gris que señala a su padre, el

cual es el cuadro inicial.

Inicio de la Búsqueda

Después, elegimos uno de los cuadrados adyacentes de la lista abierta y más o

menos repetimos el proceso anterior como se describe un poco más abajo. Pero,

¿cual cuadro debemos elegir?

Aquel que tenga el coste F más bajo.

Puntuando el camino

La clave para determinar que cuadrados usaremos para resolver el camino está

en la siguiente ecuación:

F = G + H

Page 11: Articulo a Star

Donde

G = el coste de movimiento para ir desde el punto inicial ‘A’ a un cierto

cuadro de la rejilla, siguiendo el camino generado para llegar allí.

H = el coste de movimiento estimado para ir desde ese cuadro de la rejilla

hasta el destino final, el punto B. Esto es a menudo nombrado como la

heurística, la cual puede ser un poco confusa. La razón por la cual es

llamada así, se debe a que es una suposición. Realmente no sabemos la

distancia actual hasta que encontramos el camino, ya que toda clase de

cosas pueden estar en nuestro camino (muros, agua, etc.), existen

muchas formas de calcular H.

Nuestro camino se genera por ir repetidamente a través de nuestra lista abierta

y eligiendo el cuadrado con la puntuación F más baja. Este proceso se describirá

con más detalle un poco más adelante. Primero veamos más de cerca cómo

calculamos la ecuación.

Tal y como está descrito más arriba, G es el coste de movimiento para ir desde

el punto de inicio a un cierto cuadro usando el camino generado para llegar allí.

En este ejemplo asignaremos un coste de 10 a cada cuadro vertical u horizontal

hacia el que nos movamos, y un coste de 14 para un movimiento diagonal.

Usamos estos números porque la distancia actual para mover diagonalmente es

el cuadrado de la raíz de 2 (no temas), o más o menos 1,414 veces el coste del

movimiento horizontal o vertical. Usamos 10 y 14 con el fin de simplificar. El

rango es bastante bueno, y así nos libramos de tener que calcular raíces

cuadradas y sus decimales. Esto no es solo porque seamos idiotas y no nos

gusten las matemáticas; usar números enteros también es mucho más rápido

para el ordenador. Pronto descubrirás que el pathfinding puede ser muy lento

si no usas atajos como este.

Page 12: Articulo a Star

Ahora que hemos calculado el coste G mediante un camino específico hasta

cierto cuadrado, la forma de resolver el coste G del cuadrado es coger el coste

G de su padre, y luego añadirle 10 o 14 dependiendo de si está en diagonal u

ortogonal (no diagonal) con respecto a ese cuadro padre.

Este método se hará más claro cuando llevemos este ejemplo un poco más allá

y nos alejemos un cuadro del inicial.

H puede ser estimado de diferentes maneras. El método que hemos usado aquí

se llama el método Manhattan, donde calculas el número total de cuadros

movidos horizontalmente y verticalmente para alcanzar el cuadrado destino

desde el cuadro actual, sin hacer uso de movimientos diagonales. Luego

multiplicamos el total por 10. Se llama método Manhattan porque es como

calcular el número de manzanas que hay desde un lugar a otro, donde no

puedes acortar atravesando en diagonal una manzana. Debemos señalar que

cuando calculamos H, ignoramos cualquier obstáculo que intervenga. Es una

estimación de la distancia que queda, no de la distancia actual, es por eso que

se llama heurística.

F se calcula sumando G y H. El resultado del primer paso en nuestra búsqueda

puede ver se en la ilustración inferior. Las puntuaciones F, G y H están escritas

en cada cuadrado. En el cuadro inmediatamente a la derecha de cuadro inicial,

la F está impresa arriba a la izquierda, la G abajo a la izquierda y la H abajo la

derecha.

Page 13: Articulo a Star

Paso Nº1 del Algoritmo

Así pues, vamos a mirar algunos ejemplos de estos cuadros. En el cuadrado con

letras, G =10. Esto es debido a que está solo a un cuadro del cuadrado inicial en

dirección horizontal. Los cuadrados inmediatamente encima, abajo y a la

izquierda del cuadrado inicial; tienen todos el mismo valor G de 10. Los cuadros

diagonales tienen un valor G de 14. Las puntuaciones H se calculan estimando

la distancia Manhattan hasta el cuadrado rojo objetivo, moviéndose solo

horizontal y verticalmente e ignorando el muro que está en el camino.

Usando este método, el cuadro de la derecha del inicial, está a 3 cuadros del

cuadrado rojo con a puntuación H de 30. El cuadrado está a solo 4 cuadros de

distancia (recuerda que solo nos movemos en horizontal y vertical) con una

puntuación H de 40. Probablemente comprendas como se calculan las

puntuaciones H para los demás cuadros.

De nuevo, la puntuación F de cada cuadro se calcula simplemente sumando G y

H.

Page 14: Articulo a Star

Continuando la búsqueda

Para continuar la búsqueda, simplemente elegimos la puntuación F más baja de

todos aquellos que estén en la lista abierta. Después hacemos lo siguiente con

el cuadro seleccionado:

4. Sácalo de la lista abierta y añádelo a la lista cerrada.

5. Comprueba todos los cuadrados adyacentes, ignorando aquellos que estén

en la lista cerrada o que sean intransitables terrenos con muros, agua, o

cualquier terreno prohibido), añade los cuadros a la lista abierta si no están

ya en esa lista. Haz al cuadro seleccionado el "padre" de los nuevos cuadros.

6. Si el cuadro adyacente ya está en la lista abierta, comprueba si el camino a

ese cuadro es mejor que este. En otras palabras, comprueba que la G de

ese cuadro sea más baja que la del que estamos usando para ir allí. Si no es

así, no hagas nada. Por otro lado, si el coste G del nuevo camino es más

bajo, cambia el padre del cuadro adyacente al cuadro seleccionado (en el

diagrama superior, cambia la dirección del puntero para que señale al

cuadro seleccionado). Finalmente, recalcula la F y la G de ese cuadrado. Si

esto te parece confuso, podrás verlo ilustrado más abajo.

Ahora vamos a ver cómo funciona. De nuestros 9 cuadros iniciales, dejamos 8

en la lista abierta después de que el cuadrado inicial fuera incluido en la lista

cerrada. De estos, el que tiene el coste F más bajo es el de inmediatamente a la

derecha del cuadro inicial, con una F de 40. Así que seleccionamos este

cuadrado como nuestro siguiente cuadrado. Está resaltado en azul en la imagen

mostrada.

Page 15: Articulo a Star

Selección del F menor

Primero, lo sacamos de nuestra lista abierta y lo añadimos a nuestra lista

cerrada (por que ahora está resaltado en azul). Luego comprobamos los

cuadros adyacentes. Todos los que hay a la derecha son cuadros de muro, así

que no los tenemos en cuenta. El de la izquierda es el cuadrado inicial; ese está

en la lista cerrada, así que lo ignoramos también.

Los otros 4 cuadrados ya están en la lista abierta, así que necesitamos

comprobar si alguno de los caminos hasta esos cuadros es mejor que el del

cuadrado actual hasta ellos. Para eso usaremos la puntuación G como punto de

referencia. Miremos debajo de nuestro cuadrado seleccionado; su G actual es

14. Si fuésemos a través del cuadro actual hasta allí, la G sería igual a 20 (10, la

G del cuadro actual, más 10 de un movimiento vertical hacia el cuadro superior).

Una G de 20 es mayor que una de 14, así que no es un buen camino. Todo eso

debería cobrar sentido si miras el diagrama. Es más directo llegar a ese cuadro

desde el cuadro inicial moviéndote un cuadro en diagonal, que moverte

horizontalmente un cuadro y luego verticalmente otro.

Page 16: Articulo a Star

Cuando repetimos este proceso para los otros 4 cuadros adyacentes que ya

están en la lista abierta, descubrimos que ninguno de los caminos ha mejorado

por ir a través del cuadro actual (el de la derecha bordeada de azul), así que

pasamos de él. Ahora que hemos mirado en todos los cuadros adyacentes y ya

nos hemos hecho con este nuevo cuadro, estamos listos para movernos al

siguiente cuadrado.

Recorremos el grupo de cuadros de nuestra lista abierta, ahora ha bajado a 7

cuadrados, cogemos el que tenga el coste F más bajo. Interesante, en este caso

hay dos cuadros que tienen una puntuación de 54. Así que, ¿cual elegimos? La

verdad es que no importa. Para propósitos de velocidad, puede ser más rápido

elegir el último que añadimos a la lista abierta. Esto influencia a la búsqueda en

favor de cuadros que fueron encontrados más tarde justo cuando estés más

cerca de alcanzar tu objetivo. De todas formas no es verdaderamente

importante.

Así pues, y ya que lo elegimos anteriormente, escogemos el cuadro justo

debajo del cuadrado que desechamos antes. La siguiente figura se ve más claro:

Buscando el camino óptimo

Page 17: Articulo a Star

Esta vez, cuando comprobamos los cuadrados adyacentes encontramos que el

de la izquierda y el superior a este son cuadros de muro así que los ignoramos.

Tampoco tenemos en cuenta el cuadro que está debajo del muro. ¿Por qué?

Porque no puedes llegar a ese cuadrado sin que tu personaje se raspe el

hombro con la esquina al intentar pasar en diagonal; lo mejor es dar un

pequeño rodeo, primero bajando y luego yendo hacia la derecha. (Nota: Esta

regla de bordear esquinas es opcional. Su uso depende de cómo estén situados

tus nodos.)

Eso nos deja otros 5 cuadros. Los otros 2 cuadros bajo el actual no están en la

lista abierta así que los añadimos y el cuadro actual se convierte en su padre.

De esos otros 3 cuadros, 2 ya están en la lista cerrada (el cuadro inicial, y el

cuadro que hay encima del actual, ambos resaltados en azul en el diagrama) así

que los ignoramos. El último cuadro, el de la izquierda del cuadro actual, se

comprueba para ver si el coste G hasta él desde el cuadro actual, es menor que

llegando directamente desde el cuadro inicial. Lo hacemos y no hay suerte, así

que ya estamos listos para comprobar el siguiente cuadro de nuestra lista

abierta.

Repetimos este proceso hasta que añadimos el cuadro objetivo a la lista abierta,

en ese momento parecería algo como la imagen de abajo:

Page 18: Articulo a Star

Ejecución de la Búsqueda

Observa que el cuadro padre para el cuadrado dos cuadros por debajo del

cuadro inicial ha cambiado desde la ilustración anterior. Antes tenía un coste G

de 28 y apuntaba al cuadrado encima suya y a la derecha. Ahora tiene una

puntuación de 20 y apunta al cuadrado encima de ella.

Esto ocurrió en algún momento por la forma en la que se ejecuta nuestra

búsqueda, donde la puntuación G fue comprobada y devuelta más baja usando

un nuevo camino - el padre cambió y G y F fueron recalculadas. A pesar de que

este cambio no parece demasiado importante en este ejemplo, hay muchas

posibles situaciones donde este constante control significará la diferencia en la

determinación del mejor camino hasta tu objetivo.

Pero, ¿cómo determinamos el camino actual en sí mismo? Fácil, sólo empiezas

desde el cuadro objetivo rojo, y vas hacia atrás de un cuadrado a su padre,

siguiendo las flechas. Eso te llevará de vuelta al cuadrado inicial y tus

movimientos serán el camino a seguir. Debería parecerse a la siguiente

ilustración. Moverse desde el cuadro inicial A hasta el cuadro destino B es solo

cuestión de ir moviéndose desde el centro de un cuadro (el nodo) al siguiente

hasta alcanzar el objetivo

Page 19: Articulo a Star

Recorrido final de la Búsqueda

Page 20: Articulo a Star

9.2.- APLICACIÓN

9.2.1.- Algoritmo A *

Ahora que has leído la explicación, vamos a resumir el método paso a paso:

1) Añade el cuadro inicial a la lista abierta.

2) Repite lo siguiente:

a. Busca el cuadro con el coste F más bajo en la lista abierta. Nos referimos a

este como el cuadro actual.

b. Cámbialo a la lista cerrada

c. Para cada uno de los 8 cuadros adyacentes al cuadro actual...

Si no es transitable o si está en la lista cerrada, ignóralo. En cualquier

otro caso haz lo siguiente.

Si no está en la lista abierta, añádelo a la lista abierta. Haz que el

cuadro actual sea el padre de este cuadro. Almacena los costes F, G y

H del cuadro.

Si ya está en la lista abierta, comprueba si el camino para ese es

mejor usando el coste G como baremo. Un coste G menor significa

que este es un mejor camino. Si es así, cambia el padre del cuadrado

al cuadro actual y recalcula G y F del cuadro. Si estás manteniendo la

lista abierta por orden de puntuación F, podrías necesitar reordenar

la lista para llevar cuenta del cambio.

d. Para cuando:

añadas el cuadro objetivo a la lista abierta en cuyo caso el camino ha

sido encontrado, o

falles en encontrar el cuadro objetivo y la lista abierta esté vacía. En

este caso no hay camino.

Page 21: Articulo a Star

3) Guarda el camino. Muévete hacia atrás desde el cuadro objetivo, ve

desde cada cuadro a su padre hasta que alcances el cuadro inicial. El camino

seguido es el que buscas.

9.2.2.- Desarrollo del Algoritmo A*

Requisitos:

Visual C# 2008

Net Framework 3.5

La aplicación está construida en el lenguaje de programación C# 2008, y

contiene los siguientes archivos:

Aplicación desarrollada en C#

El entorno de trabajo es Microsoft Visual Studio 2008:

Entorno de desarrollo

Page 22: Articulo a Star

Al ejecutar la aplicación, se mostrará una rejilla con una celda pintada de rojo,

la cual marcará el objetivo, es decir el punto final; y la celda verde, la cual

marcaremos nosotros, marcará el inicio.

Interfaz de la Aplicación

En la parte inferior de la interfaz se muestran distintas opciones, con ellas

podemos modificar el punto de inicio como el punto de fin, y con la opción “X”

podemos colocar obstáculos.

Page 23: Articulo a Star

Obteniendo el camino más corto con presencia de obstáculos

En el lado derecho también hay distintas opciones. En este caso hemos

ejecutado la aplicación con la opción que permite recorrido en diagonal y

utilizando la fórmula de Manhattan.

Page 24: Articulo a Star

10.- CONCLUSIONES

Utilizando el algoritmo A*, existe un coste de cálculo de la heurística en cada

nodo para así poder obtener el camino más corto y un ahorro de esfuerzo en la

búsqueda.

La implementación involucra almacenar todos los posibles siguientes nodos de

cada estado, la cantidad de memoria que requerirá será exponencial con

respecto al tamaño del problema.

El algoritmo A* es muy utilizado en juegos de estrategia, referente al

movimiento de objetos encontrando el camino más corto, conocido como

simulación de tráfico.

11.- RECOMENDACIONES

Se recomienda utilizar el algoritmo A* en búsquedas complejas, ya que si

utilizamos este algoritmo para búsquedas donde exista poca información, el

costo del cálculo será mayor al ahorro del esfuerzo en la búsqueda.

Page 25: Articulo a Star

12.- REFERENCIAS BIBLIOGRÁFICAS

Tenenbaum Aaron, Augenstein Moshe. Data Structures.Prentice-Hall (1981)

Thurber Kenneth, Patton Peter C. Data Structures and Computer Architecture. Lexington Books(1977)

Magidin Matluk Mario, Estructuras de Datos. Ed. Trillas (1991) 1era ed.

Manber Udi, Introduction to Algorithms Addison-Wesley (1989)

Wirth Niklaus, Algorithms and Data Structures. Prentice-Hall (1986)

Joyanes Aguilar Luis, Fundamentos de programación. Algoritmos y estructura de datos. McGraw-Hill(1988)

Sisa Alberto Jaime, Estructuras de información. McGraw-Hill(1989)

Manber Udi, Introduction to Algoritms, A Creative Approach. Addison-Wesley(1989)

Arranz Ramonet Antonio, Administración de datos y archivos por computadora. Limusa(1987)

Joyanes Aguilar Luis, Fundamentos de programación. Algoritmos y estructura de datos. McGraw-Hill(1988)

Enciclopedia del lenguaje C#.

GLOSARIO

Algoritmo

Búsqueda

Heurística

Pathfinding

Método Manhattan

Grafos

Nodos.