Ajustando o AStar para encontrar o local mais próximo do destino inacessível


11

Eu implementei o AStar em Java e ele funciona bem para uma área com obstáculos onde o destino escolhido é acessível.

No entanto, quando o destino está inacessível, o "caminho" calculado não chega ao local mais próximo (ao local inacessível), mas é um caminho aleatório.

Existe uma maneira viável de ajustar o AStar para encontrar o caminho para o local mais próximo de um destino inacessível?

Respostas:


20

Acompanhe o nó com o menor EstimatedDistanceToEnd(ou seja, o menor h(x)) e, se nenhum nó final estiver acessível para voltar atrás, volte para trás desse nó.


Simples. Eu amo isso!
30512 John McDonald

Eu apenas dei um tapa na cabeça e fiquei "doh" quando li sua resposta. Obrigado!
Shivan Dragon

1

Esta não é realmente uma pergunta A *. A * tem tudo a ver com encontrar um caminho do ponto A ao ponto B. Mesmo que possa ser estendido, os resultados podem ser facilmente confusos e imprevisíveis. Em vez disso, você precisa de um algoritmo que escolha o destino acessível mais próximo.

Aqui está uma maneira de fazer isso: Se A * retornar um caminho válido (nós de início / fim no caminho correspondem aos nós de entrada), retorne o caminho. De outra forma...

  • Iniciar pesquisa a partir do nó inicial
  • Atravessar todos os nós vinculados (lembre-se de sinalizar os visitados para evitar recursões infinitas)
  • Compare distâncias ao destino para encontrar o nó mais próximo

Algo como o Flood Fill parece apropriado pt.wikipedia.org/wiki/Flood_fill observe que você ainda precisa A * do nó inicial ao nó com a menor distância. Observe também que isso sempre envolve a inspeção de todos os nós conectados e, portanto, pode ser extremamente lento.
Roy T.

Sim, pode ser lento. Mas a lentidão provavelmente viria de ter os nós espalhados pela memória; isso pode ser facilmente consertado. Além disso, é possível acelerar isso sacrificando alguma precisão - basta pular links que estão muito distantes ou apontam na direção errada.
usar o seguinte comando

1
@Roy: A *, BFS, e todos os algoritmos pathfinding semelhantes será exatamente tão lento como inundação-fill, porque todos eles necessidade de inspecionar cada nó conectado para garantir que não é nenhum caminho até o fim. No entanto, existem maneiras de aliviar esse problema; veja aqui .
BlueRaja - Danny Pflughoeft 30/08/2012
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.