2014-05-19 6 views
0

일부 경로 찾기 시스템 (지금은 A *)에서 도발적이지만, 나는 모든 것의 개념을 완전히 파악할만큼 충분히 숙련 된 곳이 아닙니다. 이 게시물이 무지 또는 잘못된 가정으로 가득 차 있다면 용서하시기 바랍니다.여러 단계의 경로 찾기

목표는 목적지에 도달하기 위해 여러 평면을 가로 지르는 객체를 가질 수있게하는 것이고 각 레벨에 대한 다양한 입구와 각 레벨은 서로 다른 디자인을가집니다. 8 개의 출입구가있는 동굴 시스템을 상상해보십시오. 목표는 6 층 아래로 내려가는 것입니다 ... 동굴 중 일부가 연결되어 경로가 공유 될 수 있지만 다른 일부는 특정 지점까지 격리됩니다 .... 또한 경로의 상호 연결성은 각 레벨에서 변경할 수 있습니다. 이 작업을 수행 할 수있는 시스템이 있음을 알고 있지만 내 목표는 결국 가장 빠르고 가장 빠른 옵션이며이 계산을 빠르게 수행 할 수있는 능력입니다 (주어진 시간에 최소 80 개 이상의 다른 경로가 계산 될 가능성이 있음)

Layered/Planes pathing

모든 '층'다른 '수준', 또는 비행기입니다 :

예는 다음과 같이 될 것이다. 녹색은 레이어간에 위아래로있는 경로입니다. 인스턴스 과정 중에는 경로를 아무 곳에 나 배치 할 수 있으며 레이어 내부의 모든 부분을 제거 할 수 있습니다. (이 경우에는 그와 같은 구성입니다.)

A *를 구현하기가 비교적 쉽습니다. 하나의 레벨에서 발견되는 몇 가지 기본 경로 (예 : 한 위치에서 아래로 이동하는 사다리). 그러나 어떤 사다리가 궁극적 인 목표로 이어질지 결정하는 것은 어려운 일입니다.

처음 생각한 것은 동일한 레벨에서 서로 경로를 연결하는 데이터 구조와 유사한 작업을 수행하고 어떤 종류의 트리 탐색을 통해 경로 찾기가 어떤 사다리에 도달했는지 결정합니다. 특정 레벨 ... 그러나 그것은 빠르게 복잡해지며, 레벨은 주어진 시점에서 변경 될 수 있습니다.

내가 말했듯이, 나는 A *가 실제로 작동하는 방법이나 기본 배후가 확실하지 않지만, 대부분의 사람들이 말한 기본 알고리즘은 다중 레이어 디자인에서 작동합니다.

나는 그것이 엔진에 달려 있고 알고리즘의 구현에 따라 다르다는 것을 안다. 그래서 구체적인 것을 요구하지는 않는다 ... 그러나 상황에 접근하는 최선의 방법에 대한 약간의 조언; 다단계 계산이 내장 된 작동중인 A * 구현을 찾아 내 수준 아키텍처를 그에 맞게 변경해야합니까? 2 차원 A * 구현을 활용하고 '경로'구조를 만들어 각 레벨에서 경로 지정 지침을 제공해야합니까?

이 스타일의 디자인에 더 유리하고 효율적인 (계산/경로 찾기의 수를 고려하면) 또 다른 접근법이 있습니까?

감사합니다.

+1

짧은 대답은 A *가 잘 수행 할 수 있지만 실제로 그래프의 이론적 인 의미에서 무엇을하는지 이해해야합니다. – Sneftel

+0

\ *는 그래프에서 작동하는 알고리즘입니다. 문제를 그래프로 모델링하는 것은 간단해야합니다. –

답변

0

마음에 오는 접근 방법 : 각 레벨

계산 모든 Manhattan distances (아마도 /2 당신은 대각선으로 이동할 수있는 경우) 각 사다리에 올라가 각각의 사다리에서 (즉, 각 레벨을 가정하는 것은 2D 그리드입니다 것) 내려 가고, 각 층의 가치가 그것들의 최단 거리가되게하십시오.

이제 우리는 A * 경험적 방법을 현재 바닥에서 바닥까지의 거리의 합계로 간단히 설정할 수 있습니다.각 레벨에 대한 경로의 반복 연산을 방지하기


, 우리는 모든 레벨에 사다리 사다리에서 각각의 가능한 경로를 미리 계산할 수있다 - 또한 다음 오히려 추론 맨하탄 거리보다 이러한 경로의 최단를 사용할 수있다.


주어진 시간에 최소 80 개 이상의 다른 경로가 계산 될 가능성이 있습니다.

이들 모두가 동일한지도에 있다면, 각 사다리에 대해 우리가 가야 할 다음 사다리가 가장 짧은 경로 (및 비용)로 이끄는 것을 계산해야합니다 (가능한 한 Dijkstra's algorithm 하단에서 시작), 모든 출발점에서 동일한 층에있는 모든 사다리와 최단 경로 비용을 간단히 확인하고 거리와 최단 경로의 최저 합계를 나타내는 거리를 간단히 선택할 수 있습니다.

주어진 지점에 대해 다음 줄을 가장 짧은 경로로 이동해야하는 것을 저장하여 확장 할 수도 있습니다.

맵이 많이 변경되면 주어진 포인트에 대한 다음 포인트 저장은 실행 가능하지 않지만 각 사다리의 다음 사다리 저장에는 할인되지 않습니다.

+0

저는 각 사다리 목록에 어떤 사닥다리가 도달 할 수 있는지 생각했습니다 (위아래로, 당신이 내려 가기 전에 다시 올라 가야 할 경우에 대비하여 - 그 그림에 나와 있음). 주위 레벨의 '구조'가 변경 될 때마다 각 래더의 '값'이 업데이트됩니다 (따라서 해당 레벨에서 2 개의 래더 사이의 실행 가능 경로가 변경 될 수 있음). 가장 좋은 옵션은 Dijkstra 's가 바닥에서 출발점 레벨의 '사용 가능한'래더를 모두 표시하고 가장 가까운 '플래그가 지정된'래더를 선택하는 것이라고 가정했습니다. 그렇게하면 각 레벨에서 가장 가까운 플래그가 지정된 사다리를 찾을 수있는 길 밖에 없습니다. –