[1113 박민수]a star_알고리즘

36
GPG1 – 3.3 A* 길길길 길길길길길 길길 2010/11/13 Devrookie 엠엠엠엠 ( 엠엠엠 )

Upload: moonlightms

Post on 01-Dec-2014

1.262 views

Category:

Technology


0 download

DESCRIPTION

A* Algorithm

TRANSCRIPT

Page 1: [1113 박민수]a star_알고리즘

GPG1 – 3.3A* 길찾기 알고리즘의 기초

2010/11/13Devrookie 엠에스박 ( 박민수 )

Page 2: [1113 박민수]a star_알고리즘

목차

그래프 순회 복습A* 의 개요A* 의 특징A* 의 적용A* 의 약점Q & A 참고자료

Page 3: [1113 박민수]a star_알고리즘

그래프 순회 복습

Depth-First Search( 깊이 우선 탐색 )

1 4 2 3

5

1 5목표

시작도착거리 숫자

Page 4: [1113 박민수]a star_알고리즘

그래프 순회 복습

Breadth-First Search( 너비 우선 탐색 )

1 4

5

1 5목표

시작도착거리 숫자

Page 5: [1113 박민수]a star_알고리즘

그래프 순회 복습

Dijkstra Algorithm 각 노드사이의 거리를 저장하여 최단거리를

구한다 .

특정 노드까지 거리의 합을 저장하고 다른 경로와 비교하여 노드 이동때 마다 최단거리의 노드를 구한다 .

구해진 경로로 가면 최단거리가 된다 .

Page 6: [1113 박민수]a star_알고리즘

그래프 순회 복습

Dijkstra Algorithm

1 5

1 5목표

시작도착거리 숫자

Page 7: [1113 박민수]a star_알고리즘

그래프 순회 복습

Best-First Search 휴리스틱에 따라 가장 좋은 경로에 있다고

판단되는 노드로 이동한다 .

방문한 곳은 가지 않는다 .

도착점에 도달하면 알고리즘을 종료한다 .

Page 8: [1113 박민수]a star_알고리즘

그래프 순회 복습

Best-First Search

2 3 4

2 5목표

시작도착거리 숫자휴리스틱 (숫자 )

1 5

Page 9: [1113 박민수]a star_알고리즘

그래프 순회 복습

Best-First Search 휴리스틱을 기반으로 찾아낸다고 최적의 값이

나오는 것은 아니다 .2 3 4 1 5

거리 : 5 + 4 + 3 + 3 = 15

2 4 1 5

거리 : 3 + 3 + 3 = 9

Page 10: [1113 박민수]a star_알고리즘

A* 의 개요

Peter Hart, Nils Nilsson, Bertram Raphael 가 1968 년에 만든 그래프 순회 알고리즘이다 .

Edsger Dijkstra 가 1959 년에 만든 알고리즘의 확장판이다 .

A* 알고리즘은 Best-First 검색을 이용해 시작점에서 도착점까지의 가장 적은 비용을 사용하는 경로를 찾아낸다 .

Page 11: [1113 박민수]a star_알고리즘

A* 의 개요

조사하지 않은 노드중에서 가장 효율적이라고 판단되는 노드로 찾는다 .

찾아진 노드가 도착점이면 종료하고아니면 인접한 다른 노드들에서 찾는다 .

조사한 노드들은 Close List 에 담고조사하지 않은 노드들은 Open List 에 담는다 .

Page 12: [1113 박민수]a star_알고리즘

A* 의 개요

알고리즘의 시작 Close List 는 비어있다 . Open List 는 시작점만 들어있다 .

알고리즘의 흐름 Open List 에 있는 노드들 중 가장 효율적인 노드를

찾고 도착점인지 비교한다 . 아니라면 그 노드와 인접한 노드가 Close List 에

있으면 무시하고 Open List 에 있으면 그 노드까지의 경로 효율을 다시 계산해 더 효율적이면 갱신한다 .

Page 13: [1113 박민수]a star_알고리즘

A* 의 개요

효율적인 노드를 찾는 방법 시작점에서 해당 노드까지 가는 가장 적은

비용▪ CostFromStart

해당 노드에서 도착점까지 가는 가장 적은 비용▪ CostToGoal

이 두 비용의 합이 제일 적은 노드가 효율적이다 .

Page 14: [1113 박민수]a star_알고리즘

A* 의 개요

의사코드 Open List : Priority Queue Close List : List

StartNode.Location = StartLocation;StartNode.CostFromStart = 0;StartNode.CostToGoal = PathCostEstimate();StartNode.Parent = NULL;

OpenList.push( StartNode );

Page 15: [1113 박민수]a star_알고리즘

A* 의 개요

의사코드while( !OpenList.empty() ) {Node = OpenList.pop(); // 최저의 Cost

if( Node == Goal )return true;else인접한 노드들 추가

CloseList.push( Node );}

return false;

Page 16: [1113 박민수]a star_알고리즘

A* 의 개요

의사코드 ( 인접한 노드 추가 )for ( 인접한 노드들 ) {

if(새로운 노드가 CloseList나 OpenList에 있는데 비용이 최저비용 보다 크면 ){

무시한다 . }

}else {

새로운 노드를 초기화 해준다 . 새로운 노드가 CloseList에 있으면 OpenList로 옮긴다 . 새로운 노드가 OpenList에 있으면 갱신해준다 .

if( 새로운 노드가 CloseList와 OpenList에 없으면 ) OpenList에 새로운 노드를 넣어준다 .

}}

Page 17: [1113 박민수]a star_알고리즘

A* 의 특징

경로가 존재한다면 하나의 경로를 찾는다 .

경로가 존재하지 않는다면 모든 경로를 찾는다 .

최적의 경로를 찾는다 . ( 비용 계산이 올바르면 )

휴리스틱을 효율적으로 사용한다 .

평균적으로 빠른 성능을 보인다 .

Page 18: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 A* 를 게임에 적용하려면 게임의 길을 그래프로

표현해야 한다 .

길을 찾는 유닛에 대해 방향 , 속도등을 고려하고지형의 속성에 대해서도 고려하면 좀 더 지능적인길찾기가 가능하다 .

Page 19: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 공간 분할 정사각형 격자 쿼드 트리

볼록 다각형 가시점 일반화된 원통

Page 20: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 공간 분할▪ 정사각형 격자▪ 가장 간단한 방법이다 .

▪ 공간을 동일한 크기의 정사각형 격자로 분할한다 .

▪ 검색 위치는 정사각형 중심 혹은 모서리등 적절히 정한다 .

▪ 하나의 정사각형 격자 하나가 한 속성을 나타내게 하는게 좋다 .

Page 21: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 공간 분할▪ 쿼드 트리▪ 공간을 서로 다른 크기의 정사각형으로 분할한다 .

▪ 하나의 사각형을 점점 더 작은 사각형으로 분할한다 .

▪ 검색 위치는 정사각형 중심 혹은 모서리등 적절히 정한다 .

▪ 사각형의 크기가 클 수록 ( 상위 노드 일수록 ) 검색이 빠르다 .

Page 22: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 공간 분할▪ 볼록 다각형▪ 공간을 볼록 다각형으로 분할한다 .

▪ C-Cell : 각 정점과 가시점을 연결한 선으로 볼록 다각형을 만든다 .

▪ 최대 영역 해체 : 정점들을 연결하고 그 선중 짧은 것을 선택한다 .

▪ 네비게이션 메쉬 : 메쉬에 정보를 기록해 둔다 .

Page 23: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 공간 분할▪ 가시점▪ 공간을 분할하지 않고 직접 위치를 결정한다 .

▪ 각 장애물의 볼록 정점과 약간 떨어진 위치를 검색 위치로 한다 .

▪ 각 검색 위치 사이의 평균을 이용해 검색 위치를 더 생성하는 등검색 위치가 많이 잘 배치 될 수록 부드러운 길찾기를 하게

된다 .

Page 24: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 공간 분할▪ 일반화된 원통▪ 이웃하는 장애물 사이에 원통을 둔다 .

▪ 이 원통들을 이은 선들의 교점을 검색 위치로 한다 .

Page 25: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 공간 분할▪ 모든 곳들의 길을 잘 찾는지 지속적인 테스트가

필요하다 .

▪ 되도록 적은 검색 위치를 두고 모든 곳에 길찾기를 할 수 있게 하는 것이 좋다 .

▪ 이동이 부드럽게 보일 정도는 검색 위치를 두어야 한다 .

Page 26: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 이웃한 노드▪ 사각형 격자면 주위의 네칸의 노드들 .▪ 인덱스의 이동으로 쉽게 접근이 가능하다 .

▪ 아니면 선으로 연결된 노드들 .▪ 접근이 쉽게 이웃 정보들을 자료구조에 저장해 놓는게 좋다 .

Page 27: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 비용▪ 이동 거리

▪ 걸리는 시간

▪ 소비한 이동력

▪ 소비한 연료

Page 28: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 비용 계산▪ 출발 지점과 도착 지점

▪ 유닛의 타입

비용 저장▪ 이웃 정보와 같이 저장해 두는 것이 이상적이다 .

Page 29: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 추정▪ 최적의 경로를 찾기 위해서는 비용을 과대평가하지

말 것 .

▪ 맵 상의 최단 거리에 단위 거리당 최소 지형 비용을 적용 .

▪ 검색 속도를 높이기 위해서는 적절한 휴리스틱 가중치를두어야 한다 .

Page 30: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 추정

Page 31: [1113 박민수]a star_알고리즘

A* 의 적용

노드의 표현 추정

Page 32: [1113 박민수]a star_알고리즘

A* 의 약점

A* 도 막 만들고 적용하면 게임에서 사용하기 힘들 수 있다 .

맵의 크기가 크면 Open List, Close List가 커져서 메모리를 많이 사용하게 된다 .

맵의 크기가 크면 A* 를 위해 CPU 가 많이 사용될 것이다 .

Page 33: [1113 박민수]a star_알고리즘

A* 의 약점

도달할 수 없는 길을 다 돌아봐야 알 수 있다 . 미리 갈 수 있나 없나를 간단하게 판단하고

있다면 A* 를 계산하는게 효율적이다 .

Page 34: [1113 박민수]a star_알고리즘

Q&A

Page 35: [1113 박민수]a star_알고리즘

참고자료

GPG1 – 3.3 A* 길찾기 알고리즘의 기초 http://en.wikipedia.org/wiki/A*_search_algorithm – A*

Wikipedia http://www.policyalmanac.org/games/aStarTutorial.htm http://theory.stanford.edu/~amitp/GameProgramming/ http://redcarrot.tistory.com/45 http://sonia-searchalgorithms.blogspot.com/2008_04_01_archive.h

tml http://blog.naver.com/nsunlee?Redirect=Log&logNo=1300487484

00

Page 36: [1113 박민수]a star_알고리즘

마무리

The End