도망을위한 길 찾기


61

아시다시피 A 지점에서 B 지점으로 이어지는 2 차원 환경에서 최상의 경로를 찾으려면 많은 솔루션이 있습니다.

그러나 객체가 A 지점에 있고 가능한 한 빨리 B 지점에서 벗어나려고 할 때 경로를 계산하는 방법은 무엇입니까?

약간의 배경 정보 : 내 게임은 타일 기반은 아니지만 부동 소수점 정확도를 가진 2d 환경을 사용합니다. 움직임은 벡터 기반입니다. 길 찾기는 게임 세계를 걸을 수 있거나 걸을 수없는 사각형으로 분할하고 모서리에서 그래프를 작성하여 수행됩니다. Dijkstras 알고리즘을 사용하여 작업하는 포인트 사이의 경로 찾기가 이미 있습니다. 도망 알고리즘의 유스 케이스는 특정 상황에서 내 게임의 배우가 다른 배우를 위험으로 인식하고 도망해야한다는 것입니다.

사소한 해결책은 "안전한"거리에 도달 할 때까지 또는 배우가 벽에 도달 할 때까지 위협과 반대 방향으로 행위자를 벡터로 이동시키는 것입니다.

이 접근법의 문제점은 배우가 쉽게 돌아 다닐 수있는 작은 장애물에 의해 차단된다는 것입니다. 벽을 따라 움직일 때 그들이 위협에 가까워지지 않는 한, 그렇게 할 수는 있지만 처음부터 장애물을 피할 때 더 똑똑해 보일 것입니다.

여기에 이미지 설명을 입력하십시오

내가 보는 또 다른 문제는 맵 지오메트리의 막 다른 골목입니다. 어떤 상황에서는 존재가 더 빨리 빠져 나갈 수있는 막 다른 길에서 갇히게 될 경로 나 처음에는 위험에서 멀어지지 않는 다른 길 중에서 선택해야합니다 (또는 반면에 조금 더 가까워 지지만 결국에는 훨씬 더 멀어 질 것이라는 점에서 훨씬 더 장기적인 보상이있을 것입니다. 그래서 멀리 얻을 수있는 단기 보상 고속은 어떻게 든 멀리 얻을 수있는 장기적인 보상에 대해 평가해야 까지 .

여기에 이미지 설명을 입력하십시오

행위자가 훨씬 더 큰 위협으로부터 벗어나기 위해 사소한 위협에 더 가까이 가도록 허용해야하는 상황에 대한 또 다른 등급 문제가 있습니다. 그러나 모든 사소한 위협을 완전히 무시하는 것도 어리석은 일입니다 (그래서이 그림의 행위자가 오른쪽 위의 사소한 위협을 피하기 위해 나아갔습니다).

여기에 이미지 설명을 입력하십시오

이 문제에 대한 표준 솔루션이 있습니까?


8
훌륭한 시각 자료가있는 +1 좋은 질문입니다. 실제로 질문을 명확하게 만듭니다.
MichaelHouse

답변:


24

이것이 최선의 해결책은 아니지만, 이 게임을 위해 도망 치는 AI를 만드는 데 효과적 이었습니다.

1 단계. Dijkstra의 알고리즘을 A *로 변환하십시오 . 이는 휴리스틱을 추가하여 간단하게해야합니다. 휴리스틱은 대상까지의 최소 거리를 측정합니다. 이 휴리스틱은 노드를 채점 할 때 지금까지 이동 한 거리에 추가됩니다. 어쨌든 경로 파인더가 크게 향상되므로 변경해야합니다.

단계 2. 휴리스틱의 변형을 작성하십시오. 휴리스틱은 대상까지의 거리를 추정하는 대신 위험으로부터의 거리를 측정하고이 값을 무효화합니다. 이것은 목표에 도달하지 않으므로 (아무것도 없기 때문에) 특정 거리에 도달하거나 특정 거리에 도달 한 후 또는 가능한 모든 경로를 처리 할 때 특정 시점에서 검색을 종료해야합니다. 이 솔루션은 주어진 제한으로 최적의 탈출 경로를 찾는 경로 찾기를 효과적으로 만듭니다.


1
단계 2의 휴리스틱이 일반적으로 허용 가능한 휴리스틱을 제공하지 않으므로 위험으로부터 직선 거리와 같은 것을 사용하는 것이 일반적입니다. 물론 그렇다고해서 어쨌든 사용할 수는 없지만 최적의 탈출 경로를 생성하지 못할 수도 있습니다. 이 "역 A *"에 대해 실제로 허용 가능한 휴리스틱을 얻으려면 위험으로부터 각 사각형의 실제 거리를 계산하려면 일반 A * / Dijkstra를 사용해야한다고 생각합니다.
Ilmari Karonen

+1 나는 이것이 결과에 대한 노력이가는 한 당신의 돈에 가장 좋은 강타를 준다고 생각합니다.
MichaelHouse

33

배우가 도망가는 것을 현명하게 원한다면 평범한 Dijkstra / A * 길 찾기만으로는 효과가 없습니다. 그 이유는 적으로부터 최적의 탈출 경로를 찾기 위해 배우가 적의 추격 방향을 고려해야하기 때문입니다.

다음 MS 페인트 다이어그램은 정적 경로 찾기 만 사용하여 적과의 거리를 최대화하면 차선의 결과를 초래하는 특정 상황을 보여줍니다.

P 자 모양의 미로에서 적을 피하는 배우의 다이어그램

여기서 녹색 점은 빨간색 점에서 벗어나고 경로를 선택할 수있는 두 가지 옵션이 있습니다. 오른쪽 경로를 내려 가면 빨간색 점의 현재 위치 에서 훨씬 더 멀어 지지만 결국 녹색 점이 막히게됩니다. 대신 최적의 전략은 녹색 점이 원 주위를 계속 돌면서 빨간색 점의 반대편에 유지하는 것입니다.

이러한 탈출 전략을 올바르게 찾으려면 minimax 검색 과 같은 적대적 검색 알고리즘 이나 alpha-beta pruning 과 같은 개선 이 필요 합니다 . 검색 깊이가 충분한 위의 시나리오에 적용된 이러한 알고리즘을 사용하면 막 다른 길을 오른쪽으로 가져갈 때 필연적으로 캡처가 발생하지만 원에 머무르면 (녹색 점이 빨간색 하나).

물론, 어떤 유형의 배우가 여러 명인 경우, 이들 모두는 각자의 전략을 계획해야합니다 (별개로 또는 배우가 협력하는 경우). 이러한 멀티 액터 체이스 / 탈출 전략은 놀라 울 정도로 복잡해질 수 있습니다. 예를 들어, 도망 치는 배우를위한 한 가지 가능한 전략은 적을 더 유혹적인 대상으로 이끌면서 적을 산만하게하는 것입니다. 물론 이것은 다른 목표의 최적 전략에 영향을 미치며 ...

실제로는 많은 에이전트를 사용하여 실시간으로 매우 심도 깊은 검색을 수행 할 수 없으므로 휴리스틱에 많이 의존해야합니다. 이러한 휴리스틱을 선택하면 배우의 "심리학", 즉 배우의 현명한 행동, 다른 전략에 얼마나 많은주의를 기울여야하는지, 얼마나 협조적이거나 독립적인지 등이 결정됩니다.


7

길을 찾았으므로 좋은 목적지를 선택하는 문제를 줄일 수 있습니다.

맵에 절대적으로 안전한 목적지가있는 경우 (예 : 위협이 행위자를 따라갈 수없는 출구) 인근에서 하나 이상의 목적지를 선택하고 경로 비용이 가장 낮은 목적지를 찾으십시오.

도망가는 배우가 잘 무장 한 친구를 가지고 있거나지도에 배우가 면역하지만 위험하지 않은 위험이 포함 된 경우, 그러한 친구 나 위험 근처에서 열린 지점을 선택하여 경로를 찾으십시오.

도망 치는 배우가 위협에 관심이있을 수있는 다른 배우보다 빠르면 다른 배우의 방향으로 특정 지점을 선택하고 그 지점을 넘어서 그 지점을 찾아야합니다. , 난 당신을 초과해야합니다. "

탈출하거나 위협을 죽이거나 산만하게 할 가능성이 없다면 배우가 파멸 될까요? 따라서 달려 갈 임의의 지점을 선택하고, 거기에 도달하면 위협이 여전히 당신을 따르고 있습니다.


7

많은 경우에 적절한 목표 위치를 지정하는 것이 까다로울 수 있으므로 2D 점유 그리드 맵을 기반으로하는 다음 방법을 고려해 볼 가치가 있습니다. 일반적으로 "값 반복"이라고하며 그라디언트 디센트 / 어 센트와 결합하여 간단하고 상당히 효율적인 (구현에 따라 다름) 경로 계획 알고리즘을 제공합니다. 단순성으로 인해 모바일 로봇 공학, 특히 실내 환경에서 탐색하는 "단순 로봇"에 대해 잘 알려져 있습니다. 위에서 암시 된 바와 같이,이 방법은 다음과 같이 목표 위치를 명시 적으로 지정하지 않고 시작 위치에서 떨어진 경로를 찾는 방법을 제공합니다. 가능한 경우 목표 위치를 선택적으로 지정할 수 있습니다. 또한 접근 / 알고리즘은 너비 우선 탐색을 구성합니다.

이진 경우에, 2D 점유 그리드 맵은 점유 그리드 셀에 대한 것이고 다른 곳에서는 0이다. 이 점유율 값도 [0,1] 범위에서 연속적 일 수 있습니다. 아래로 다시 돌아갑니다. 주어진 그리드 셀 g i 의 값 은 V ( gi ) 입니다.

기본 버전

  1. 그리드 셀 g 0 에 시작 위치가 있다고 가정합니다 . 세트 V (g 0 ) = 0 , 넣어 g 0 는 FIFO 큐이다.
  2. 다음 그리드 셀 받아 g의 대기열에서합니다.
  3. 모든 이웃을 위해 g의 Jg :
    • 경우 g의 j는 점령되지 않고 이전에 방문한되지 않았습니다
      • V (g j ) = V ( gi ) +1
      • 방문한 g g j 를 표시하십시오 .
      • FIFO 대기열에 g j 를 추가하십시오 .
  4. 주어진 거리 임계 값에 아직 도달하지 않은 경우 (2.)로 계속하고, 그렇지 않으면 (5.)로 계속하십시오.
  5. 경로는 g 0 에서 시작하여 가장 가파른 구배 상승을 따라 얻어진다 .

4 단계에 대한 참고 사항

  • 전술 한 바와 같이, 단계 (4.)는 커버링 된 최대 거리를 추적 할 필요가 있으며, 이는 명확성 / 명확성의 이유로 상기 설명에서 생략되었다.
  • 목표 위치가 주어지면, 목표 위치에 도달하자마자 반복, 즉 단계 (3)의 일부로서 처리 / 방문이 반복된다.
  • 물론 전체 그리드 맵을 간단히 처리하는 것, 즉 모든 (무료) 그리드 셀이 처리 / 방문 될 때까지 계속하는 것도 가능합니다. 제한 요소는 해상도와 함께 그리드 맵의 크기입니다.

확장 및 추가 설명

업데이트 방정식 V (g j ) = V (g i ) +1 은 다운 스케일링 V (g j )에 의해 모든 종류의 추가 휴리스틱을 적용 할 수있는 충분한 공간을 남겨 둡니다.또는 특정 경로 옵션의 값을 줄이기 위해 첨가제 구성 요소. 전부는 아니더라도, 대부분의 이러한 수정은 [0,1]의 연속 값을 갖는 그리드 맵을 사용하여 훌륭하고 일반적으로 통합 될 수 있으며, 이는 초기 이진 그리드 맵의 전처리 단계를 효과적으로 구성한다. 예를 들어, 장애물 경계를 따라 1에서 0으로의 전환을 추가하면 "액터"가 장애물을 깨끗하게 유지합니다. 이러한 그리드 맵은 예를 들어 블러 링, 가중 확장 또는 유사에 의해 이진 버전으로부터 생성 될 수있다. 반경과 블러 반경이 큰 장애물로 위협과 적을 추가하면 주변에 접근하는 경로에 불이익을줍니다. 다음과 같이 전체 그리드 맵에서 확산 프로세스를 사용할 수도 있습니다.

V (g j ) = (1 / (N + 1)) × [V (g j ) + 합 (V (g i ))]

여기서 " sum "은 모든 인접 그리드 셀에 대한 합계를 나타냅니다. 예를 들어, 이진 맵을 생성하는 대신 초기 (정수) 값은 위협의 크기에 비례 할 수 있으며 장애물은 "작은"위협을 나타냅니다. 확산 과정을 적용한 후에는 그리드 값을 [0,1]로 스케일링해야하고 장애물, 위협 및 적이 차지하는 셀을 1로 설정 / 강제화해야합니다. 그렇지 않으면 업데이트 방정식의 스케일링이 원하는대로 작동하지 않습니다.

이 일반적인 계획 / 접근법에는 많은 변형이 있습니다. 장애물 등은 작은 값을 가질 수있는 반면, 자유 그리드 셀은 큰 값을 가지므로 목적에 따라 마지막 단계에서 기울기 하강이 필요할 수 있습니다. 어쨌든, 접근법은 IMHO, 놀랍게도 다목적이며, 구현하기가 쉽고, 잠재적으로 다소 빠릅니다 (그리드 맵 크기 / 해상도에 따라 다름). 마지막으로 특정 목표 위치를 가정하지 않는 많은 경로 계획 알고리즘과 마찬가지로 막 다른 골목에 갇힐 위험이 있습니다. 어느 정도까지는 이러한 위험을 줄이기 위해 마지막 단계 전에 전용 사후 처리 단계를 적용 할 수 있습니다.

Java-Script (?)로 된 그림이있는 또 다른 간단한 설명이 있지만 내 브라우저에서는 그림이 작동하지 않습니다.

http://www.cs.ubc.ca/~poole/demos/mdp/vi.html

계획에 대한 자세한 내용은 다음 책을 참조하십시오. 값 반복은 2 장 섹션 2.3.1 최적 고정 길이 계획에서 구체적으로 설명합니다.

http://planning.cs.uiuc.edu/

친절하게 도와 주길 바래, 데릭


3

포식자에 집중하는 것은 어떻습니까? Predator의 위치에서 적절한 밀도로 360도 레이 캐스트하십시오. 그리고 우리는 피난처 샘플을 가질 수 있습니다. 그리고 최고의 피난처를 선택하십시오.

사례 1

사례 2


0

스타 트렉 온라인에서 동물 무리를 위해 접근 한 방법 중 하나는 열린 방향을 선택하고 일정 거리 후에 동물을 빠르게 내리는 것입니다. 그러나 그것은 대부분 당신이 당신을 공격하는 것을 두려워 해야하는 무리를위한 영광스러운 de-spawn 애니메이션이며 실제 전투 몹에는 적합하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.