Introducción al algoritmo A*
Nombre: Che Wenyang Número de estudiante: 16020199006
Introducción a Embedded Bull: una explicación detallada paso a paso del algoritmo A*
Embedded Bull's Nose : Algoritmo heurístico
Chiniu preguntó: ¿Cuál es el principio del algoritmo A*?
Texto de vaca incrustado:
Algoritmo A*
La planificación de ruta se refiere al problema de planificación de ruta óptima del robot, es decir, en función de una o varias optimizaciones Se utilizan criterios (como el costo mínimo de trabajo, el camino más corto para caminar, el tiempo más corto para caminar, etc.) para encontrar un camino óptimo en el espacio de trabajo que pueda evitar obstáculos desde el estado inicial hasta el estado objetivo. Existen muchos escenarios de aplicación para la planificación de rutas de robots. Los más comunes incluyen el movimiento de posición de los NPC y los personajes de control en los juegos, y problemas de navegación como los mapas de Baidu. Van desde robots y drones de barrido doméstico hasta automóviles autónomos que las empresas. están compitiendo para desarrollarse.
Los algoritmos de planificación de ruta actuales se dividen en:
Principio del algoritmo A*:
En informática, el algoritmo A* es una extensión del algoritmo de Dijkstra. debido a su alta eficiencia Por su naturaleza, se usa ampliamente en la búsqueda de rutas y el recorrido de gráficos, y se usa ampliamente en juegos como StarCraft. Antes de comprender el algoritmo, necesitamos conocer algunos conceptos:
El área de búsqueda: el área de búsqueda en la figura está dividida en una matriz bidimensional simple, y cada elemento de la matriz corresponde a una pequeña cuadrado Por supuesto, también podemos dividir el área en estrellas de cinco puntas, rectángulos, etc. El punto central de una unidad generalmente se denomina nodo del área de búsqueda (Nodo).
Lista Abierta: Almacenamos los nodos a detectar en el proceso de planificación de ruta en la Lista Abierta, y las grillas que han sido detectadas se almacenan en la Lista Cerrada.
Nodo principal (padre): el nodo utilizado para retroceder en la planificación de rutas se puede considerar como el puntero del nodo principal en la estructura de lista doblemente vinculada durante el desarrollo.
Clasificación de rutas: el nodo específico al que moverse está determinado por la siguiente fórmula: F(n) = G + H. G representa el costo de movimiento desde la posición inicial A a lo largo del camino generado hasta la cuadrícula especificada que se detectará. H especifica el costo de movimiento estimado de la red que se probará hasta el nodo objetivo B.
Función heurística: H es una función heurística, que también se considera heurística. Dado que no estamos seguros de qué obstáculos aparecerán frente a nosotros antes de encontrar el único camino, utilizamos un algoritmo para calcular H. se determina en función del escenario real. En nuestro modelo simplificado, H utiliza la distancia Manhattan tradicional, que es la suma de las distancias horizontales y verticales.
Como se muestra en la figura siguiente, el cuadrado verde es la posición inicial A del robot, el cuadrado rojo es la posición objetivo B y el cuadrado azul es el obstáculo.
Dividimos el área a buscar en una cuadrícula. Este es el primer paso en la búsqueda de rutas y simplifica el área de búsqueda. Este método particular reduce nuestra área de búsqueda a una matriz bidimensional. Cada elemento de la matriz representa una cuadrícula y su estado es transitable (walkalbe) o no transitable (unwalkable). Ahora use el algoritmo A * para encontrar el camino más corto de A a B. La longitud del lado de cada cuadrado es 10, es decir, el costo del movimiento vertical y horizontal es 10. Por tanto, el coste de moverse en diagonal es aproximadamente igual a 14. Los pasos específicos son los siguientes:
Comience desde el punto de partida?A? y agréguelo a una lista abierta compuesta de cuadrados. Esta lista abierta es como una lista de compras. Las cuadrículas de la lista abierta pueden pasarse a lo largo del camino o no pasarse. Así que considérelo como una lista por revisar. Marque los 8 cuadrados adyacentes a A y agregue los cuadrados transitables o accesibles entre ellos a la lista abierta. ¿Y establecer el punto de partida? A? como el nodo padre? (nodo padre)? Luego, elimine ?A? de la lista abierta y agréguelo a la lista cerrada (lista cerrada). Ya no es necesario prestar atención a cada cuadrado de la lista cerrada.
Como se muestra en la figura siguiente, el cuadrado verde oscuro es el punto de partida A y su marco exterior es azul brillante, lo que indica que el cuadrado se ha agregado a la lista de cierre. Es necesario marcar los cuadrados negros adyacentes y sus contornos son de color verde brillante. Cada cuadrado negro tiene un puntero gris que apunta a su nodo principal A.
A continuación, debemos seleccionar un cuadrado adyacente al punto inicial A de la lista abierta. ¿Pero qué cuadrado es mejor elegir? Elija el que tenga el valor F más pequeño. Veamos algunos de los cuadrados en la imagen a continuación. En el cuadrado con letras G = 10?. Esto se debe a que la distancia desde el punto de partida hasta allí es solo un cuadrado horizontalmente. Los valores de G? de los cuadrados arriba, abajo y a la izquierda directamente adyacentes al punto de partida son todos 10?, y los valores de G? de los cuadrados diagonales son todos 14?. El valor H se obtiene estimando la distancia de Manhattan desde el punto inicial hasta el punto final (cuadrado rojo), moviéndose solo horizontal y verticalmente e ignorando los obstáculos en el camino. Usando este método, la distancia desde el cuadrado a la derecha del punto inicial hasta el punto final es 3? cuadrados, entonces H = 30?. Hay una distancia de 4? cuadrados desde el cuadrado sobre este cuadrado hasta el punto final (tenga en cuenta que solo se calculan las distancias horizontal y vertical), por lo que H = 40?.
Después de comparar los valores F de los nodos en la lista abierta, encontramos que el valor F del nodo en el lado derecho del punto inicial A es F = 40, que es el valor más pequeño . Selecciónelo como nodo de procesamiento actual, elimine este punto de la Lista abierta y muévalo a la Lista cerrada.
Juzga las 8 cuadrículas alrededor de este nodo. Si son inaccesibles (como paredes, agua u otro terreno ilegal) o ya están en la Lista de cierre, serán ignoradas. De lo contrario, realice los siguientes pasos:
Si la cuadrícula adyacente del nodo de procesamiento actual ya está en la Lista abierta, verifique si esta ruta es mejor, es decir, calcule si el cuadrado alcanzado a través del nodo de procesamiento actual tiene un valor de ?G menor. Si no, no hagas nada. Por el contrario, si el valor G es menor, establezca el nodo principal de ese cuadrado en el nodo de procesamiento actual (el cuadrado que seleccionamos) y luego vuelva a calcular el valor F y el valor G de ese cuadrado.
Si la cuadrícula adyacente del nodo de procesamiento actual no está en la Lista abierta, agréguela y establezca su nodo principal en este nodo.
De acuerdo con las reglas anteriores, continuamos buscando y seleccionando el cuadrado a la derecha del punto de partida como nodo de procesamiento actual. ¿Su marco exterior está resaltado con una línea azul y se coloca en la lista de cierre? Luego revisamos los cuadrados adyacentes. Los tres cuadrados a la derecha son paredes, que ignoramos. El cuadrado a la izquierda es el punto de partida, ¿y también lo ignoramos en la lista de cierre? ¿Los otros 4 cuadrados adyacentes están todos en la lista abierta? Necesitamos verificar si la ruta para llegar a través del nodo actual es mejor. Miremos el cuadrado de arriba. Su valor G actual es 14. Si llegamos allí a través del cuadrado actual, el valor G será 20 (donde 10 es el valor G desde el punto inicial hasta el cuadrado actual, más el valor G de. moverse verticalmente desde el cuadrado actual al cuadrado de arriba es 10), por lo que este no es el camino óptimo. Si miras la imagen, entenderás que es mejor moverse en diagonal desde el punto inicial hasta ese cuadrado que moverse horizontalmente y luego verticalmente.
Después de comprobar los 4 cuadrados adyacentes que ya están en la lista abierta, no se encontró una ruta mejor a través del nodo actual, por lo que no se realizaron cambios. El siguiente paso es seleccionar el siguiente nodo a procesar. Así que recorra la lista abierta nuevamente. Ahora solo hay 7 cuadrados en la lista abierta. Necesitamos elegir el que tenga el valor F más pequeño. Esta vez hay dos cuadrados con valores F 54. ¿Cuál debo elegir? No importa. En términos de velocidad, ¿es más rápido seleccionar el último cuadrado agregado a la lista abierta? Así que seleccione el cuadrado en la parte inferior derecha del punto de inicio, como se muestra a continuación.
A continuación, tome el cuadrado con un valor F de 54 en la esquina inferior derecha del punto de inicio como nodo de procesamiento actual y verifique sus cuadrados adyacentes. Descubrimos que hay una pared a su derecha (el espacio debajo de la pared también se ignora, suponiendo que la esquina de la pared no se puede pasar directamente), así que ignórelo. Esto deja ?5? cuadrados adyacentes. Los ?2? cuadrados debajo del cuadrado actual aún no se han agregado a la "lista abierta", así que agréguelos y establezca el cuadrado actual como su padre.
Entre los 3 cuadrados restantes, 2 ya están en la lista de cierre (uno es el punto de partida, el otro es el cuadrado sobre el cuadrado actual y el marco exterior está resaltado, ¿los ignoramos)? Se comprueba el último cuadrado, es decir, el cuadrado a la izquierda del cuadrado actual, para ver si llegar allí a través del cuadrado actual tiene un valor ?G? No, entonces seleccionaremos el siguiente cuadro pendiente de la lista abierta.
Repita este proceso hasta que el punto final también se agregue a la lista abierta, como se muestra en la siguiente figura. Observa que el padre del cuadrado 2? cuadrados debajo del punto inicial es diferente al anterior. Anteriormente su valor G era 28 y apuntaba al cuadrado de arriba y a su derecha. Ahora tiene un valor G? de 20? y apunta al cuadrado directamente encima de él. Esto se debe al hecho de que en algún momento del proceso de búsqueda de ruta el valor G es menor cuando se usa la nueva ruta, por lo que el nodo principal se restablece y los valores G y F se recalculan.
Entonces, ¿cómo obtenemos la ruta real? Es muy simple, como se muestra en la figura siguiente, comience desde el punto final y avance a lo largo de la flecha hasta el nodo principal hasta regresar al punto inicial.
Resumen del algoritmo A*:
1. Añade el punto de partida a la lista abierta.
2. Repita el siguiente proceso:
a. ¿Recorrer la lista abierta?, busque el nodo con el valor F más pequeño, considérelo como el nodo que se va a procesar actualmente y luego muévalo a la lista de cierre
b. Verifique los 8 cuadrados adyacentes del cuadrado actual uno por uno. Si es inalcanzable o está en la lista de cierre, ignórelo. De lo contrario, haga lo siguiente:
□? Si no está en la lista abierta, agréguelo a la lista abierta y establezca el cuadrado actual en su padre.
□? ya está En la lista abierta, compruebe si este camino (es decir, llegar a él a través del cuadrado actual) está más cerca. Si está más cerca, establezca su padre en el cuadrado actual y vuelva a calcular sus valores G y F. Si su lista abierta está ordenada por valor F, es posible que deba reordenarla después de cambiarla.
c. Detenga la búsqueda cuando encuentre las siguientes situaciones:
□ El punto final se agrega a la lista abierta y la ruta se ha encontrado en este momento, o ? p>
□¿La búsqueda del punto final falló y la lista abierta está vacía y no hay ninguna ruta en este momento?
3. Comenzando desde el punto final, cada cuadrado se mueve a lo largo del nodo principal hasta el punto inicial, formando un camino.