2010-09-04 17 views
19

Estoy implementando una búsqueda A * bidireccional (bidireccional ya que en la búsqueda se realiza tanto desde el origen como desde el destino simultáneamente, y cuando estas dos búsquedas se encuentren, tendré el más corto ruta - al menos con un poco de lógica extra lanzada).Bidireccional A * (A-star) Buscar

¿Alguien tiene alguna experiencia con tomar un A * unidireccional y bidireccionalizarlo (!) - ¿qué tipo de ganancia de rendimiento puedo esperar? Había calculado, más o menos, reducir a la mitad el tiempo de búsqueda, como mínimo, pero ¿puedo ver mayores ganancias que esto? Estoy usando el algoritmo para determinar las rutas más cortas en una red de carreteras, si eso es de alguna manera relevante (he leído sobre el algoritmo de "Alcance" de MS, pero quiero dar pequeños pasos hacia esto en lugar de saltar directamente).

+0

Nota: el título de la pregunta repite A * en forma de palabra para facilitar la búsqueda. –

+1

FYI: aquí hay un enlace al documento de MS sobre Reach for A * (A-star): http://www.avglab.com/andrew/pub/alenex06.pdf – shindigo

Respuesta

8

En el mejor de los casos es posible que hubiera corrido en O (b^(n/2)) en lugar de O (b^n), pero eso es sólo si tiene suerte :)

(donde b es su factor de ramificación yn es el número de nodos que consideraría un A * unidireccional)

Todo depende de cuán fácilmente se encuentren las dos búsquedas, si se encuentran en un buen punto intermedio al principio de la búsqueda que usted tiene eliminado un montón de tiempo de búsqueda, pero si se ramifican en direcciones totalmente diferentes, puede terminar con algo más lento que el simple A * (debido a toda la contabilidad adicional)

+1

Gracias Michael: algunas investigaciones adicionales han demostrado que Es poco probable que tenga suerte: la A * bidireccional es supuestamente bastante incómoda cuando se trata de que ambas direcciones converjan en el mismo nodo. Puedo intentarlo, o más probablemente invertirá algo de tiempo en descubrir Reach. –

+0

En números más grandes, ganas claramente cuando haces una búsqueda bidireccional. Los laboratorios de Microsoft Research usan este algoritmo, pero con muchas mejoras más complicadas. –

1

Usted puede w hormiga para tratar http://sourceforge.net/projects/tway/ hay un script de benchmarking que compara esto con Astar estándar (por NY datos de carreteras de la ciudad parece dar una ventaja de tiempo de 30%)

1

han implementado 3 bidireccional diferente A * algos de búsqueda (ver cskit) .

Para ver los algoritmos en acción, desde el tipo de raíz de proyecto mvn exec:java (requiere Maven). ¡Buena suerte!

(Editar:. This library proporciona 3 diferentes algoritmos bidireccional * A los tres son óptimas.)