A *를 어떻게 다시 계획해야합니까?


10

A * 알고리즘을 사용하여 플레이어를 찾는 길잡이 보스 적입니다. 그것은 매우 복잡한 환경이며 플래시에서하고 있기 때문에 장거리에서 검색 할 때 검색이 약간 느려질 수 있습니다. 플레이어가 움직이지 않으면 한 번만 검색 할 수 있지만 현재는 모든 프레임을 검색하고 있습니다. 내 프레임 속도가 어려움을 겪을만큼 오래 걸립니다.

이것에 대한 일반적인 해결책은 무엇입니까? 전체 검색을 다시 수행하지 않고 A *를 "재 계획"할 수있는 방법이 있습니까? 좀 더 자주 검색하지 않고 (0.5 초마다) 경로에 약간의 부정확성이 있음을 인정해야합니까?

답변:


13

한 프레임에서 전체 경로를 검색 할 필요가 없습니다. 검색 루프를 제한하여 AI를 수행 한 후 AI가 가지고있는 작은 정보를 따르기 시작하고 다음 프레임에서 더 검색 할 것입니다. 경로를 찾을 때까지 3 프레임이 걸릴 수 있습니다. AI가 실제로 검색하는 것처럼 보이기 때문에 상당히 설득력있게 보일 수 있습니다.


+1. 이것은 Mat Buckland가 AI 책에서 묘사 한 것이기도합니다. "시간 분할 경로 계획"( books.google.ch/… )이라고합니다. 좋은 물건.
bummzack

8

거리가 매우 큰 경우 근접 탐지를 사용하여 몇 프레임마다 알고리즘을 실행할 수 있습니다 (대부분의 경우 거리가 길면 대상 경로가 프레임마다 크게 변경되지 않기 때문에). 예를 들면 다음과 같습니다.

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

이것은 모든 프레임에서 A *를 실행하는 데 여전히 허용 가능한 성능이있는 거리가 있다고 가정합니다. 요컨대, 두 번째 옵션으로 갈 것입니다. 특히 당신이 가지고있는 것이 효과가 있다면, 잘 작동하는 것을 축소 할 수 있다면 다른 것을 다시 구현하지 않을 것입니다. 결론은 게임에서 작동하는지 확인해야한다는 것입니다.


8

당신의 정확한 질문에 실제로 대답하는 것은 아니지만 ... 만약 당신이 "속임수"를 원한다면, 플레이어가 "빵 부스러기"를 떠나게하고 보스가 그들을 따르게 할 수 있습니다. 빵 부스러기 경로가 자체 교차하는 경우 가장 최근 경로를 따르십시오 (이는 보스가 플레이어의 정확한 경로를 따르지 않는 것은 말할 것도없이 루프와 너무 길 수있는 다른 경로를 피하게합니다)

보스가 냄새가 좋은 동물이라면 괜찮을 것입니다. 이것은 플레이어의 향기를 따르는 것과 비슷하게 작동합니다 :)


5

귀하의 사례는 HPA * 가 해결하기 위해 발명 한 것입니다. 그러나 과잉으로 보이는 경우 0.5 초마다 길 찾기가 제대로 작동한다고 생각하는 경향이 있습니다.


4

정적 환경 인 경우 모든 쌍의 최단 경로를 미리 계산할 수 있습니다.


2
소규모 정적 환경 인 경우

사용 가능한 플랫폼 및 메모리에 따라 다릅니다.
Nate

@ 조, @ 네이트, 사실.
피터 테일러

2

나는 A * 캐릭터가 레벨 주위에서 플레이어를 따라가는 48 게임 경쟁 게임을 만들었습니다. 내 A * 구현이 느리기 때문에 (모든 프레임을 실행할 수는 없음) 간격을 3 초 지연시킵니다. 이것은 의도하지 않은 결과로 플레이어가 잠시 동안 AI를 "트릭"할 수있게했습니다. 실제로 게임을 더 재미있게 만들었습니다.

나중에 A * 구현의 성능을 향상시키고 모든 프레임에서 실행을 시도했습니다. 적은 항상 플레이어를 완벽하게 찾을 것이기 때문에 게임의 재미를 멈췄습니다.

그것은 예상치 못한 학습 경험이었습니다.


1
그건 좋은 지적이야. pac-man에서 의도적으로 불완전한 알고리즘을 사용하여 플레이어가 유령을 능가하는 경로 찾기에 대해 읽은 것을 기억합니다. 각 유령마다 약간 다른 불완전 성이있어서 더 많은 성품을 얻게되었습니다. 여기서 빼앗아 간 것은 게임, 재미> 그 밖의 모든 것입니다.
Nick Van Brunt

0

A *를 사용하기를 원하거나 필요로하지 않는 한 조향 행동을 살펴볼 수도 있습니다 . 관련된 프레임 당 완전한 경로 계획이 없으므로 처리 과정에서 훨씬 가벼워 야합니다.


에이전트와 대상 사이에 장애물이없는 경우 Steering Behaviors (특히 탐색)를 사용합니다. 불행히도 내 환경에는 더 똑똑한 솔루션이 필요한 비틀기 복도와 같은 것들이 있습니다.
Gregory Avery-Weir
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.