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

Weitere ähnliche Inhalte

Was ist angesagt?

게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCPSeungmo Koo
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)_ce
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object poolingNam Hyeonuk
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
Reactjs workshop
Reactjs workshop Reactjs workshop
Reactjs workshop Ahmed rebai
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
스프링처럼 JDBC 리팩터링하기
스프링처럼 JDBC 리팩터링하기 스프링처럼 JDBC 리팩터링하기
스프링처럼 JDBC 리팩터링하기 Chanwook Park
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해Nam Hyeonuk
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2YEONG-CHEON YOU
 
Java EE Servlet JSP Tutorial- Cookbook 1
Java EE Servlet JSP Tutorial- Cookbook 1Java EE Servlet JSP Tutorial- Cookbook 1
Java EE Servlet JSP Tutorial- Cookbook 1billdigman
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013devCAT Studio, NEXON
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP AdvSeungmo Koo
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019devCAT Studio, NEXON
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 

Was ist angesagt? (20)

게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
Reactjs workshop
Reactjs workshop Reactjs workshop
Reactjs workshop
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
스프링처럼 JDBC 리팩터링하기
스프링처럼 JDBC 리팩터링하기 스프링처럼 JDBC 리팩터링하기
스프링처럼 JDBC 리팩터링하기
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2
 
Java EE Servlet JSP Tutorial- Cookbook 1
Java EE Servlet JSP Tutorial- Cookbook 1Java EE Servlet JSP Tutorial- Cookbook 1
Java EE Servlet JSP Tutorial- Cookbook 1
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 

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

5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)hyun soomyung
 
다익스트라 최단 거리 알고리즘
다익스트라 최단 거리 알고리즘다익스트라 최단 거리 알고리즘
다익스트라 최단 거리 알고리즘장 공의
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서mil23
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)Bill Kim
 
자료구조 04 최종 보고서
자료구조 04 최종 보고서자료구조 04 최종 보고서
자료구조 04 최종 보고서pkok15
 

Ähnlich wie [1113 박민수]a star_알고리즘 (6)

5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)
 
다익스트라 최단 거리 알고리즘
다익스트라 최단 거리 알고리즘다익스트라 최단 거리 알고리즘
다익스트라 최단 거리 알고리즘
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)
 
2012 Ds 04
2012 Ds 042012 Ds 04
2012 Ds 04
 
자료구조 04 최종 보고서
자료구조 04 최종 보고서자료구조 04 최종 보고서
자료구조 04 최종 보고서
 

Mehr von MoonLightMS

네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)MoonLightMS
 
[0212 박민수]환경 매핑
[0212 박민수]환경 매핑[0212 박민수]환경 매핑
[0212 박민수]환경 매핑MoonLightMS
 
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정MoonLightMS
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자MoonLightMS
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadowMoonLightMS
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1MoonLightMS
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑MoonLightMS
 
Assert에 대해서
Assert에 대해서Assert에 대해서
Assert에 대해서MoonLightMS
 

Mehr von MoonLightMS (8)

네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)
 
[0212 박민수]환경 매핑
[0212 박민수]환경 매핑[0212 박민수]환경 매핑
[0212 박민수]환경 매핑
 
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadow
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑
 
Assert에 대해서
Assert에 대해서Assert에 대해서
Assert에 대해서
 

Kürzlich hochgeladen

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and AdoptionSeung-chan Baeg
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 

Kürzlich hochgeladen (7)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 

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

  • 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.  노드의 표현  추정 ▪ 최적의 경로를 찾기 위해서는 비용을 과대평가하지 말 것. ▪ 맵 상의 최단 거리에 단위 거리당 최소 지형 비용을 적용. ▪ 검색 속도를 높이기 위해서는 적절한 휴리스틱 가중 치를 두어야 한다.
  • 32.  A*도 막 만들고 적용하면 게임에서 사용하 기 힘들 수 있다.  맵의 크기가 크면 Open List, Close List가 커져서 메모리를 많이 사용하게 된다.  맵의 크기가 크면 A*를 위해 CPU가 많이 사용될 것이다.
  • 33.  도달할 수 없는 길을 다 돌아봐야 알 수 있 다.  미리 갈 수 있나 없나를 간단하게 판단하고 있 다면 A*를 계산하는게 효율적이다.
  • 34.
  • 35.  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