• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
비용 기반 그래프 탐색
 

비용 기반 그래프 탐색

on

  • 514 views

http://wawworld.me

http://wawworld.me

changhoonpark@gmail.com

Statistics

Views

Total Views
514
Views on SlideShare
514
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    비용 기반 그래프 탐색 비용 기반 그래프 탐색 Presentation Transcript

    • 게임 인공지능 GameAI 그래프 탐색 알고리즘 By Changhoon Park http://changhoonpark.wordpress.com Last Update : 2011. 08. 2811년 9월 19일 월요일
    • 경로: 1 - 2 - 3 경로: 1 - 5 - 4 - 3 2 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • 3 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • if (TotalCostToThisNode[t] > TotalCostToThisNode[n] + EdgeCost(n-to-t)) { TotalCostToThisNode[t] = TotalCostToThisNode[n] + EdgeCost(n-to-t)); Parent(t) = n; } 4 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • 5 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 3.1 3 T 2 0.8 1.9 3.7 5 S pq.insert(m_iSource); 3.0 4 2.9 1.1 6 1 1.0 1 2 3 4 5 6 SPT SF 0-0 0-0 0-0 0-0 0-0 0-0 CTN 0.0 0.0 0.0 0.0 0.0 0.0 IPQ 5 6 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 5 3.1 3 T 2 0.8 1.9 3.7 1] int NextClosestNode = pq.Pop(); 5 S 2] m_ShortestPathTree[5] = m_SearchFrontier[5]; 3.0 4 2.9 3] if (NextClosestNode == m_iTarget) return 1.1 6 1 1.0 1 2 3 4 5 6 SPT 0-0 SF 0-0 0-0 0-0 0-0 0-0 0-0 CTN 0.0 0.0 0.0 0.0 0.0 0.0 IPQ 5 7 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 5 3.1 3 T 2 for (const Edge* pE=ConstEdgeItr.begin(); 0.8 !ConstEdgeItr.end(); pE=ConstEdgeItr.next()) 1.9 3.7 5 { S double NewCost = m_CostToThisNode[NextClosestNode] + pE->Cost(); 3.0 4 2.9 if (m_SearchFrontier[pE()->To()] == 0) 1.1 { 6 m_CostToThisNode[pE()->To()] = NewCost; 1 1.0 pq.insert(pE()->To()); m_SearchFrontier[pE()->To()] = pE(); } else if ( (NewCost < m_CostToThisNode[pE()->To()]) && 1 2 3 4 5 6 (m_ShortestPathTree[pE()->To()] == 0) ) { SPT 0-0 m_CostToThisNode[pE()->To()] = NewCost; SF 0-0 5-2 0-0 0-0 0-0 5-6 pq.ChangePriority(pE()->To()); CTN 0.0 1.9 0.0 0.0 0.0 3.0 m_SearchFrontier[pE()->To()] = pE(); } IPQ 2 6 } 8 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 2 3.1 3 T 2 0.8 1.9 3.7 5 S 3.0 4 2.9 1.1 6 int NextClosestNode = pq.Pop(); 1 1.0 m_ShortestPathTree[2] = m_SearchFrontier[2]; if (NextClosestNode == m_iTarget) return 1 2 3 4 5 6 SPT 5-2 0-0 SF 0-0 5-2 0-0 0-0 0-0 5-6 CTN 0.0 1.9 0.0 0.0 0.0 3.0 IPQ 2 6 9 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 2 3.1 3 T 2 for (const Edge* pE=ConstEdgeItr.begin(); 0.8 !ConstEdgeItr.end(); pE=ConstEdgeItr.next()) 1.9 3.7 5 { S double NewCost = m_CostToThisNode[NextClosestNode] + pE->Cost(); 3.0 4 2.9 if (m_SearchFrontier[pE()->To()] == 0) 1.1 { 6 m_CostToThisNode[pE()->To()] = NewCost; 1 1.0 pq.insert(pE()->To()); m_SearchFrontier[pE()->To()] = pE(); } else if ( (NewCost < m_CostToThisNode[pE()->To()]) && 1 2 3 4 5 6 (m_ShortestPathTree[pE()->To()] == 0) ) { SPT 5-2 0-0 m_CostToThisNode[pE()->To()] = NewCost; SF 0-0 5-2 2-3 0-0 0-0 5-6 pq.ChangePriority(pE()->To()); CTN 0.0 1.9 5.0 0.0 0.0 3.0 m_SearchFrontier[pE()->To()] = pE(); } IPQ 3 6 } 10 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 6 3.1 3 T 2 0.8 1.9 3.7 5 S 3.0 4 2.9 1.1 6 int NextClosestNode = pq.Pop(); 1 1.0 m_ShortestPathTree[6] = m_SearchFrontier[6]; if (NextClosestNode == m_iTarget) return 1 2 3 4 5 6 SPT 5-2 0-0 5-6 SF 0-0 5-2 2-3 0-0 0-0 5-6 CTN 0.0 1.9 5.0 0.0 0.0 3.0 IPQ 3 6 11 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 6 3.1 3 T 2 for (const Edge* pE=ConstEdgeItr.begin(); 0.8 !ConstEdgeItr.end(); pE=ConstEdgeItr.next()) 1.9 3.7 5 { S double NewCost = m_CostToThisNode[NextClosestNode] + pE->Cost(); 3.0 4 2.9 if (m_SearchFrontier[pE()->To()] == 0) 1.1 { 6 m_CostToThisNode[pE()->To()] = NewCost; 1 1.0 pq.insert(pE()->To()); m_SearchFrontier[pE()->To()] = pE(); } else if ( (NewCost < m_CostToThisNode[pE()->To()]) && 1 2 3 4 5 6 (m_ShortestPathTree[pE()->To()] == 0) ) { SPT 5-2 0-0 5-6 m_CostToThisNode[pE()->To()] = NewCost; SF 0-0 5-2 2-3 6-4 0-0 5-6 pq.ChangePriority(pE()->To()); CTN 0.0 1.9 5.0 4.4 0.0 3.0 m_SearchFrontier[pE()->To()] = pE(); } IPQ 3 4 } 12 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 4 3.1 3 T 2 0.8 1.9 3.7 5 S 3.0 4 2.9 1.1 6 int NextClosestNode = pq.Pop(); 1 1.0 m_ShortestPathTree[4] = m_SearchFrontier[4]; if (NextClosestNode == m_iTarget) return 1 2 3 4 5 6 SPT 5-2 6-4 0-0 5-6 SF 0-0 5-2 2-3 6-4 0-0 5-6 CTN 0.0 1.9 5.0 4.4 0.0 3.0 IPQ 3 4 13 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 4 3.1 3 T 2 for (const Edge* pE=ConstEdgeItr.begin(); 0.8 !ConstEdgeItr.end(); pE=ConstEdgeItr.next()) 1.9 3.7 5 { S double NewCost = m_CostToThisNode[NextClosestNode] + pE->Cost(); 3.0 4 2.9 if (m_SearchFrontier[pE()->To()] == 0) 1.1 { 6 m_CostToThisNode[pE()->To()] = NewCost; 1 1.0 pq.insert(pE()->To()); m_SearchFrontier[pE()->To()] = pE(); } else if ( (NewCost < m_CostToThisNode[pE()->To()]) && 1 2 3 4 5 6 (m_ShortestPathTree[pE()->To()] == 0) ) { SPT 5-2 6-4 0-0 5-6 m_CostToThisNode[pE()->To()] = NewCost; SF 0-0 5-2 2-3 6-4 0-0 5-6 pq.ChangePriority(pE()->To()); CTN 0.0 1.9 5.0 4.4 0.0 3.0 m_SearchFrontier[pE()->To()] = pE(); } IPQ 3 } 14 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • NextClosestNode = 3 3.1 3 T 2 0.8 1.9 3.7 5 S 3.0 4 2.9 1.1 6 int NextClosestNode = pq.Pop(); 1 1.0 m_ShortestPathTree[4] = m_SearchFrontier[4]; if (NextClosestNode == m_iTarget) return 1 2 3 4 5 6 SPT 5-2 2-3 6-4 0-0 5-6 SF 0-0 5-2 2-3 6-4 0-0 5-6 CTN 0.0 1.9 5.0 4.4 0.0 3.0 IPQ 3 15 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • template <class graph_type > class Graph_SearchDijkstra { private: typedef typename graph_type::EdgeType Edge; typedef typename graph_type::NodeType Node; private: const graph_type & m_Graph; std::vector<const Edge*> m_ShortestPathTree; std::vector<double> m_CostToThisNode; std::vector<const Edge*> m_SearchFrontier; int m_iSource; int m_iTarget; void Search(); 16 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • public: Graph_SearchDijkstra(const graph_type& graph, int source, int target = -1) :m_Graph(graph), m_ShortestPathTree(graph.NumNodes()), m_SearchFrontier(graph.NumNodes()), m_CostToThisNode(graph.NumNodes()), m_iSource(source), m_iTarget(target) { Search(); } std::vector<const Edge*> GetAllPaths()const; std::list<int> GetPathToTarget()const; double GetCostToTarget()const; }; 17 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • template <class graph_type> void Graph_SearchDijkstra<graph_type>::Search() { IndexedPriorityQLow<double> pq(m_CostToThisNode, m_Graph.NumNodes()); pq.insert(m_iSource); while(!pq.empty()) { int NextClosestNode = pq.Pop(); m_ShortestPathTree[NextClosestNode] = m_SearchFrontier[NextClosestNode]; if (NextClosestNode == m_iTarget) return; 18 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • graph_type::ConstEdgeIterator ConstEdgeItr(m_Graph, NextClosestNode); for (const Edge* pE=ConstEdgeItr.begin(); !ConstEdgeItr.end(); pE=ConstEdgeItr.next()) { double NewCost = m_CostToThisNode[NextClosestNode] + pE->Cost(); if (m_SearchFrontier[pE->To()] == 0) { m_CostToThisNode[pE->To()] = NewCost; pq.insert(pE->To()); m_SearchFrontier[pE->To()] = pE; } 19 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • else if ( (NewCost < m_CostToThisNode[pE->To()]) && (m_ShortestPathTree[pE->To()] == 0) ) { m_CostToThisNode[pE->To()] = NewCost; pq.ChangePriority(pE->To()); m_SearchFrontier[pE->To()] = pE; } } } } 20 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • 21 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • 22 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • template <class graph_type, class heuristic> class Graph_SearchAStar { private: typedef typename graph_type::EdgeType Edge; private: const graph_type& m_Graph; std::vector<double> m_GCosts; std::vector<double> m_FCosts; std::vector<const Edge*> m_ShortestPathTree; std::vector<const Edge*> m_SearchFrontier; int m_iSource; int m_iTarget; 23 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • public: Graph_SearchAStar(graph_type& graph, int source, int target) :m_Graph(graph), m_ShortestPathTree(graph.NumNodes()), m_SearchFrontier(graph.NumNodes()), m_GCosts(graph.NumNodes(), 0.0), m_FCosts(graph.NumNodes(), 0.0), m_iSource(source), m_iTarget(target) { Search(); } std::vector<const Edge*> GetSPT()const; std::list<int> GetPathToTarget()const; double GetCostToTarget()const; }; 24 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • static double Calculate(const graph_type& G, int nd1, int nd2); =================================================================== class Heuristic_Euclid { public: Heuristic_Euclid(){} template <class graph_type> static double Calculate(const graph_type& G, int nd1, int nd2) { return Vec2DDistance(G.GetNode(nd1).Position, G.GetNode(nd2).Position); } }; 25 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • template <class graph_type, class heuristic> void Graph_SearchAStar<graph_type, heuristic>::Search() { IndexedPriorityQLow<double> pq(m_FCosts, m_Graph.NumNodes()); pq.insert(m_iSource); while(!pq.empty()) { int NextClosestNode = pq.Pop(); m_ShortestPathTree[NextClosestNode] = m_SearchFrontier[NextClosestNode]; if (NextClosestNode == m_iTarget) return; graph_type::ConstEdgeIterator ConstEdgeItr(m_Graph, NextClosestNode); 26 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • for (const Edge* pE=ConstEdgeItr.begin(); !ConstEdgeItr.end(); pE=ConstEdgeItr.next()) { double HCost = heuristic::Calculate(m_Graph, m_iTarget, pE->To()); double GCost = m_GCosts[NextClosestNode] + pE->Cost(); if (m_SearchFrontier[pE->To()] == NULL) { m_FCosts[pE->T()] = GCost + HCost; m_GCosts[pE->To()] = GCost; pq.insert(pE->To()); m_SearchFrontier[pE->To()] = pE; } 27 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • else if ((GCost < m_GCosts[pE->To()]) && (m_ShortestPathTree[pE->To()]==NULL)) { m_FCosts[pE->To()] = GCost + HCost; m_GCosts[pE->To()] = GCost; pq.ChangePriority(pE->To()); m_SearchFrontier[pE->To()] = pE; } } } } 28 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일
    • 29 그래프 탐색 알고리즘 무정보 그래프 탐색 에지완화 비용 기반 그래프 탐색 Dijkstra 알고리즘 A* By Changhoon Park http://changhoonpark.wordpress.com11년 9월 19일 월요일