Você está na página 1de 45

Maestra en Sistemas Computacionales

Dr. Salvador Herrera Velarde

A*
Unidad III. Algoritmos Heursticos

Zofa Bentez Alonso


Lizbeth Hernndez Oln
INTRODUCCIN

A*
Es un algoritmo de bsqueda que
encuentra la ruta de menor costo
entre dos puntos.
Siempre que se cumplan una serie de condiciones
INTRODUCCIN

Est clasificado dentro de los


algoritmos de bsqueda en grafos,

Brinda a los mecanismos robticos,


vehiculares o virtuales un sistema
de navegacin autnomo.
INTRODUCCIN
Es ampliamente utilizado en
las ciencias de la
computacin:
Para encontrar rutas
Determinar que tan
transitable es una grfica,
El proceso de trazado de la
ruta ms eficiente entre dos
puntos llamados nodos.
Este algoritmo goza de una aceptable y
continua implementacin gracias a su
desempeo y precisin.
ORGENES DEL ALGORITMO A*

1964 1967
Nils Nilson Bertran Raphael
Algoritmo A1 Algoritmo A2
Mejora Dijkstra Optimalidad no demostrable
ORGENES DEL ALGORITMO A*

1968
Peter Hart
Kleene star
Descrito por primera vez.
DESCRIPCIN DEL ALGORITMO A*

Es un algoritmo que se encarga de


encontrar la ruta que representa un
menor costo entre un punto A y otro
B.

Es una tcnica de bsqueda de


grafos que utiliza una funcin
heurstica.

Ya que trata de mtodos exploratorios


durante la resolucin del problema.
DESCRIPCIN DEL ALGORITMO A*

La solucin se descubre por la


evaluacin del progreso logrado en
la bsqueda de un resultado final
denotada por f(x)

f(x) es una aproximacin de f(x)


La cuales el resultado de la suma de
otras dos funciones,

h(x) y g(x)
DESCRIPCIN DEL ALGORITMO A*

g(x) Indica el costo del camino que se


ha seguido hasta un cierto nodo.

Proporciona una estimacin de la


h(x) distancia del punto o nodo en que
nos encontramos hasta la meta.

f(x) = h(x) + g(x)


DESCRIPCIN DEL ALGORITMO A*
h(x) = costo [ abs (nodox objetivox)
+ abs(nodoy objetivoy) ]

Donde:
Costo: Representa el valor explcito de
movernos de nuestro punto actual al siguiente
en alguna direccin dada, si no se especifica se
toma como unitario ya que pertenece a una
distribucin uniforme.
DESCRIPCIN DEL ALGORITMO A*
h(x) = costo [ abs (nodox objetivox)
+ abs(nodoy objetivoy) ]

Abs: representa el valor absoluto de la


operacin dentro del parntesis.
DESCRIPCIN DEL ALGORITMO A*
h(x) = costo [ abs (nodox objetivox)
+ abs (nodoy objetivoy) ]

nodox, nodoy: son las coordinadas (x,y) del


nodo en el que nos encontramos actualmente.
DESCRIPCIN DEL ALGORITMO A*
h(x) = costo [ abs (nodox objetivox)
+ abs (nodoy objetivoy) ]

objetivox, objetivoy: representa las coordenadas


de posicin de nuestra meta u objetivo al cual
deseamos llegar.
DESCRIPCIN DEL ALGORITMO A*
Posteriormente g(x) se representa de la siguiente
manera:

g(x) = 1 + a (padreg 1)

Donde:
a: representa un valor entre 0 y 1 dado por las
circunstancias del problema a resolver.
Padreg: es el valor obtenido de la ecuacin g(x) del
anterior nodo padre. Cuando iniciamos los clculos por
primera vez, este valor es 0 para el nodo origen.
En esta ecuacin se debe prestar atencin especial
conforme se vaya avanzando, ya que se debe sumar el
resultado obtenido en la ecuacin anterior el mismo
valor g del padre anterior de nueva forma, es decir,
tendramos algo as:
DESCRIPCIN DEL ALGORITMO A*

Este algoritmo
consiste entonces en
atravesar una grfica
De esta forma siguiendo una ruta
podemos empezar a con el menor costo
realizar los clculos conocido.
para cada uno de los
nodos que se vayan
analizando.
DESCRIPCIN DEL ALGORITMO A*

Mantiene una cola sorteada de prioridades con segmentos de


rutas alternas a lo largo del camino para que si en un
momento dado la ruta que se est siguiente arroja un valor
(costo) superior en comparacin con otro segmento de ruta
encontrado, esta abandona esa ruta actual de alto costo y en
vez de ella toma la que le brinda un camino ms barato.

De esta forma el proceso sigue hasta alcanzar la meta u


objetivo.
DESCRIPCIN DEL ALGORITMO A*
Empezando en un nodo inicial dado, el
algoritmo expande el nodo con un menor
valor de f(x). Este algoritmo mantiene un
conjunto de soluciones parciales
almacenadas en una cola de prioridad.
El proceso continua hasta que una meta tiene
un valor f(x) menor que cualquier otro nodo
en la cola o hasta que el rbol ha sido
recorrido completamente.
DESCRIPCIN DEL ALGORITMO A*
Como aspecto positivo podemos considerar
que ningn otro algoritmo ptimo nos
garantiza expandir menos nodos que A*, pero
ste requiere un alto consumo de memoria.
PROPIEDADES DEL ALGORITMO A*

Para garantizar la optimalidad del


algoritmo, la funcin h(n) debe ser
admisible, esto es, que no
sobrestime el costo real de
alcanzar el nodo objetivo.

De no cumplirse dicha condicin, el


algoritmo pasa a denominarse
simplemente A, y a pesar de seguir
siendo completo, no se asegura que
el resultado obtenido sea el camino
de costo mnimo.
PSEUDOCDIGO
A*
Inicializar la Lista ABIERTOS

Inicializar la Lista CERRADOS

Crear el nodo_final; llamar el nodo_final

Crear el nodo_inicial; llamar el nodo_inicial

Agregar el nodo_inicial a la Lista ABIERTOS

While the Lista ABIERTOS is not empty

Obtener el nodo n de la lista OPEN con la f (n) de menor costo

Agregar n a la Lista CERRADOS

Si n es igual al nodo_final se ha encontrado la solucin.

Solution(n)

Se genera un nodo sucesor n para cada nodo de n

Establecer el padre de n a n

Establecer h(n) como la distancia estimada de forma heurstica al


nodo_final

Establecer a g(n) para que sea g(n) ms el costo de llegar a n


desde n

Establecer f(n) para que sea g(n) ms h(n)


Si n est en la Lista ABIERTOS y la que existe es mejor, entonces descartar n y
continuar Si n est en la Lista CERRADOS y la que existe es mejor, entonces descartar n y
continuar Remover ocurrencias de n de ABIERTOS y CERRADOS
Agregar n a la Lista ABIERTOS
}
}
Return error
/*Si se llega a este punto, quiere decir que se ha buscado en todos los nodos accesibles
y todava no se ha encontrado la solucin, por lo tanto no existe*/
FUNCIONAMIENTO
SIMPLIFICADO
A*
A* Simplificado Colocar el nodo de comienzo en la lista ABIERTA y calcular la funcin de coste
f(n), siendo ahora g(n) = 0 y h(n) la distancia entre la posicin actual y la meta.

Los obstculos se incluyen directamente en la lista CERRADA.

Eliminar de la lista ABIERTA el nodo con la funcin de coste de mnimo valor y


colocarla en CERRADA. Este es el nodo n. Si se produce empate entre dos
nodos elegir uno de ellos aleatoriamente. Si uno de los nodos en ABIERTA es
el nodo meta, entonces seleccionarlo, recuperar los punteros de los
antecesores y generar la solucin. Actualizar el coste para alcanzar el nodo
padre con el fin de poder calcular posteriormente la nueva funcin de coste
h(n). En caso contrario continuar en el punto 4.

Determinar todos los nodos sucesores de n y calcular la funcin de coste para


cada sucesor que NO est en la lista CERRADA.
Asociar con cada sucesor que NO est ni en ABIERTA ni CERRADA el coste
calculado, f(n), y poner esos sucesores en la lista ABIERTA. Asignar punteros a
n (n es el nodo padre). Con cualquiera de los sucesores que ya estaban en
ABIERTA calcular el menor coste de entre el que ya tena y el recin calculado:
min(nuevo f(n), viejo f(n)).
Ir al paso 3
CDIGO
A*
public Camino calcularCaminoMasCorto(...) {
...
listaCerrada = new ArrayList<Nodo>();
listaAbierta = new ListaNodosOrdenadas();
...
while(listaAbierta.size() != 0) {
Nodo actual = listaAbierta.getFirst();
listaAbierta.remove(actual);
listaCerrada.add(actual);
for(Nodo vecino : actual.getNeighborList()) {
boolean esMejorVecino;
if (listaCerrada.contains(vecino))
continue;
...
float distanciaDesdeElPrincipioAlVecino = (actual.getDistanceFromStart() + map.getDistanceBetween(actual,
vecino)); if(!listaAbierta.contains(vecino)) {
listaAbierta.add(vecino);
esMejorVecino = true;
} else if(distanciaDesdeElPrincipioAlVecino < actual.getDistanceFromStart()) {
esMejorVecino = true;
} else { esMejorVecino = false; }
if (esMejorVecino) {
vecino.setPreviousNode(actual);
vecino.setDistanceFromStart(distanciaDesdeElPrincipioAlVecino);
vecino.setHeuristicDistanceFromGoal(heuristic.calcularDistanciaAMeta(vecino.getX(), vecino.getY(),
...);
}
...
}
} return null;
}
CASO DE ESTUDIO
A* Simplificado
Preliminar
Se trata de implementar
una versin reducida del
algoritmo A*.
El objetivo consiste en
simular la navegacin de
un vehculo (terrestre,
areo o martimo) en un
espacio determinado hacia
la consecucin de un
objetivo (target).
Planteamiento y restricciones
El espacio de navegacin se plantea como una cuadrcula de
dimensin MxN, cuyas celdas son los nodos.
Dicha cuadrcula tendr nodos inalcanzables, por diferentes
motivos: inaccesibles, peligrosos, etc.
Se parte de un punto inicial y se debe tratar de llegar al
objetivo por la ruta ptima obtenida por el algoritmo A*.
Las celdas marcadas con el aspa roja son prohibidas, lo que
significa que las mismas no formarn parte del proceso de
expansin de los nodos.
Las celdas se pueden atravesar en vertical, horizontal y
diagonal.
Planteamiento y restricciones
A* utiliza como funcin de evaluacin f(n) = h(n) + g(n); donde h(n) es la
distancia (costo) al nodo n (actual) y g(n) es la distancia (costo) al nodo
meta.
Seleccin del nodo sucesor de uno dado: se elige el de menor coste
total f(n).
Clculo de las distancias: la distancia entre dos nodos se determina
calculando la distancia en lnea recta entre dos nodos. Esto podra no
ser totalmente correcto debido a que existen obstculos que deben ser
rodeados. No obstante est demostrado que el algoritmo nunca
sobreestima la distancia actual y por tanto la propiedad de admisibilidad
del algoritmo se mantiene.
Si se tiene idea de la posicin del objetivo, determinadas expansiones
pueden evitarse. Por ejemplo si el objetivo est a la derecha del nodo
inicial, los nodos situados a la izquierda de ste pueden obviarse.
Visualizacin Se establece una matriz de
5x5
5

1 2 3 4 5
Visualizacin Posicin de inicio (1,1)

5
Posicin meta (5,2)

1 2 3 4 5
Visualizacin Posicin de inicio (1,1)

5
Posicin meta (5,2)

4
Obstculos

1 2 3 4 5
Visualizacin El nico nodo sucesor en
este caso es (1,2), no
5 existe otra posibilidad de
4
eleccin.

1 2 3 4 5
Visualizacin El nico nodo sucesor en
este caso es (1,2), no
5 existe otra posibilidad de
4
eleccin.

3
(1,3)

1 2 3 4 5
Visualizacin El nico nodo sucesor en
este caso es (1,2), no
5 existe otra posibilidad de
4
eleccin.

3
(1,3)

2
(1,4)

1 2 3 4 5
Visualizacin El nico nodo sucesor en
este caso es (1,2), no
5 existe otra posibilidad de
4
eleccin.

3
(1,3)

2
(1,4)

1
(2,5)
1 2 3 4 5
Visualizacin Opciones

5
(3,4) o (3,5)

Evaluemos las funciones


f(n) para cada uno de ellos
3

2 suponiendo que las


1
dimensiones de los
cuadrados son 1x1.
1 2 3 4 5
Nodo (3,4)
g(n) = dist((1,1),(1,2)) + dist((1,2),(1,3)) + dist((1,3),(1,4)) +
dist((1,4),(2,5)) + dist((2,5),(3,4)) = 1 + 1 + 1 + 1.41 + 1.41= 5.82
h(n) = dist((3,4),(5,2)) = sqrt((5-3)^2+(2-4) ^2) = sqrt(8) = 2.82
f(n) = 5.82 + 2.82 = 8.64

Nodo (3,5)
g(n) = dist((1,1),(1,2)) + dist((1,2),(1,3)) + dist((1,3),(1,4)) +
dist((1,4),(2,5)) + dist((2,5),(3,5)) = 1 + 1 + 1 + 1.41 + 1= 5.41
h(n) = dist((3,5),(5,2)) = sqrt((5-3)^2+(2-5) ^2) = sqrt(13) = 3.61
f(n) = 5.41 + 3.61 = 9.02
Visualizacin En este caso, el nodo
elegido sera el (3,4) como
5 el sucesor del (2,4)
4

1 2 3 4 5
COMPLEJIDAD COMPUTACIONAL DEL
ALGORITMO
La complejidad computacional del algoritmo est
ntimamente relacionada con la calidad de la heurstica
que se utilice en el problema.
En el peor caso, con una heurstica de psima calidad, la
complejidad ser exponencial, mientras que..
En el mejor caso, con una buena h(n), el algoritmo se
ejecutar en tiempo real. Para que esto suceda, se debe
cumplir que

Donde h* es una heurstica ptima para el problema como


por ejemplo, el coste real de alcanzar un objetivo.
COMPLEJIDAD EN MEMORIA
El espacio requerido por A* para ser
ejecutado es su mayor problema. Dado que
tiene que almacenar todos los posibles
siguientes nodos de cada estado, la
cantidad de memoria que requerir ser
exponencial con respecto al tamao del
problema.
Aplicaciones
Vehculo caminando por un terreno.
Avin volando de un punto a otro.
De manera general este algoritmo se
utiliza para encontrar el camino mas
corto entre dos puntos dados, pero
dentro de sus otras aplicaciones se
utiliza en juegos para determinar el
recorrido que un objeto debe realizar;
ejemplo:
Video juego pacman: (En el que se
aplica el comportamiento de los
fantasmitas.
En la resolucin de los problemas de
Sudoku de 8 variable.
Para resolver el cubo Rubik
mostrndonos cmo hacerlo con la
menor cantidad de movidas.
A tomar en cuenta
Debemos tener en cuenta que hay
circunstancias en las que no es sencillo
encontrar una buena funcin heurstica
pero tambin es vlido especificar que
sea cero, ya que la misma debe ser
estimada por defecto.
Gracias
Alguna Pregunta?

Você também pode gostar