Diferencia entre revisiones de «Inteligencia artificial para videojuegos/Estrategias de búsqueda informada»

Contenido eliminado Contenido añadido
Lsanabria (discusión | contribs.)
Correcciones de formato
Sin resumen de edición
 
Línea 1:
Las estrategias de búsqueda informada se basan en aplicar un conocimiento al proceso de búsqueda para hacerlo masmás eficiente. Este conocimiento o función nonos ayudaraayudará a estimar quequé camino o estado es masmás prometedor, es decir quequé configuración estaestá masmás cercana del objetivo final.
 
Por lo tanto:
Línea 8:
== Concepto de heurística ==
 
Del griego heuriskein, descubrir. En nuestro caso es la función que nos ayudaraayudará a acércanosacercarnos al objetivo planteado.
 
La función heurística:
Línea 18:
== Primero el mejor (Best First Search) ==
 
Analizar preferentemente los mejores nodos. Para saber cualescuáles son los mejores utilizaremos una función heurística ''f'' para evaluarlos, que estima el coste total de la función. Los ordenaremos de tal forma que el primer nodo será el que tenga la heurística mas baja. Por lo tanto estarán ordenados en función de ''f'' y no de ''g'', que devuelve el coste de la raíz al nodo.
 
== Primero el mejor - Voraz (Greedy BFS) ==
Línea 25:
* No es completa, una mala heurística podría hacer tomar un camino infinito.
* No es óptima, no garantiza soluciones con el menor número de operaciones.
* La complejidad espacio-temporal es de 0(r ^m), donde ''r'' es el factor de ramificación y ''m'' la profundidad del árbol de búsqueda.
 
Sin embargo escogiendo una buena función heurística puedese pueden reducir mucho los costes.
 
== A Estrella (A*) ==
 
Algoritmo basado en el primero el mejor. que combinaCombina el coste directo de la raíz al nodo con la estimación del nodo al objetivo.
 
Es uno de los algoritmos más populares para encontrar caminos y grafos.
 
A diferencia de otras técnicas transversales, tienen "cerebros". Lo que significa es que es realmente un algoritmo inteligente que lo separa de los otros algoritmos convencionales.
 
Nosotros estaremos en un nodo inicial y debemos dirigirnos a un nodo final. En cada paso el resultado de la función del aA* será igual a la suma de otros dos parámetros ''g'' y ''h'', ''f = g + h''. En cada paso elegirá el nodo cuya ''f'' sea la más baja.
 
Definamos ahora ''g'' y ''h'':
 
'''g''' = el movimientocuánto cuesta moverse desde el punto inicial a un nodo dado, siguiendo la ruta generada para llegar allí.
 
'''h''' = el coste del movimiento estimado para pasar de ese nodo dado al destino final.Esto a menudo se conoce como la heurística, que no es más que una especie de suposición inteligente. Realmente no sabemos la distancia real hasta que encontramos el camino.
 
La cola a la hora de ir sacando nodos irairá de menor a mayor ''f'', siendo el nodo con menor ''f'' el nodo más prometedor.
Un ejemplo de esto son los mapas cuadriculados,. En dondeellos los nodos iniciales y destino son casillas. Pueden existir casillas por las que no se pueden pasar, la gracia del aA* es que las tiene en cuenta, al igual que las casillas que supongan un mayor coste.
 
== Heurísticas ==
Hemos visto como ''f'' es la función que evalúa el coste total de la función.
laHemos funciónvisto quecomo evalúa''g'' calcula el coste totalhasta de lael funciónnodo.
Sin embargo comocómo calculamos la heurística, ''h''. Existen muchas heurísticas, algunas pueden partir del coste de subproblemas del problema original, otras parten de la experiencia de intentos fallidos.
Hemos visto como g calcula el coste hasta el nodo.
En cualquier caso podemos diferenciar entre calcular ''h'' exacta o una aproximación a esta, lo cual nos supone menos tiempo, ejemplo de ambas son:
Sin embargo como calculamos la heurística, h. Existen muchas heurísticas, algunas pueden partir del coste de subproblemas del problema original, otras parten de la experiencia de intentos fallidos.
Distancia ManiatanManhattan, Distancia Diagonal y distancia Euclídea.
En cualquier caso podemos diferenciar entre calcular h exacta o una aproximación a esta, lo cual nos supone menos tiempo, ejemplo de ambas son:
Aplicado por ejemplo al algoritmo aA*:
Distancia Maniatan, Distancia Diagonal y distancia Euclídea.
Aplicado por ejemplo al algoritmo a*:
 
* Manhattan Distance:
Línea 61 ⟶ 60:
h = abs (current_cell.x – goal.x) + abs (current_cell.y – goal.y)
 
CuandoCuándo usarla:
 
Cuando te puedes mover en cuatro direcciones (right, left, top, bottom).
Línea 71 ⟶ 70:
h = max {abs (current_cell.x – goal.x), abs (current_cell.y – goal.y)}
 
CuandoCuándo usarla:
 
Cuando te puedes mover en ocho direcciones
Línea 81 ⟶ 80:
h = sqrt ((current_cell.x – goal.x)2 + (current_cell.y – goal.y)2)
 
CuandoCuándo usarla:
 
Cuando te puedes en cualquier dirección