Your SlideShare is downloading. ×
  • Like
[1113 박민수]a star_알고리즘
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 866 views
Published

A* Algorithm

A* Algorithm

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
866
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
11
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 2010/11/13 Devrookie 엠에스박( 박민수 )
  • 2.  그래프 순회 복습  A*의 개요  A*의 특징  A*의 적용  A*의 약점  Q & A  참고자료
  • 3.  Depth-First Search( 깊이 우선 탐색 ) 1 4 2 3 5 1 5목표 시작 도착 거리 숫자
  • 4.  Breadth-First Search( 너비 우선 탐색 ) 1 4 5 1 5목표 시작 도착 거리 숫자
  • 5.  Dijkstra Algorithm  각 노드사이의 거리를 저장하여 최단거리를 구 한다.  특정 노드까지 거리의 합을 저장하고 다른 경로 와 비교하여 노드 이동때 마다 최단거리의 노드 를 구한다.  구해진 경로로 가면 최단거리가 된다.
  • 6.  Dijkstra Algorithm 1 5 1 5목표 시작 도착 거리 숫자
  • 7.  Best-First Search  휴리스틱에 따라 가장 좋은 경로에 있다고 판단되는 노드로 이동한다.  방문한 곳은 가지 않는다.  도착점에 도달하면 알고리즘을 종료한다.
  • 8.  Best-First Search 2 3 4 2 5목표 시작 도착 거리 숫자 휴리스틱 (숫자) 1 5
  • 9.  Best-First Search  휴리스틱을 기반으로 찾아낸다고 최적의 값이 나오는 것은 아니다. 2 3 4 1 5 거리 : 5 + 4 + 3 + 3 = 15 2 4 1 5 거리 : 3 + 3 + 3 = 9
  • 10.  Peter Hart, Nils Nilsson, Bertram Raphael 가 1968년에 만든 그래프 순회 알고리즘이 다.  Edsger Dijkstra가 1959년에 만든 알고리 즘의 확장판이다.  A* 알고리즘은 Best-First 검색을 이용해 시 작점에서 도착점까지의 가장 적은 비용을 사용하는 경로를 찾아낸다.
  • 11.  조사하지 않은 노드중에서 가장 효율적이 라고 판단되는 노드로 찾는다.  찾아진 노드가 도착점이면 종료하고 아니면 인접한 다른 노드들에서 찾는다.  조사한 노드들은 Close List에 담고 조사하지 않은 노드들은 Open List에 담는 다.
  • 12.  알고리즘의 시작  Close List는 비어있다.  Open List는 시작점만 들어있다.  알고리즘의 흐름  Open List에 있는 노드들 중 가장 효율적인 노드를 찾고 도착점인지 비교한다.  아니라면 그 노드와 인접한 노드가 Close List에 있 으면 무시하고 Open List에 있으면 그 노드까지의 경로 효율을 다시 계산해 더 효율적이면 갱신한다.
  • 13.  효율적인 노드를 찾는 방법  시작점에서 해당 노드까지 가는 가장 적은 비용 ▪ CostFromStart  해당 노드에서 도착점까지 가는 가장 적은 비용 ▪ CostToGoal  이 두 비용의 합이 제일 적은 노드가 효율적이 다.
  • 14.  의사코드  Open List : Priority Queue  Close List : List StartNode.Location = StartLocation; StartNode.CostFromStart = 0; StartNode.CostToGoal = PathCostEstimate(); StartNode.Parent = NULL; OpenList.push( StartNode );
  • 15.  의사코드 while( !OpenList.empty() ) { Node = OpenList.pop(); // 최저의 Cost if( Node == Goal ) return true; else 인접한 노드들 추가 CloseList.push( Node ); } return false;
  • 16.  의사코드( 인접한 노드 추가 ) for ( 인접한 노드들 ) { if(새로운 노드가 CloseList나 OpenList에 있는데 비용이 최저비용 보다 크면 ){ 무시한다. } } else { 새로운 노드를 초기화 해준다. 새로운 노드가 CloseList에 있으면 OpenList로 옮긴다. 새로운 노드가 OpenList에 있으면 갱신해준다. if( 새로운 노드가 CloseList와 OpenList에 없으면 ) OpenList에 새로운 노드를 넣어준다. } }
  • 17.  경로가 존재한다면 하나의 경로를 찾는다.  경로가 존재하지 않는다면 모든 경로를 찾는 다.  최적의 경로를 찾는다. ( 비용 계산이 올바르 면 )  휴리스틱을 효율적으로 사용한다.  평균적으로 빠른 성능을 보인다.
  • 18.  노드의 표현  A*를 게임에 적용하려면 게임의 길을 그래프로 표현해야 한다.  길을 찾는 유닛에 대해 방향, 속도등을 고려하 고 지형의 속성에 대해서도 고려하면 좀 더 지능적 인 길찾기가 가능하다.
  • 19.  노드의 표현  공간 분할 정사각형 격자 쿼드 트리 볼록 다각형 가시점 일반화된 원통
  • 20.  노드의 표현  공간 분할 ▪ 정사각형 격자 ▪ 가장 간단한 방법이다. ▪ 공간을 동일한 크기의 정사각형 격자로 분할한다. ▪ 검색 위치는 정사각형 중심 혹은 모서리등 적절히 정한다. ▪ 하나의 정사각형 격자 하나가 한 속성을 나타내게 하는게 좋 다.
  • 21.  노드의 표현  공간 분할 ▪ 쿼드 트리 ▪ 공간을 서로 다른 크기의 정사각형으로 분할한다. ▪ 하나의 사각형을 점점 더 작은 사각형으로 분할한다. ▪ 검색 위치는 정사각형 중심 혹은 모서리등 적절히 정한다. ▪ 사각형의 크기가 클 수록( 상위 노드 일수록 ) 검색이 빠르다.
  • 22.  노드의 표현  공간 분할 ▪ 볼록 다각형 ▪ 공간을 볼록 다각형으로 분할한다. ▪ C-Cell : 각 정점과 가시점을 연결한 선으로 볼록 다각형을 만 든다. ▪ 최대 영역 해체 : 정점들을 연결하고 그 선중 짧은 것을 선택한 다. ▪ 네비게이션 메쉬 : 메쉬에 정보를 기록해 둔다.
  • 23.  노드의 표현  공간 분할 ▪ 가시점 ▪ 공간을 분할하지 않고 직접 위치를 결정한다. ▪ 각 장애물의 볼록 정점과 약간 떨어진 위치를 검색 위치로 한 다. ▪ 각 검색 위치 사이의 평균을 이용해 검색 위치를 더 생성하는 등 검색 위치가 많이 잘 배치 될 수록 부드러운 길찾기를 하게 된 다.
  • 24.  노드의 표현  공간 분할 ▪ 일반화된 원통 ▪ 이웃하는 장애물 사이에 원통을 둔다. ▪ 이 원통들을 이은 선들의 교점을 검색 위치로 한다.
  • 25.  노드의 표현  공간 분할 ▪ 모든 곳들의 길을 잘 찾는지 지속적인 테스트가 필요 하다. ▪ 되도록 적은 검색 위치를 두고 모든 곳에 길찾기를 할 수 있게 하는 것이 좋다. ▪ 이동이 부드럽게 보일 정도는 검색 위치를 두어야 한 다.
  • 26.  노드의 표현  이웃한 노드 ▪ 사각형 격자면 주위의 네칸의 노드들. ▪ 인덱스의 이동으로 쉽게 접근이 가능하다. ▪ 아니면 선으로 연결된 노드들. ▪ 접근이 쉽게 이웃 정보들을 자료구조에 저장해 놓는게 좋다.
  • 27.  노드의 표현  비용 ▪ 이동 거리 ▪ 걸리는 시간 ▪ 소비한 이동력 ▪ 소비한 연료
  • 28.  노드의 표현  비용 계산 ▪ 출발 지점과 도착 지점 ▪ 유닛의 타입  비용 저장 ▪ 이웃 정보와 같이 저장해 두는 것이 이상적이다.
  • 29.  노드의 표현  추정 ▪ 최적의 경로를 찾기 위해서는 비용을 과대평가하지 말 것. ▪ 맵 상의 최단 거리에 단위 거리당 최소 지형 비용을 적용. ▪ 검색 속도를 높이기 위해서는 적절한 휴리스틱 가중 치를 두어야 한다.
  • 30.  노드의 표현  추정
  • 31.  노드의 표현  추정
  • 32.  A*도 막 만들고 적용하면 게임에서 사용하 기 힘들 수 있다.  맵의 크기가 크면 Open List, Close List가 커져서 메모리를 많이 사용하게 된다.  맵의 크기가 크면 A*를 위해 CPU가 많이 사용될 것이다.
  • 33.  도달할 수 없는 길을 다 돌아봐야 알 수 있 다.  미리 갈 수 있나 없나를 간단하게 판단하고 있 다면 A*를 계산하는게 효율적이다.
  • 34.  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.html  http://blog.naver.com/nsunlee?Redirect=Log&logNo=130048748400
  • 35. The End