장애물이 움직일 때에도 A *가 효율적입니까?


30

방금 길 찾기에 대해 배우기 시작했고 A * 알고리즘을 살펴 보았습니다. 내 주요 관심사는 내가 본 모든 예제가 계산하는 정적 장애물을 보여줍니다.

움직이는 장애물이있는 경우, 예를 들어 캐릭터가 움직여야하는 다른 캐릭터와 같이 움직이면 각 프레임마다 알고리즘을 실행해야한다고 가정하지만 다소 비싸 질까 걱정됩니다. 하드웨어가 각 움직이는 액터에 대해 각 프레임을 처리합니다.

A *는 장애물이 움직일 때마다 사용하기에 여전히 효율적입니까?

답변:


27

움직이는 장애물이있는 경로를 다시 계산해야 할 때 A *보다 훨씬 빠른 여러 알고리즘이 있습니다. "간단한 재 계산"아래를 참조 하십시오 .

그러나, 당신은 그들 중 하나에 대한 기성품 솔루션을 찾지 못할 것이므로 99 %의 경우 게임에 너무 과도합니다. 기존의 완전히 최적화 된 A * 솔루션을 사용하고 게임에서 길 찾기 속도를 높이기 위해 일반적인 기존 트릭을 사용하면 시간을 더 잘 사용할 수 있습니다.

  • 가끔씩 최상의 경로 만 다시 계산
  • 여러 장치간에 최상의 경로 공유 ( )
  • 경로의 일부만 다시 계산하면되므로 계층 적 그래프 만들기

이 트릭에 대한 자세한 정보는이 사이트 전체 또는 Amit의 A * 페이지에서 확인할 수 있습니다.


10

예. A *는 여전히 거의 모든 경우에 적용되는 방법입니다. 그것은 당신의 동적된다 노드 비용 계산 과 계산 및 추적하는 것이 더 복잡합니다.

미래에 움직이는 장애물이 어디 있는지 이미 알고 있다면 A *는 비용 함수에서 장애물의 시간을 고려할 수 있습니다.

예 :이 노드는 틱 # 3에서 틱 # 6까지 차지하는 4 틱으로 도달하므로이 노드의 이동 비용은 6-4 = +2 틱입니다. 그것은 여전히 ​​가장 좋은 길일 수 있습니다.

장애물의 진행 방향도 고려해야합니다.

미리 알지 못하는 경우 장애물이 없을 때 장애물을 고려하지 않고 경로를 다시 계산할 수 있지만 교착 상태 및 라이브 록에 대한 작업을 수행해야합니다. 장애물이있는 위치를 예측할 수 있지만 그 자체가 교착 상태 / 라이브 록 회피 유형이고 목적에 충분할 수있는 경우에도 마찬가지입니다.

교착 상태는 둘 다 상대방이 움직일 때까지 기다리면서 움직이지 않을 때입니다.

모두 (때 라이브 록은 이상 이동 같은 방향으로 기타를 방지하고 앞뒤로없이 진행 가고 결국 -이 고려하는 것이 중요하다 <)가.

라이브 록을 해결하는 것은 매우 복잡 할 수 있으며 이는 게임의 충돌 규칙과 메커니즘에 따라 다릅니다 (예 : 장애물과 싸우고 파괴해야합니까?).

이동 객체가 노드 / 경로 예약을 예약하는 경우가 종종 있습니다 (경로 또는 다이 변경시 취소를 잊지 마십시오).

이 정보가 있으면 가로 채기를 계획 할 수도 있습니다.


19
오 마이 갓, "라이브 락"-항상 복도에서해야 할 끔찍한 좌우 회피가 있다고 설명했습니다.
용감한 이단

2
간단한 라이브 / 데드락 솔루션은 사용 가능한 옵션 중에서 무작위로 선택하는 것입니다 (예 : 50 % 확률로 이동 및 50 % 확률로 왼쪽으로 이동). 각 액터가 무작위로 선택하는 한 잠금이 해결 될 가능성은 0이 아닙니다.
Draco18s

@ Draco18s 그리고 하나의 방법이 나올 때까지 앞뒤로 크기를 기하 급수적으로 늘리십시오 (이더넷 충돌이 어떻게 해결되는지 설명했을 것입니다!)
Cort Ammon-Reinstate Monica

나는 그들이 바위 종이 가위 또는 Petri Dish Prisoner 's Dilemma의 우호적 인 게임을 대신 할 수 있다고 생각 합니다. ; P
Draco18s
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.