Lab 10
Lab 10
Note:
In preparation of these materials have been taken from different online
sources in the shape of books, websites, research papers and presentations etc.
However, the author does not have any intention to take any benefit of these in her/his
own name. This lecture (audio, video, slides etc.) is prepared and delivered only for
educational purposes and is not intended to infringe upon the copyrighted material.
Sources have been acknowledged where applicable. The views expressed are
presenter’s alone and do not necessarily represent actual author(s) or the institution.
Lab 10
A* Algorithm
Motivation
To approximate the shortest path in real-life situations, like- in maps, games where there can be
many hindrances.
We can consider a 2D Grid having several obstacles and we start from a source cell (coloured
red below) to reach towards a goal cell (coloured green below)
What it means is that it is really a smart algorithm which separates it from the other conventional
algorithms. This fact is cleared in detail in below sections.
And it is also worth mentioning that many games and web-based maps use this algorithm to find
the shortest path very efficiently (approximation).
Explanation
Consider a square grid having many obstacles and we are given a starting cell and a target cell.
We want to reach the target cell (if possible) from the starting cell as quickly as possible. Here
A* Search Algorithm comes to the rescue.
What A* Search Algorithm does is that at each step it picks the node according to a value-‘f’
which is a parameter equal to the sum of two other parameters – ‘g’ and ‘h’. At each step it picks
the node/cell having the lowest ‘f’, and process that node/cell.
We define ‘g’ and ‘h’ as simply as possible below
g = the movement cost to move from the starting point to a given square on the grid, following
the path generated to get there.
h = the estimated movement cost to move from that given square on the grid to the final
destination. This is often referred to as the heuristic, which is nothing but a kind of smart guess.
We really don’t know the actual distance until we find the path, because all sorts of things can be
in the way (walls, water, etc.). There can be many ways to calculate this ‘h’ which are discussed
in the later sections.
Algorithm
We create two lists – Open List and Closed List (just like Dijkstra Algorithm)
// A* Search Algorithm
1. Initialize the open list
2. Initialize the closed list
put the starting node on the open
list (you can leave its f at zero)
Heuristics
We can calculate g but how to calculate h ?
We can do things.
A) Either calculate the exact value of h (which is certainly time consuming).
FATIMA JINNAH WOMEN UNIVERSITY
Department of Computer Science
LAB MANUAL: Artificial Intelligence
OR
B ) Approximate the value of h using some heuristics (less time consuming).
We will discuss both of the methods.
A) Exact Heuristics –
We can find exact values of h, but that is generally very time consuming.
Below are some of the methods to calculate the exact value of h.
1) Pre-compute the distance between each pair of cells before running the A* Search Algorithm.
2) If there are no blocked cells/obstacles then we can just find the exact value of h without any
pre-computation using the distance formula/Euclidean Distance
B) Approximation Heuristics –
There are generally three approximation heuristics to calculate h –
1) Manhattan Distance –
It is nothing but the sum of absolute values of differences in the goal’s x and y coordinates
and the current cell’s x and y coordinates respectively, i.e.,
h = abs (current_cell.x – goal.x) +
abs (current_cell.y – goal.y)
When to use this heuristic? – When we are allowed to move only in four directions only
(right, left, top, bottom)
The Manhattan Distance Heuristics is shown by the below figure (assume red spot as source cell
and green spot as target cell).
2) Diagonal Distance-
It is nothing but the maximum of absolute values of differences in the goal’s x and y
coordinates and the current cell’s x and y coordinates respectively, i.e.,
FATIMA JINNAH WOMEN UNIVERSITY
Department of Computer Science
LAB MANUAL: Artificial Intelligence
3) Euclidean Distance-
As it is clear from its name, it is nothing but the distance between the current cell and the
goal cell using the distance formula
h = sqrt ( (current_cell.x – goal.x)2 +
(current_cell.y – goal.y)2 )
When to use this heuristic? – When we are allowed to move in any directions.
The Euclidean Distance Heuristics is shown by the below figure (assume red spot as source cell
and green spot as target cell).
FATIMA JINNAH WOMEN UNIVERSITY
Department of Computer Science
LAB MANUAL: Artificial Intelligence
Tasks
Understand the problem
Implement any game that implements a* algorithm using java, c#, CLISP or python
Use any IDE
FATIMA JINNAH WOMEN UNIVERSITY
Department of Computer Science
LAB MANUAL: Artificial Intelligence
import math
import heapq
class Node:
def __init__(self, x, y, g=0, h=0, parent=None):
self.x = x
self.y = y
self.g = g # Cost from start to current node
self.h = h # Heuristic cost from current node to goal
self.f = g + h # Total cost
self.parent = parent # To trace back the path
while open_list:
current_node = heapq.heappop(open_list)
closed_list.add((current_node.x, current_node.y))
for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: # Movement: up, down, left, right
x, y = current_node.x + dx, current_node.y + dy
if 0 <= x < len(grid) and 0 <= y < len(grid[0]) and grid[x][y] == 0: # Check boundaries
and obstacles
successor = Node(x, y, g=current_node.g + 1,
h=manhattan_distance(Node(x, y), goal_node),
parent=current_node)
FATIMA JINNAH WOMEN UNIVERSITY
Department of Computer Science
LAB MANUAL: Artificial Intelligence
# Example Usage
if __name__ == "__main__":
grid = [
[0, 0, 0, 0, 1],
[0, 1, 1, 0, 0],
[0, 0, 0, 1, 0],
[1, 0, 1, 0, 0],
[0, 0, 0, 0, 0]
]
start = (0, 0) # Starting position
goal = (4, 4) # Goal position