330 likes | 502 Views
Artificial Intelligence in Game Design. Lecture 11: Path Planning Algorithms. Path Planning Algorithms. Dijkstra’s shortest path algorithm Guaranteed to find shortest path Not fast ( O ( n 2 ) ) A* path algorithm Requires estimation heuristic Much faster
E N D
Artificial Intelligence in Game Design Lecture 11: Path Planning Algorithms
Path Planning Algorithms • Dijkstra’s shortest path algorithm • Guaranteed to find shortest path • Not fast (O (n2) ) • A* path algorithm • Requires estimation heuristic • Much faster • Not guaranteed to find shortest path depending on heuristic
Dijkstra Algorithm Example • Example: 5 2 6 6 1 7 1 8 3
Dijkstra Algorithm Example • Example as a graph: E 5 D 2 6 B 6 1 7 A 1 G 8 3 C Goal: find shortest path from A to G
Dijkstra Algorithm Components • Tree • Contains all explored nodes • Initially start node • Assumption: know shortest path from start to all nodes in rest of tree • Fringe • All nodes adjacent to some tree node • Assumption : know shortest path from start to all fringe nodes using only nodes in tree • Unknown • All nodes not in tree or fringe
Dijkstra Algorithm Components • Data structure for each node stores: • State of that node (tree, fringe, or unknown) • Shortest path (so far) from start to node • Total cost of that path • Initially: • Fringe nodes have just edge from start • Unknown nodes have no path
Dijkstra Algorithm At each cycle: • Add fringe node n with shortest path to tree • Recheck all nodes f in fringe to see if now shorter path using n • If current best path to f > path to n + edge from n to fnew path to f = path to n + edge from n to f • Add unknown nodes uadjacent to n to fringe • u’s path = path to n + edge from n to u • Done when goal node in tree • At that point, have shortest path to goal from start
Dijkstra Algorithm Example Initially: • Start node A in tree • Adjacent nodes B, C, and E in fringe • Paths to nodes = edge from start E 5 D 2 6 B 6 1 7 A 1 G 8 3 C
Dijkstra Algorithm Example Next step: • Add E to tree (shortest path of B, C, and E) • Check whether creates shorter path to B (no) • Check whether adjacent to unknown nodes (no) E 5 D 2 6 B 6 1 7 A 1 G 8 3 C
Dijkstra Algorithm Example Check whether A E B shorter Cost of A E B = 7, so no change
Dijkstra Algorithm Example Next step: • Add B to tree (shortest path of B and C) • Check whether creates shorter path to B (yes) • Check whether adjacent to unknown nodes (yes) E 5 D 2 6 B 6 1 7 A 1 G 8 3 C
Dijkstra Algorithm Example Check whether A B C shorter Cost of A B C = 7, so use it as path Paths to new nodes = path to B + edge from B
Dijkstra Algorithm Example Next step: • Add C to tree (shortest path of C, D,and G) • Check whether creates shorter path to G (yes) E 5 D 2 6 B 6 1 7 A 1 G 8 3 C
Dijkstra Algorithm Example Check whether A C G shorter Cost of A B C G = 10, so use it as path
Dijkstra Algorithm Example Next step: Add goal node G to tree (shortest path of D and G) Algorithm finished No possibility of shorter path through D E 5 D 2 6 B 6 1 7 A 1 G 8 3 C
Dijkstra Algorithm Example Final path and path cost
Dijkstra Algorithm Analysis • Worst case: may need to example alln nodes • For each step, must check allm nodes in fringe • Worst case: all n nodes in fringe • Unlikely, since most levels far less interconnected • Number of comparisons: O (nm) • O (n2) in worst case
The A* Algorithm • Similar in structure to Dijkstra • Tree, fringe, and unknown nodes • Store “best path so far” fro each node explored • Choose next fringe node to add to tree • Idea: Choose fringe node n believed to be part of “shortest path” • Haven’t explored entire graph yet, so don’t know path length • Requires estimate of total path length • Estimate is a heuristicH(n)
The A* Algorithm • Estimated path length for path including n = length of path from start to n + estimated distance from n to goal Known, since have explored graph from start to n Requires heuristicH(n) to create an estimate Start Goal
A* Algorithm Example 90 CLE YNG 60 70 AKR CAN 70 30 PIT 80 75 50 WHE COL 100 Goal: find shortest path from YNG to COL
A* Algorithm Example Heuristic H (n) = “as crow flies” distance to COL
A* Algorithm Example Best path so far
A* Algorithm Example Add CAN to fringe
A* Algorithm Example Best path so far
A* Algorithm Example Add COL to fringe
A* Algorithm Example Best path so far
A* Algorithm Example Like Dijkstra, reevaluate all other nodes in fringe to see if new tree node gives shorter path
A* Algorithm Example When goal node added to tree, algorithm done Best path
A* Heuristics • A* heuristic admissible if always underestimates distance to goalH (n) ≤ actual distance to goal • True for example • Usually true for “as crow flies” estimates A* Heuristics
A* Heuristics • Heuristic may not be valid if “short cuts” in level • Estimated path using C has length 12.5 • Actual path has length 6 (using transporter pad) • Path using A has estimated length 7 • Goal added to tree before C ever explored • However, non-optimal behavior may be more plausible • Character may not know about transporter pad! B C Start “Transporter pad” between C and goal A Goal D
A* Heuristics • Algorithm can be inefficient if heuristic severely underestimates distance • PIT and other obviously implausible nodes (CHI, PHI, NY, TOR, etc.) not explored • If all estimated distances low (1 for example) then all will be explored • Adjacent nodes (YNG PIT PHIL) explored before paths with closer but more nodes (YNG AKR CAN COL)
A* Heuristics • Heuristic underestimates can happen in levels with costly terrain • Estimated distance = 4 squares • Actual distance = 2 + 5 + 5 = 9 due to desert, mountains • No perfect solution • Potential hierarchical solution: • Create high-level map with terrain type of large general areas • Determine which areas direct path to goal would cross • Factor in terrain costs Start Estimated distance = width of forest area * cost of forest +width of mountain area * cost of mountain Goal