A* (pronunciado "A-estrella") es un algoritmo de recorrido de grafos y búsqueda de caminos que se utiliza en muchos campos de la informática debido a su completitud, optimalidad y eficiencia óptima. [ 1 ] Dado un grafo ponderado , un nodo de origen y un nodo de destino, el algoritmo encuentra el camino más corto (con respecto a los pesos dados) desde el origen hasta el destino.
Una desventaja práctica importante es sucomplejidad espacial donde d es la profundidad de la solución menos profunda (la longitud del camino más corto desde el nodo de origen a cualquier nodo de destino dado) y b es el factor de ramificación (el número máximo de sucesores para cualquier estado dado). En sistemas prácticos de enrutamiento de viajes , generalmente es superado por algoritmos que pueden preprocesar el grafo para lograr un mejor rendimiento, [ 2 ] así como por enfoques con limitaciones de memoria; sin embargo, A* sigue siendo la mejor solución en muchos casos. [ 3 ]
Peter Hart , Nils Nilsson y Bertram Raphael del Instituto de Investigación de Stanford (ahora SRI International ) publicaron el algoritmo por primera vez en 1968. [ 4 ] Puede considerarse una extensión del algoritmo de Dijkstra . A* logra un mejor rendimiento al utilizar heurísticas para guiar su búsqueda.
El algoritmo A* finaliza una vez que encuentra el camino más corto hacia un objetivo específico, en lugar de generar todo el árbol de caminos más cortos desde un origen específico hasta todos los objetivos posibles.
Historia

A* se creó como parte del proyecto Shakey , cuyo objetivo era construir un robot móvil capaz de planificar sus propias acciones. Nils Nilsson propuso originalmente utilizar el algoritmo Graph Traverser [ 5 ] para la planificación de rutas de Shakey. [ 6 ] Graph Traverser se guía por una función heurística h ( n ) , la distancia estimada del nodo n al nodo objetivo; ignora por completo g ( n ) , la distancia del nodo inicial a n . Bertram Raphael sugirió utilizar la suma g ( n ) + h ( n ) . [ 7 ] Peter Hart inventó los conceptos que ahora denominamos admisibilidad y consistencia de las funciones heurísticas. A* se diseñó originalmente para encontrar rutas de menor coste cuando el coste de una ruta es la suma de sus costes, pero se ha demostrado que A* puede utilizarse para encontrar rutas óptimas para cualquier problema que cumpla las condiciones de un álgebra de costes. [ 8 ]
El artículo original de A* de 1968 [ 4 ] contenía un teorema que afirmaba que ningún algoritmo similar a A* [ a ] podía expandir menos nodos que A* si la función heurística era consistente y la regla de desempate de A* se elegía adecuadamente. Unos años más tarde se publicó una "corrección" [ 9 ] que afirmaba que la consistencia no era necesaria, pero esto se demostró falso en 1985 en el estudio definitivo de Dechter y Pearl sobre la optimalidad de A* (ahora llamada eficiencia óptima), que dio un ejemplo de A* con una heurística que era admisible pero no consistente expandiendo arbitrariamente más nodos que un algoritmo alternativo similar a A*. [ 10 ]
Descripción

A* es un algoritmo de búsqueda informada , o búsqueda primero el mejor , lo que significa que se formula en términos de grafos ponderados : partiendo de un nodo inicial específico de un grafo, busca encontrar un camino hacia el nodo objetivo dado con el menor costo (menor distancia recorrida, menor tiempo, etc.). Para ello, mantiene un árbol de caminos que se originan en el nodo inicial y extiende esos caminos arista por arista hasta alcanzar el nodo objetivo.
En cada iteración de su bucle principal, A* necesita determinar cuál de sus caminos extender. Lo hace basándose en el costo del camino y una estimación del costo necesario para extender el camino hasta el objetivo. Específicamente, A* selecciona el camino que minimiza
donde n es el siguiente nodo en el camino, g ( n ) es el costo del camino desde el nodo inicial hasta n , y h ( n ) es una función heurística que estima el costo del camino más barato desde n hasta el objetivo. La función heurística es específica para cada problema.
Las implementaciones típicas de A* utilizan una cola de prioridad para realizar la selección repetida de nodos de costo mínimo (estimado) para expandir. Esta cola de prioridad se conoce como conjunto abierto , frontera o borde . En cada paso del algoritmo, el nodo con el valor f ( x ) más bajo se elimina de la cola, los valores f y g de sus vecinos se actualizan en consecuencia, y estos vecinos se agregan a la cola. El algoritmo continúa hasta que un nodo eliminado (es decir, el nodo con el valor f más bajo de todos los nodos de la frontera) es un nodo objetivo. [ b ] El valor f de ese objetivo es entonces también el costo del camino más corto, ya que h en el objetivo es cero en una heurística admisible.
El algoritmo descrito hasta ahora solo proporciona la longitud del camino más corto. Para hallar la secuencia real de pasos, el algoritmo se puede modificar fácilmente de manera que cada nodo del camino registre a su predecesor. Tras ejecutar este algoritmo, el nodo final apuntará a su predecesor, y así sucesivamente, hasta que el predecesor de algún nodo sea el nodo inicial.
Por ejemplo, al buscar la ruta más corta en un mapa, h ( x ) podría representar la distancia en línea recta hasta el objetivo, ya que físicamente es la distancia mínima posible entre dos puntos cualesquiera. En el caso de un mapa cuadriculado de un videojuego, usar la distancia de Taxicab o la distancia de Chebyshev resulta más adecuado según el conjunto de movimientos disponibles (de 4 u 8 vías).
Si la heurística h satisface la condición adicional h ( x ) ≤ d ( x , y ) + h ( y ) para cada arista ( x , y ) del grafo (donde d denota la longitud de esa arista), entonces h se denomina monótona o consistente . Con una heurística consistente, se garantiza que A* encontrará una ruta óptima sin procesar ningún nodo más de una vez y A* es equivalente a ejecutar el algoritmo de Dijkstra con el coste reducido d' ( x , y ) = d ( x , y ) + h ( y ) − h ( x ) . [ 11 ]
Pseudocódigo
El siguiente pseudocódigo describe el algoritmo:
función reconstruir_ruta ( came_from , current ) ruta_total := {current} mientras current en came_from . keys : current := came_from [ current ] ruta_total . prepend ( current ) return ruta_total// A* encuentra un camino desde el inicio hasta el objetivo. // h es la función heurística. h(n) estima el costo para alcanzar el objetivo desde el nodo n. function a_star ( start , goal , h ) // El conjunto de nodos descubiertos que pueden necesitar ser (re)expandidos. // Inicialmente, solo se conoce el nodo de inicio. // Esto generalmente se implementa como un min-heap o una cola de prioridad en lugar de un hash-set. open_set := {start}// Para el nodo n, came_from[n] es el nodo inmediatamente anterior en el camino más barato desde el inicio // hasta n actualmente conocido. came_from := un mapa vacío// Para el nodo n, g_score[n] es el costo actualmente conocido del camino más barato desde start hasta n. g_score := mapa con valor predeterminado de infinito g_score [ start ] := 0// Para el nodo n, f_score[n] := g_score[n] + h(n). f_score[n] representa nuestra mejor estimación actual sobre // cuán barato podría ser un camino desde el inicio hasta el final si pasa por n. f_score := mapa con valor predeterminado de Infinito f_score [ inicio ] := h ( inicio )mientras open_set no esté vacío // Esta operación puede ocurrir en tiempo O(Log(N)) si open_set es un min-heap o una cola de prioridad current := el nodo en open_set con el valor f_score [] más bajo si current = goal return reconstruct_path ( came_from , current )open_set.remove ( current ) para cada vecino de current // d(current,neighbor) es el peso de la arista de current a neighbor // tentative_g_score es la distancia desde start hasta neighbor a través de current tentative_g_score := g_score [ current ] + d ( current , neighbor ) if tentative_g_score < g_score [ neighbor ] // Este camino a neighbor es mejor que cualquiera anterior. ¡Regístralo! came_from [ neighbor ] : = current g_score [ neighbor ] := tentative_g_score f_score [ neighbor ] : = tentative_g_score + h ( neighbor ) if neighbor not in open_set open_set.add ( neighbor )// El conjunto abierto está vacío, pero el objetivo nunca se alcanzó. Devolver error.Nota: En este pseudocódigo, si un nodo es alcanzado por una ruta, eliminado de open_set, y posteriormente alcanzado por una ruta más barata, se agregará open_setnuevamente a . Esto es esencial para garantizar que la ruta devuelta sea óptima si la función heurística es admisible pero no consistente . Si la heurística es consistente, cuando un nodo es eliminado de open_setla ruta a se garantiza que es óptimo por lo que la prueba ' tentative_g_score < g_score[neighbor]' siempre fallará si el nodo es alcanzado nuevamente. El pseudocódigo implementado aquí a veces se llama la versión de búsqueda en grafo de A*. [ 12 ] Esto está en contraste con la versión sin la tentative_g_score < g_score[neighbor]prueba '' para agregar nodos de nuevo a open_set, que a veces se llama la versión de búsqueda en árbol de A* y requiere una heurística consistente para garantizar la optimalidad.

Ejemplo
Un ejemplo de un algoritmo A* en acción donde los nodos son ciudades conectadas por carreteras y h(x) es la distancia en línea recta al punto objetivo:

Clave: verde: inicio; azul: meta; naranja: visitado
El algoritmo A* tiene aplicaciones prácticas. En este ejemplo, las aristas representan vías férreas y h(x) es la distancia geodésica (la distancia más corta posible en una esfera) hasta el destino. El algoritmo busca un camino entre Washington D. C. y Los Ángeles.

Detalles de implementación
Existen varias optimizaciones sencillas o detalles de implementación que pueden afectar significativamente el rendimiento de una implementación de A*. El primer detalle a tener en cuenta es que la forma en que la cola de prioridad maneja los empates puede tener un efecto significativo en el rendimiento en ciertas situaciones. Si los empates se resuelven de manera que la cola se comporte como LIFO (último en entrar, primero en salir ), A* se comportará como una búsqueda en profundidad entre rutas de igual costo (evitando explorar más de una solución igualmente óptima).
Cuando se requiere una ruta al final de la búsqueda, es común mantener con cada nodo una referencia a su padre. Al final de la búsqueda, estas referencias se pueden usar para recuperar la ruta óptima. Si se mantienen estas referencias, puede ser importante que el mismo nodo no aparezca en la cola de prioridad más de una vez (cada entrada corresponde a una ruta diferente hacia el nodo, y cada una con un costo diferente). Un enfoque estándar aquí es verificar si un nodo que está a punto de agregarse ya aparece en la cola de prioridad. Si es así, entonces los punteros de prioridad y padre se cambian para que correspondan a la ruta de menor costo. Una cola de prioridad estándar basada en un montón binario no admite directamente la operación de búsqueda de uno de sus elementos, pero se puede ampliar con una tabla hash que mapea los elementos a su posición en el montón, lo que permite que esta operación de disminución de prioridad se realice en tiempo logarítmico. Alternativamente, un montón de Fibonacci puede realizar las mismas operaciones de disminución de prioridad en tiempo amortizado constante .
Casos especiales
El algoritmo de Dijkstra , como otro ejemplo de un algoritmo de búsqueda de costo uniforme, puede considerarse un caso especial de A* dondepara todo x . [ 13 ] [ 14 ] La búsqueda general en profundidad se puede implementar usando A* considerando que hay un contador global C inicializado con un valor muy grande. Cada vez que procesamos un nodo, asignamos C a todos sus vecinos recién descubiertos. Después de cada asignación, disminuimos el contador C en uno. Por lo tanto, cuanto antes se descubra un nodo, mayor será su valor. Tanto el algoritmo de Dijkstra como la búsqueda en profundidad se pueden implementar de manera más eficiente sin incluir un valor en cada nodo.
Propiedades
Terminación y finalización
En grafos finitos con pesos de aristas no negativos, A* tiene garantizado terminar y es completo , es decir, siempre encontrará una solución (un camino desde el inicio hasta el objetivo) si existe. En grafos infinitos con un factor de ramificación finito y costos de aristas que están acotados lejos de cero (para algún fijo), A* tiene garantizado terminar solo si existe una solución. [ 1 ]
Admisibilidad
Se dice que un algoritmo de búsqueda es admisible si garantiza la obtención de una solución óptima. Si la función heurística utilizada por A* es admisible , entonces A* es admisible. Una "prueba" intuitiva de esto es la siguiente:
Llamamos cerrado a un nodo si ha sido visitado y no está en el conjunto abierto. Cerramos un nodo cuando lo eliminamos del conjunto abierto. Una propiedad básica del algoritmo A*, de la cual esbozaremos una demostración a continuación, es que cuandoEstá cerrado , es una estimación optimista (límite inferior) de la distancia real desde el inicio hasta el objetivo. Entonces, cuando el nodo objetivo, , está cerrado, No es más que la distancia real. Por otro lado, tampoco es menos que la distancia real, ya que es la longitud de un camino hacia el objetivo más un término heurístico.
Ahora veremos que siempre que un nodoEstá cerrado ,Es una estimación optimista. Basta con ver que siempre que el conjunto abierto no esté vacío, tiene al menos un nodo .en una ruta óptima hacia la meta para la cual es la distancia real desde el inicio, ya que en ese caso + subestima la distancia al objetivo y, por lo tanto, también lo hace el valor más pequeño elegido para el vértice cerrado. Sea Sea un camino óptimo desde el inicio hasta el objetivo. ser el último nodo cerrado en para el cual es la distancia real desde el inicio hasta (el inicio es uno de esos vértices). El siguiente nodo en tiene el correcto valor , ya que se actualizó cuandoEstaba cerrado, y está abierto ya que no está cerrado.
Optimalidad y consistencia
El algoritmo A es óptimamente eficiente con respecto a un conjunto de algoritmos alternativos Alts en un conjunto de problemas P si para cada problema P en P y cada algoritmo A′ en Alts , el conjunto de nodos expandidos por A al resolver P es un subconjunto (posiblemente igual) del conjunto de nodos expandidos por A′ al resolver P. El estudio definitivo de la eficiencia óptima de A* se debe a Rina Dechter y Judea Pearl. [ 10 ] Consideraron una variedad de definiciones de Alts y P en combinación con la heurística de A* siendo meramente admisible o siendo consistente y admisible. El resultado positivo más interesante que demostraron es que A*, con una heurística consistente, es óptimamente eficiente con respecto a todos los algoritmos de búsqueda admisibles tipo A* en todos los problemas de búsqueda "no patológicos". En términos generales, su noción de problema no patológico es lo que ahora entendemos por "salvo desempate". Este resultado no se cumple si la heurística de A* es admisible pero no consistente. En ese caso, Dechter y Pearl demostraron que existen algoritmos admisibles similares a A* que pueden expandir arbitrariamente menos nodos que A* en algunos problemas no patológicos.
La eficiencia óptima se refiere al conjunto de nodos expandidos, no al número de expansiones de nodos (el número de iteraciones del bucle principal de A*). Cuando la heurística utilizada es admisible pero no consistente, es posible que un nodo sea expandido por A* muchas veces, un número exponencial de veces en el peor de los casos. [ 15 ] En tales circunstancias, el algoritmo de Dijkstra podría superar a A* por un amplio margen. Sin embargo, investigaciones más recientes han descubierto que este caso patológico solo ocurre en ciertas situaciones artificiales donde el peso de las aristas del grafo de búsqueda es exponencial con el tamaño del grafo y que ciertas heurísticas inconsistentes (pero admisibles) pueden conducir a un número reducido de expansiones de nodos en las búsquedas de A*. [ 16 ] [ 17 ]
Relajación limitada

Si bien el criterio de admisibilidad garantiza una ruta de solución óptima, también implica que A* debe examinar todas las rutas igualmente meritorias para encontrar la óptima. Para calcular rutas aproximadas más cortas, es posible acelerar la búsqueda a costa de la optimalidad relajando el criterio de admisibilidad. A menudo, se busca limitar esta relajación para garantizar que la ruta de solución no sea peor que (1 + ε ) veces la ruta de solución óptima. Esta nueva garantía se denomina ε -admisible.
Existen varios algoritmos ε -admisibles:
- Ponderación estática/A* ponderada. [ 18 ] Si h a ( n ) es una función heurística admisible, en la versión ponderada de la búsqueda A* se utiliza h w ( n ) = ε h a ( n ) , ε > 1 como función heurística, y se realiza la búsqueda A* como de costumbre (lo que finalmente ocurre más rápido que usando h a ya que se expanden menos nodos). El camino encontrado por el algoritmo de búsqueda puede tener un costo de como máximo ε veces el del camino de menor costo en el grafo. [ 19 ]
- Parábola convexa ascendente/descendente (XUP/XDP). [ 20 ] Modificación de la función de costo en A* ponderado para desplazar la optimalidad hacia el inicio o el objetivo. XDP proporciona caminos que son casi óptimos cerca del inicio, y los caminos XUP son casi óptimos cerca del objetivo. Ambos producen-rutas óptimas en general.
- .
- .
- Curva ascendente/descendente por partes (pwXU/pwXD). [ 21 ] Similar a XUP/XDP pero con funciones por partes en lugar de parábolas. Las trayectorias de solución también son-óptimo.
- La ponderación dinámica [ 22 ] utiliza la función de coste , dondey dónde es la profundidad de la búsqueda y N es la longitud prevista de la ruta de la solución.
- El ponderado dinámico muestreado [ 23 ] utiliza el muestreo de nodos para estimar mejor y desviar el error heurístico.
- . [ 24 ] utiliza dos funciones heurísticas. La primera es la lista FOCAL, que se utiliza para seleccionar nodos candidatos, y la segunda h F se utiliza para seleccionar el nodo más prometedor de la lista FOCAL.
- Un ε [ 25 ] selecciona nodos con la función , donde A y B son constantes. Si no se puede seleccionar ningún nodo, el algoritmo retrocederá con la función donde C y D son constantes.
- AlphA* [ 26 ] intenta promover la explotación en profundidad dando preferencia a los nodos expandidos recientemente. AlphA* utiliza la función de coste, dónde, donde λ y Λ son constantes con, π ( n ) es el padre de n , y ñ es el nodo expandido más recientemente.
Complejidad
Como algoritmo de búsqueda heurística, el rendimiento de A* está fuertemente influenciado por la calidad de la función heurística.Si la heurística se aproxima bien al coste real para alcanzar el objetivo, A* puede reducir significativamente el número de expansiones de nodos. Por otro lado, una heurística deficiente puede dar lugar a muchas expansiones innecesarias.
En el peor de los casos
En el peor de los casos, A* expande todos los nodos.para qué, dóndees el costo del nodo objetivo óptimo.
Por qué no puede ser peor
Supongamos que hay un nodoen la lista abierta cony es el siguiente nodo que se expandirá. Dado que el nodo objetivo tiene, y, el nodo objetivo tendrá un valor f más bajo y se expandirá antesPor lo tanto, A* nunca expande nodos con.
Por qué no puede ser mejor
Supongamos que existe un algoritmo óptimo que expande menos nodos queen el peor de los casos usando la misma heurística. Eso significa que debe haber algún nodode tal manera que, sin embargo, el algoritmo opta por no expandirlo.
Ahora consideremos un grafo modificado donde una nueva arista de costo(con) se agrega desdehacia la meta. Si, entonces el nuevo camino óptimo pasa porSin embargo, dado que el algoritmo aún evita la expansión, no alcanzará la nueva ruta óptima, violando su optimalidad.
Por lo tanto, ningún algoritmo óptimo que incluya A* podría expandir menos nodos queen el peor de los casos.
Notación matemática
La complejidad del peor caso de A* se describe a menudo como, dóndees el factor de ramificación yes la profundidad del objetivo más superficial. Si bien esto da una idea aproximada, no refleja con precisión el comportamiento real de A*.
Un límite más preciso considera el número de nodos con. Sies la diferencia más pequeña posible en-costo entre nodos distintos, entonces A* puede expandirse hasta:
Esto representa la complejidad temporal y espacial en el peor de los casos.
Complejidad espacial
La complejidad espacial de A* es aproximadamente la misma que la de todos los demás algoritmos de búsqueda de grafos, ya que mantiene todos los nodos generados en memoria. [ 1 ] En la práctica, esto resulta ser el mayor inconveniente de la búsqueda A*, lo que lleva al desarrollo de búsquedas heurísticas con memoria limitada, como A* de profundización iterativa , A* con memoria limitada y SMA* .
Aplicaciones
A* se usa frecuentemente para el problema común de búsqueda de rutas en aplicaciones como videojuegos, pero fue diseñado originalmente como un algoritmo general de recorrido de grafos. [ 4 ] Encuentra aplicaciones en diversos problemas, incluyendo el problema del análisis sintáctico usando gramáticas estocásticas en PLN . [ 27 ] Otros casos incluyen la búsqueda de información en el aprendizaje en línea. [ 28 ]
Relaciones con otros algoritmos
Lo que distingue a A* de un algoritmo de búsqueda voraz primero en amplitud es que toma en cuenta el costo/distancia ya recorrida, g ( n ) .
Algunas variantes comunes del algoritmo de Dijkstra pueden considerarse un caso especial de A* donde la heurísticapara todos los nodos; [ 13 ] [ 14 ] a su vez, tanto Dijkstra como A* son casos especiales de programación dinámica . [ 29 ] A* en sí mismo es un caso especial de una generalización de ramificación y acotación . [ 30 ]
A* es similar a la búsqueda en haz, excepto que la búsqueda en haz mantiene un límite en el número de caminos que tiene que explorar. [ 31 ]
Variantes
- En cualquier momento A* [ 32 ]
- Bloque A*
- D*
- Campo D*
- Franja
- Cuenta de Ahorro Marginal A* (FSA*)
- A* adaptativo generalizado (GAA*)
- Búsqueda heurística incremental
- A* reducido [ 33 ]
- Profundización iterativa A* (IDA*)
- Búsqueda de puntos de salto
- Planificación a lo largo de la vida A* (LPA*)
- Nuevo A* bidireccional (NBA*) [ 34 ]
- A* con memoria limitada simplificada (SMA*)
- Theta*
A* también puede adaptarse a un algoritmo de búsqueda bidireccional , pero se debe tener especial cuidado con el criterio de parada. [ 35 ]
Véase también
- Planificación de rutas en cualquier ángulo : búsqueda de rutas que no se limiten a moverse a lo largo de los bordes del grafo, sino que puedan adoptar cualquier ángulo.
- Búsqueda en anchura : algoritmo para buscar en los nodos de un grafo.
- Búsqueda en profundidad : algoritmo para buscar en los nodos de un grafo.
- Algoritmo de Dijkstra : Algoritmo para encontrar caminos más cortos
Notas
- ↑ «Similar a A*» significa que el algoritmo busca extendiendo caminos que parten del nodo inicial, un borde a la vez, tal como lo hace A*. Esto excluye, por ejemplo, los algoritmos que buscan hacia atrás desde el objetivo o en ambas direcciones simultáneamente. Además, los algoritmos cubiertos por este teorema deben ser admisibles y no estar «más informados» que A*.
- ↑ Los nodos objetivo pueden ser sobrepasados varias veces si quedan otros nodos con valores f más bajos , ya que pueden conducir a un camino más corto hacia un objetivo.
Referencias
- 1 2 3 Russell, Stuart J.; Norvig , Peter (2018). Inteligencia artificial: un enfoque moderno (4.ª ed.). Boston: Pearson. ISBN 978-0134610993OCLC 1021874142
- ↑ Delling, D.; Sanders, P .; Schultes, D.; Wagner, D. (2009). «Ingeniería de algoritmos de planificación de rutas». Algoritmia de redes grandes y complejas: diseño, análisis y simulación . Lecture Notes in Computer Science. Vol. 5515. Springer. pp. 117–139 . doi : 10.1007/978-3-642-02094-0_7 . ISBN 978-3-642-02093-3.
- ↑ Zeng, W.; Church, RL (2009). "Encontrar rutas más cortas en redes viales reales: el caso de A*" . Revista Internacional de Ciencias de la Información Geográfica . 23 (4): 531– 543. Bibcode : 2009IJGIS..23..531Z . doi : 10.1080/13658810801949850 . S2CID 14833639 .
- 1 2 3 Hart, PE ; Nilsson, NJ ; Raphael, B. (1968). "Una base formal para la determinación heurística de rutas de costo mínimo". IEEE Transactions on Systems Science and Cybernetics . 4 (2): 100– 7. Bibcode : 1968IJSSC...4..100H . doi : 10.1109/TSSC.1968.300136 .
- ↑ Doran, JE; Michie, D. (1966-09-20). "Experimentos con el programa Graph Traverser". Proc. R. Soc. Lond. A . 294 (1437): 235– 259. Bibcode : 1966RSPSA.294..235D . doi : 10.1098/rspa.1966.0205 . S2CID 21698093 .
- ↑ Nilsson, Nils J. (30 de octubre de 2009). La búsqueda de la inteligencia artificial (PDF) . Cambridge: Cambridge University Press. ISBN 9780521122931
Uno de los primeros problemas que consideramos fue cómo planificar una secuencia de "puntos de referencia" que Shakey pudiera usar para navegar de un lugar a otro. […] El problema de navegación de Shakey es un problema de búsqueda, similar a los que he mencionado anteriormente
. - ↑ Nilsson, Nils J. (30 de octubre de 2009). La búsqueda de la inteligencia artificial (PDF) . Cambridge: Cambridge University Press. ISBN 9780521122931
Bertram Raphael, quien dirigía el trabajo en Shakey en ese momento, observó que un mejor valor para la puntuación sería la suma de la distancia recorrida hasta el momento desde la posición inicial más mi estimación heurística de la distancia que el robot tenía que recorrer
. - ↑ Edelkamp, Stefan; Jabbar, Shahid; Lluch-Lafuente, Alberto (2005). «Búsqueda heurística algebraica de costes». Actas de la Vigésima Conferencia Nacional sobre Inteligencia Artificial (AAAI) (PDF) . págs. 1362–1367 . ISBN 978-1-57735-236-5.
- ↑ Hart, Peter E.; Nilsson, Nils J .; Raphael, Bertram (1972-12-01). "Corrección a 'Una base formal para la determinación heurística de rutas de costo mínimo'" (PDF) . Boletín ACM SIGART (37): 28– 29. doi : 10.1145/1056777.1056779 . S2CID 6386648 .
- 1 2 Dechter, Rina; Judea Pearl (1985). "Estrategias generalizadas de búsqueda primero en el mejor y la optimalidad de A*" . Journal of the ACM . 32 (3): 505– 536. doi : 10.1145/3828.3830 . S2CID 2092415 .
- ↑ Nannicini, Giacomo; Delling, Daniel; Schultes, Dominik; Liberti, Leo (2012). "Búsqueda A* bidireccional en redes viales dependientes del tiempo" (PDF) . Networks . 59 (2): 240– 251. doi : 10.1002/NET.20438 .
- ↑ Russell, Stuart J.; Norvig , Peter (2009). Inteligencia artificial: Un enfoque moderno (3.ª ed.). Boston: Pearson. pág. 95. ISBN 978-0136042594.
- 1 2 De Smith, Michael John; Goodchild, Michael F.; Longley, Paul (2007), Análisis geoespacial: una guía completa de principios, técnicas y herramientas de software , Troubadour Publishing Ltd, pág. 344, ISBN 9781905886609.
- 1 2 Hetland, Magnus Lie (2010), Python Algorithms: Mastering Basic Algorithms in the Python Language , Apress, p. 214, ISBN 9781430232377Archivado del original el 15 de febrero de 2022..
- ↑ Martelli, Alberto (1977). "Sobre la complejidad de los algoritmos de búsqueda admisibles". Inteligencia Artificial . 8 (1): 1– 13. doi : 10.1016/0004-3702(77)90002-9 .
- ↑ Felner, Ariel; Uzi Zahavi (2011). "Heurísticas inconsistentes en teoría y práctica" . Inteligencia Artificial . 175 ( 9–10 ): 1570–1603 . doi : 10.1016/j.artint.2011.02.001 .
- ↑ Zhang, Zhifu; NR Sturtevant (2009). Uso de heurísticas inconsistentes en la búsqueda A* . Vigésimo primera Conferencia Internacional Conjunta sobre Inteligencia Artificial. págs. 634–639 .
- ↑ Pohl, Ira (1970). «Primeros resultados sobre el efecto del error en la búsqueda heurística». Machine Intelligence 5. Edinburgh University Press: 219–236 . ISBN 978-0-85224-176-9OCLC 1067280266 .
- ↑ Pearl, Judea (1984). Heurísticas: Estrategias de búsqueda inteligentes para la resolución de problemas informáticos . Addison-Wesley. ISBN 978-0-201-05594-8.
- ↑ Chen, Jingwei; Sturtevant, Nathan R. (2019). "Condiciones para evitar reexpansiones de nodos en búsqueda subóptima acotada" . Actas de la Vigésimo Octava Conferencia Internacional Conjunta sobre Inteligencia Artificial . Organización de Conferencias Internacionales Conjuntas sobre Inteligencia Artificial: 1220–1226 .
- ↑ Chen, Jingwei; Sturtevant, Nathan R. (18 de mayo de 2021). "Condiciones necesarias y suficientes para evitar reaperturas en la búsqueda subóptima de mejor primero con funciones de acotación generales" . Actas de la Conferencia AAAI sobre Inteligencia Artificial . 35 (5): 3688–3696 . doi : 10.1609/aaai.v35i5.16485 . ISSN 2374-3468 .
- ↑ Pohl, Ira (agosto de 1973). «Evitación de catástrofes (relativas), competencia heurística, ponderación dinámica genuina y cuestiones computacionales en la resolución heurística de problemas» (PDF) . Actas de la Tercera Conferencia Internacional Conjunta sobre Inteligencia Artificial (IJCAI-73) . Vol. 3. California, EE. UU., págs. 11-17 .
- ↑ Köll, Andreas; Hermann Kaindl (agosto de 1992). «Un nuevo enfoque para la ponderación dinámica» . Actas de la Décima Conferencia Europea sobre Inteligencia Artificial (ECAI-92) . Viena, Austria: Wiley. págs. 16-17 . ISBN 978-0-471-93608-4.
- ↑ Pearl, Judea; Jin H. Kim (1982). "Estudios sobre heurísticas semiadmisibles". IEEE Transactions on Pattern Analysis and Machine Intelligence . 4 (4): 392– 399. Bibcode : 1982ITPAM...4..392P . doi : 10.1109 / TPAMI.1982.4767270 . PMID 21869053. S2CID 3176931 .
- ↑ Ghallab, Malik; Dennis Allard (agosto de 1983). " A ε – un algoritmo de búsqueda heurística casi admisible eficiente" (PDF) . Actas de la Octava Conferencia Internacional Conjunta sobre Inteligencia Artificial (IJCAI-83) . Vol. 2. Karlsruhe, Alemania. págs. 789–791 . Archivado del original (PDF) el 6 de agosto de 2014.
- ↑ Reese, Bjørn (1999). AlphaA*: Un algoritmo de búsqueda heurística ε -admisible (Informe). Instituto de Tecnología de Producción, Universidad del Sur de Dinamarca. Archivado del original el 31 de enero de 2016. Recuperado el 5 de noviembre de 2014 .
- ↑ Klein, Dan; Manning, Christopher D. (2003). "A* parsing: fast exact Viterbi parse selection" (PDF) . Actas de la Conferencia de Tecnología del Lenguaje Humano de 2003 del Capítulo Norteamericano de la Asociación de Lingüística Computacional . págs. 119–126 . doi : 10.3115/1073445.1073461 .
- ↑ Kagan E.; Ben-Gal I. (2014). "Un algoritmo de pruebas grupales con aprendizaje informacional en línea" (PDF) . IIE Transactions . 46 (2): 164– 184. doi : 10.1080/0740817X.2013.803639 . S2CID 18588494. Archivado del original (PDF) el 5 de noviembre de 2016. Recuperado el 12 de febrero de 2016 .
- ↑ Ferguson, Dave; Likhachev, Maxim; Stentz, Anthony (2005). "Una guía para la planificación de rutas basada en heurísticas" (PDF) . Actas del taller internacional sobre planificación bajo incertidumbre para sistemas autónomos, conferencia internacional sobre planificación y programación automatizadas (ICAPS) . págs. 9–18 . Archivado (PDF) del original el 29 de junio de 2016.
- ↑ Nau, Dana S.; Kumar, Vipin; Kanal, Laveen (1984). "Ramificación y acotación general, y su relación con A* y AO*" (PDF) . Inteligencia Artificial . 23 (1): 29–58 . doi : 10.1016/0004-3702(84)90004-3 . Archivado (PDF) del original el 4 de octubre de 2012.
- ↑ "Variantes de A*" . theory.stanford.edu . Consultado el 9 de junio de 2023 .
- ↑ Hansen, Eric A.; Zhou, Rong (2007). "Búsqueda heurística en cualquier momento" . Journal of Artificial Intelligence Research . 28 : 267–297 . arXiv : 1110.2737 . doi : 10.1613/jair.2096 . S2CID 9832874 .
- ↑ Fareh, Raouf; Baziyad, Mohammed; Rahman, Mohammad H.; Rabie, Tamer; Bettayeb, Maamar (2019-05-14). "Investigating Reduced Path Planning Strategy for Differential Wheeled Mobile Robot" . Robotica . 38 (2): 235–255 . doi : 10.1017/S0263574719000572 . ISSN 0263-5747 . S2CID 181849209 .
- ↑ Pijls, Wim; Post, Henk. Otro algoritmo bidireccional para encontrar las rutas más cortas (PDF) (Informe técnico). Instituto de Econometría, Universidad Erasmus de Róterdam. EI 2009-10. Archivado (PDF) del original el 11 de junio de 2014.
- ↑ Goldberg, Andrew V.; Harrelson, Chris; Kaplan, Haim; Werneck, Renato F. "Algoritmos eficientes para encontrar la ruta más corta entre dos puntos" (PDF) . Universidad de Princeton . Archivado (PDF) del original el 18 de mayo de 2022.
Lecturas adicionales
- Nilsson, NJ (1980). Principios de inteligencia artificial . Palo Alto, California: Tioga Publishing Company. ISBN 978-0-935382-01-3.
- Walsh, Toby. La historia más breve de la IA .
Enlaces externos
- Variación del algoritmo A* denominada A* de búsqueda de rutas jerárquicas (HPA*).
- Brian Grinstead. "Algoritmo de búsqueda A* en JavaScript (actualizado)" . Archivado del original el 15 de febrero de 2020. Consultado el 8 de febrero de 2021 .
- Algoritmos de grafos
- Algoritmos de enrutamiento
- Algoritmos de búsqueda
- Algoritmos heurísticos
- Optimización combinatoria
- Inteligencia artificial en juegos
- Algoritmos voraces
- Distancia del gráfico