Tengo un mapa cuadrado. Solo se permiten movimientos horizontales y verticales (no diagonales). El costo de movimiento es siempre 1.
Estoy implementando un algoritmo A * en ese mapa, usando la distancia de Manhattan como heurística de distancia. ¿Es esto heurístico consistente? ¿Puedo evitar verificar los g(node)
nodos que están en el conjunto CERRADO?
Editar: Por consistente quiero decir monótono.
tiles
path-finding
geometry
Emiliano
fuente
fuente
Respuestas:
Para responder realmente a su pregunta: la distancia entre el hombre y la mujer es consistente cuando se ve obligado a moverse verticalmente / horizontalmente a lo largo de una cuadrícula no ponderada (esto puede mostrarse fácilmente en la definición de wikipedia) . Entonces sí, en su caso puede evitar volver a comprobar los nodos en el conjunto cerrado.
Sin embargo, una vez que permite el movimiento en diagonal o en cualquier ángulo, la distancia de la pantalla se vuelve inadmisible porque sobreestima los costos diagonales, lo que necesariamente significa que no es consistente.
fuente
h(x) = min(manhattan(p1), manhattan(p2))
( es decir, p1 o p2 son un buen punto final y quiero llegar al más cercano). ¿h(x)
Sigue siendo monótono?h(x, p1)
yh(x, p2)
son consistentes, entoncesmin(h(x,p1), h(x,p2))
también serán consistentes. Esto es fácil de mostrar desde la definición en wikipedia (tendríamos que mostrar esomin(h(x, p1), h(x, p2)) <= distance(x,y) + min(h(y, p1), h(y, p2))
para todos los nodosx
yy
con un borde entre ellos. Ahora suponga queh(x, p1)
es el mínimo; ¿puede mostrar que definitivamente es<=
el lado derecho, usando el hecho de que ambas heurísticas son consistentes?)Sí, la distancia de Manhattan entre dos puntos es siempre la misma, al igual que la distancia regular entre ellos. Puedes pensar en la distancia de Manhattan como los componentes X e Y de una línea que corre entre los dos puntos.
Esta imagen ( de Wikipedia ) ilustra esto bien:
La línea verde es la distancia real.
Las líneas azul , roja y amarilla representan la misma distancia de Manhattan (12 unidades). No importa qué combinación de movimientos hacia arriba y hacia la derecha dibuje desde el punto inferior izquierdo hacia el inferior derecho, obtendrá la misma distancia total de Manhattan.
fuente
h(x) = 1000
, lo que obviamente no es consistente) . Se puede evitar volver a comprobar los nodos, pero sólo porque la distancia Manhattan es consistente, que esta respuesta no mostrar.2*manhatten
satisface eso, pero no es consistente.En extensión de la respuesta de Byte56, me gustaría señalar que, en su conjunto de datos específico, usar la Distancia de Manhattan como su función heurística siempre será una heurística perfecta en el sentido de que siempre devolverá el costo real de la ruta (suponiendo que haya nada "bloqueando" los caminos).
También debe tener en cuenta que todos los nodos en la dirección correcta (ya sea horizontal o vertical) producirán la misma distancia esperada (porque hay muchos caminos igualmente cortos hacia la meta). Debe tener en cuenta que su cola de prioridad (conjunto abierto) debe, en caso de prioridades vinculadas, eliminar primero el último nodo agregado (LIFO - Último en entrar, primero en salir). Al hacerlo, solo examinará los nodos que terminarán en la ruta óptima . Si examina nodos igualmente adecuados de manera FIFO (primero en entrar, primero en salir), examinará efectivamente todos los nodos que forman parte de una mejor ruta. Este problema surge porque hay múltiples rutas igualmente buenas para el nodo objetivo.
fuente
No estoy seguro de qué quieres decir con "siempre" consistente. ¿La distancia de Manhattan en una cuadrícula fija es independiente del camino tomado? Sí, como decía la respuesta de Byte56.
Sin embargo, por ejemplo, la distancia de Manhattan no es invariable bajo rotaciones. Por ejemplo, la distancia de Manhattan ( norma L1 ) entre el origen y un punto
(10,10)
es|10-0| + |10-0| = 20
. Sin embargo, si gira sus coordenadas 45 grados (por lo que ahora su punto fijo se encuentra a lo largo de una de las direcciones de la cuadrícula), ahora encontrará que el mismo punto está ahora(10sqrt(2),0)
, por lo que tiene una distancia de Manhattan al origen de10sqrt(2)~14.14
.fuente