Este artículo necesita citas adicionales para su verificación . ( marzo de 2015 ) |
![]() | Este artículo puede ser demasiado técnico para que la mayoría de los lectores lo comprendan . ( Noviembre de 2009 ) |
Algoritmos de búsqueda de gráficos y árboles |
---|
Listados |
|
Temas relacionados |
|
SMA * o Simplified Memory Bounded A * es un algoritmo de ruta más corto basado en el algoritmo A * . La principal ventaja de SMA * es que utiliza una memoria limitada, mientras que el algoritmo A * puede necesitar una memoria exponencial. Todas las demás características de SMA * se heredan de A *.
SMA * tiene las siguientes propiedades
La implementación de SMA * es muy similar a la de A *, la única diferencia es que cuando no queda espacio, los nodos con el costo f más alto se eliminan de la cola. Debido a que esos nodos se eliminan, el SMA * también debe recordar el costo-f del mejor hijo olvidado con el nodo principal. Cuando parece que todos los caminos explorados son peores que un camino olvidado, el camino se vuelve a generar. [1]
Pseudo código:
función SMA - estrella ( problema ) : cola de ruta : conjunto de nodos , ordenados por f - costo ; comenzar la cola . insertar ( problema . raíz - nodo ) ; mientras que La verdadera do comenzar si la cola . vacío () luego devuelve el error ; // no hay una solución que quepa en el nodo de memoria dado : = cola . comenzar () ; // min-f-cost-node si hay algún problema . es - objetivo ( nodo ) luego devuelve éxito ; s : = siguiente - sucesor ( nodo ) si ! problema . es - meta ( s ) && profundidad ( s ) == max_depth luego f ( s ) : = inf ; // no queda memoria para pasar s, por lo que toda la ruta es inútil; de lo contrario, f ( s ) : = max ( f ( nodo ) , g ( s ) + h ( s )) ; // valor f del sucesor es el máximo de // valor f del padre y // heurística del sucesor + longitud de la ruta al sucesor endif si no hay más sucesores, entonces actualice f - costo del nodo y los de sus ancestros si es necesario si nodo . sucesores ⊆ cola y luego cola . eliminar ( nodo ) ; // todos los niños ya se han añadido a la cola de a través de una forma más corta si la memoria está llena y luego comienzan badNode : = menos profunda nodo con mayor f - costo ; para el padre en badNode . los padres no empiezan padres . sucesores . eliminar ( badNode ); si es necesario , haga cola . insertar ( padre ) ; endfor endif cola . insertar ( s ) ; al final mientras que al final