0% found this document useful (0 votes)
58 views

Experiment-5: AIM: WAP To 8 Puzzle Problem Using A Algorithm. Theory

The document describes an experiment that uses the A* algorithm to solve the 8-puzzle problem. It defines the 8-puzzle problem and describes how the A* algorithm will be implemented using a Node class to represent puzzle states and generate successor states by moving the empty tile. The Puzzle class initializes the open and closed lists, accepts the start and goal states from the user, and contains functions for heuristic evaluation and solving the puzzle by repeatedly expanding the lowest f(n) node.

Uploaded by

akshat sharma
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
58 views

Experiment-5: AIM: WAP To 8 Puzzle Problem Using A Algorithm. Theory

The document describes an experiment that uses the A* algorithm to solve the 8-puzzle problem. It defines the 8-puzzle problem and describes how the A* algorithm will be implemented using a Node class to represent puzzle states and generate successor states by moving the empty tile. The Puzzle class initializes the open and closed lists, accepts the start and goal states from the user, and contains functions for heuristic evaluation and solving the puzzle by repeatedly expanding the lowest f(n) node.

Uploaded by

akshat sharma
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

EXPERIMENT- 5

AIM: WAP to 8 puzzle problem using A* Algorithm.


Theory:
N-Puzzle or sliding puzzle is a popular puzzle that consists of N tiles where N can be 8, 15, 24
and so on. In our example N = 8. The puzzle is divided into sqrt(N+1) rows and sqrt(N+1)
columns. E.g. 15-Puzzle will have 4 rows and 4 columns and an 8-Puzzle will have 3 rows and 3
columns. The puzzle consists of N tiles and one empty space where the tiles can be moved. Start
and Goal configurations (also called state) of the puzzle are provided. The puzzle can be solved
by moving the tiles one by one in the single empty space and thus achieving the Goal
configuration.

Code:
class Node:
def __init__(self,data,level,fval):
self.data = data
self.level = level
self.fval = fval
def generate_child(self):
x,y = self.find(self.data,'_')
val_list = [[x,y-1],[x,y+1],[x-1,y],[x+1,y]]
children = []
for i in val_list:
child = self.shuffle(self.data,x,y,i[0],i[1])
if child is not None:
child_node = Node(child,self.level+1,0)
children.append(child_node)
return children
def shuffle(self,puz,x1,y1,x2,y2):
if x2 >= 0 and x2 < len(self.data) and y2 >= 0 and y2 < len(self.data):
temp_puz = []
temp_puz = self.copy(puz)
temp = temp_puz[x2][y2]
temp_puz[x2][y2] = temp_puz[x1][y1]
temp_puz[x1][y1] = temp
return temp_puz
else:
return None
def copy(self,root):
temp = []
for i in root:
t = []
for j in i:
t.append(j)
temp.append(t)
return temp
def find(self,puz,x):
for i in range(0,len(self.data)):
for j in range(0,len(self.data)):
if puz[i][j] == x:
return i,j
class Puzzle:
def __init__(self,size):
self.n = size
self.open = []
self.closed = []
def accept(self):
puz = []
for i in range(0,self.n):
temp = input().split(" ")
puz.append(temp)
return puz
def f(self,start,goal):
return self.h(start.data,goal)+start.level
def h(self,start,goal):
temp = 0
for i in range(0,self.n):
for j in range(0,self.n):
if start[i][j] != goal[i][j] and start[i][j] != '_':
temp += 1
return temp
def process(self):
print("Enter the start state matrix \n")
start = self.accept()
print("Enter the goal state matrix \n")
goal = self.accept()
start = Node(start,0,0)
start.fval = self.f(start,goal)
self.open.append(start)
print("\n\n")
while True:
cur = self.open[0]
print("")
print(" | ")
print(" | ")
print(" \\\'/ \n")
for i in cur.data:
for j in i:
print(j,end=" ")
print("")
if(self.h(cur.data,goal) == 0):
break
for i in cur.generate_child():
i.fval = self.f(i,goal)
self.open.append(i)
self.closed.append(cur)
del self.open[0]
self.open.sort(key = lambda x:x.fval,reverse=False)
puz = Puzzle(3)
puz.process()

OUTPUT:
Result:
The program is successfully written and compiled in python.

You might also like