도달 할 수없는 목적지에 가장 가까운 위치를 찾기 위해 AStar 조정


11

Java로 AStar를 구현했으며 선택한 대상에 도달 할 수있는 장애물이있는 지역에서는 정상적으로 작동합니다.

그러나 대상에 도달 할 수없는 경우 계산 된 "경로"는 (가까운 위치에) 가장 가까운 위치가 아니라 임의의 경로입니다.

도달 할 수없는 목적지까지 가장 가까운 곳으로가는 길을 찾기 위해 AStar를 조정할 수있는 방법이 있습니까?

답변:


20

가장 낮은 노드 EstimatedDistanceToEnd(즉, 가장 낮은 h(x)노드)를 추적하고, 끝 노드에 역 추적 할 수없는 경우 해당 노드에서 역 추적합니다.


단순한. 나는 그것을 좋아한다!
존 맥도날드

난 그냥 내 머리를 때리고 대답을 읽을 때 "도"를 갔다. 감사!
Shivan Dragon

1

이것은 실제로 A * 질문이 아닙니다. A *는 지점 A에서 지점 B까지의 경로를 찾는 것입니다. 확장 할 수는 있지만 결과가 쉽게 지저분 해지고 예측할 수 없습니다. 대신 필요한 것은 가장 가까운 도달 가능한 목적지를 선택하는 알고리즘입니다.

이를 수행하는 한 가지 방법이 있습니다. A *가 유효한 경로 (경로 일치 입력 노드의 시작 / 종료 노드)를 리턴하면 경로를 리턴하십시오. 그렇지 않으면...

  • 초기 노드에서 검색 시작
  • 연결된 모든 노드를 순회합니다 (무한한 재귀를 피하기 위해 방문한 노드에 플래그를 지정해야 함).
  • 가장 가까운 노드를 찾기 위해 목적지까지의 거리를 비교

플러드 필과 같은 것이 적절한 것으로 보입니다. en.wikipedia.org/wiki/Flood_fill 참고로 시작 노드에서 가장 낮은 거리의 노드까지 A *해야합니다. 또한 항상 연결된 모든 노드를 검사해야하므로 속도가 매우 느릴 수 있습니다.
Roy T.

예, 느려질 수 있습니다. 그러나 속도는 아마도 노드가 메모리 전체에 흩어져있을 때 발생합니다. 쉽게 고칠 수 있습니다. 또한 정확도를 희생하여 속도를 높일 수 있습니다. 너무 멀리 있거나 잘못된 방향을 가리키는 링크는 건너 뛰기 만하면됩니다.
snake5

1
@Roy : A *, BFS 및 모든 유사한 경로 찾기 알고리즘은 플러드 필만큼 느리게 진행됩니다. 모든 연결된 노드를 검사 하여 끝까지의 경로 없는지 확인해야하기 때문 입니다 . 그러나이 문제를 완화 할 수있는 방법이 있습니다. 여기를 참조 하십시오 .
BlueRaja-대니 Pflughoeft
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.