AI Manual (E-Next - In)
AI Manual (E-Next - In)
AI Manual (E-Next - In)
UNIVERSITY OF MUMBAI
1|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
PRACTICAL NO-1
A. Write a program to implement depth first search algorithm.
B. Write a program to implement breadth first search algorithm
AIM:-
Write a program to implement depth first search algorithm.
GRAPH:-
PYTHON CODE:-
graph1 = {
'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])
}
def dfs(graph, node, visited):
if node not in visited:
visited.append(node)
for n in graph[node]:
dfs(graph,n, visited)
2|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
return visited
visited = dfs(graph1,'A', [])
print(visited)
OUTPUT:-
3|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
AIM:-
Write a program to implement breadth first search algorithm.
GRAPH:-
PYTHON CODE:-
# sample graph implemented as a dictionary
graph = {'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])
}
#Implement Logic of BFS
def bfs(start):
queue = [start]
levels={} #This Dict Keeps track of levels
levels[start]=0 #Depth of start node is 0
visited = set(start)
while queue:
node = queue.pop(0)
neighbours=graph[node]
for neighbor in neighbours:
4|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
5|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
OUTPUT:-
6|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
7|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
Practical no-2
A. Write a program to simulate 4-Queen / N-Queen problem.
B. Write a program to solve tower of Hanoi problem.
Aim:-
Write a program to simulate 4-Queen / N-Queen problem
DIAGRAM:
8|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
PYTHON CODE:-
class QueenChessBoard:
def __init__(self, size):
# board has dimensions size x size
self.size = size
# columns[r] is a number c if a queen is placed at row r and column c.
# columns[r] is out of range if no queen is place in row r.
# Thus after all queens are placed, they will be at positions
# (columns[0], 0), (columns[1], 1), ... (columns[size - 1], size - 1)
self.columns = []
def place_in_next_row(self, column):
self.columns.append(column)
def remove_in_current_row(self):
return self.columns.pop()
def is_this_column_safe_in_next_row(self, column):
# index of next row
row = len(self.columns)
# check column
for queen_column in self.columns:
if column == queen_column:
return False
# check diagonal
for queen_row, queen_column in enumerate(self.columns):
if queen_column - queen_row == column - row:
return False
# check other diagonal
for queen_row, queen_column in enumerate(self.columns):
if ((self.size - queen_column) - queen_row
== (self.size - column) - row):
return False
return True
def display(self):
for row in range(self.size):
for column in range(self.size):
if column == self.columns[row]:
print('Q', end=' ')
else:
print('.', end=' ')
print()
def solve_queen(size):
9|Page
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
row = 0
column = 0
# iterate over rows of board
while True:
# place queen in next row
while column < size:
if board.is_this_column_safe_in_next_row(column):
board.place_in_next_row(column)
row += 1
column = 0
break
else:
column += 1
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
OUTPUT:-
11 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
12 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
NOTE:
1. The user is prompted to enter n where n is the number of queens to place and the
size of the board.
2. Solve queens is called on n to display all possible board configurations and the
number of solutions.
13 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
AIM:-
Write a program to solve tower of Hanoi problem.
DIAGRAM:
PYTHON CODE:
def moveTower(height,fromPole, toPole, withPole):
if height >= 1:
moveTower(height-1,fromPole,withPole,toPole)
moveDisk(fromPole,toPole)
moveTower(height-1,withPole,toPole,fromPole)
def moveDisk(fp,tp):
print("moving disk from",fp,"to",tp)
moveTower(3,"A","B","C")
OUTPUT:-
14 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
PRACTICAL NO.-3
A. Write a program to implement alpha beta search.
B. Write a program for Hill climbing problem.
AIM:-
Write a program to implement alpha beta search.
PYTHON CODE
tree = [[[5, 1, 2], [8, -8, -9]], [[9, 4, 5], [-3, 4, 3]]]
root = 0
pruned = 0
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
global pruned
global root
if __name__ == "__main__":
print ("(alpha, beta): ", alpha, beta)
print ("Result: ", tree)
print ("Times pruned: ", pruned)
if __name__ == "__main__":
alphabeta(None)
OUTPUT
16 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
17 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
AIM:-
Write a program for Hill climbing problem.
DIAGRAM:-
PYTHON CODE:
import math
increment = 0.1
startingPoint = [1, 1]
point1 = [1,5]
point2 = [6,4]
point3 = [5,2]
point4 = [2,1]
def sumOfDistances(x1, y1, px1, py1, px2, py2, px3, py3, px4, py4):
d1 = distance(x1, y1, px1, py1)
d2 = distance(x1, y1, px2, py2)
d3 = distance(x1, y1, px3, py3)
d4 = distance(x1, y1, px4, py4)
return d1 + d2 + d3 + d4
18 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
i=1
while flag:
d1 = newDistance(startingPoint[0]+increment, startingPoint[1], point1, point2,
point3, point4)
d2 = newDistance(startingPoint[0]-increment, startingPoint[1], point1, point2,
point3, point4)
d3 = newDistance(startingPoint[0], startingPoint[1]+increment, point1, point2,
point3, point4)
d4 = newDistance(startingPoint[0], startingPoint[1]-increment, point1, point2,
point3, point4)
print (i,' ', round(startingPoint[0], 2), round(startingPoint[1], 2))
minimum = min(d1[2], d2[2], d3[2], d4[2])
if minimum < minDistance:
startingPoint = newPoints(minimum, d1, d2, d3, d4)
minDistance = minimum
#print i,' ', round(startingPoint[0], 2), round(startingPoint[1], 2)
i+=1
19 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
else:
flag = False
OUTPUT
20 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
21 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
22 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
Practical no-4
A. Write a program to implement A* algorithm.
B. Write a program to implement AO* algorithm.
Aim:-
Write a program to implement A* algorithm.
Note:
Install 2 package in python scripts directory using pip command.
1. pip install simpleai
2. pip install pydot flask
PYTHON CODE:-
from simpleai.search import SearchProblem, astar
23 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
problem = HelloProblem(initial_state='')
result = astar(problem)
print(result.state)
print(result.path())
OUTPUT:-
24 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
Practical no-5
A. Write a program to solve water jug problem.
B. Design the simulation of tic – tac – toe game using min-max algorithm.
Aim:-
Write a program to solve water jug problem.
Diagram:-
Python Code:-
# 3 water jugs capacity -> (x,y,z) where x>y>z
# initial state (12,0,0)
# final state (6,6,0)
capacity = (12,8,5)
# Maximum capacities of 3 jugs -> x,y,z
x = capacity[0]
y = capacity[1]
z = capacity[2]
25 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
def get_all_states(state):
# Let the 3 jugs be called a,b,c
a = state[0]
b = state[1]
c = state[2]
memory[(a,b,c)] = 1
#empty jug a
if(a>0):
#empty a into b
if(a+b<=y):
if( get_all_states((0,a+b,c)) ):
ans.append(state)
return True
else:
if( get_all_states((a-(y-b), y, c)) ):
ans.append(state)
return True
#empty a into c
if(a+c<=z):
if( get_all_states((0,b,a+c)) ):
ans.append(state)
return True
else:
if( get_all_states((a-(z-c), b, z)) ):
ans.append(state)
return True
#empty jug b
if(b>0):
#empty b into a
26 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
if(a+b<=x):
if( get_all_states((a+b, 0, c)) ):
ans.append(state)
return True
else:
if( get_all_states((x, b-(x-a), c)) ):
ans.append(state)
return True
#empty b into c
if(b+c<=z):
if( get_all_states((a, 0, b+c)) ):
ans.append(state)
return True
else:
if( get_all_states((a, b-(z-c), z)) ):
ans.append(state)
return True
#empty jug c
if(c>0):
#empty c into a
if(a+c<=x):
if( get_all_states((a+c, b, 0)) ):
ans.append(state)
return True
else:
if( get_all_states((x, b, c-(x-a))) ):
ans.append(state)
return True
#empty c into b
if(b+c<=y):
if( get_all_states((a, b+c, 0)) ):
ans.append(state)
return True
else:
if( get_all_states((a, y, c-(y-b))) ):
ans.append(state)
return True
return False
27 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
initial_state = (12,0,0)
print("Starting work...\n")
get_all_states(initial_state)
ans.reverse()
for i in ans:
print(i)
Output:-
28 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
29 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
30 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
Aim:-
Design the simulation of TIC – TAC –TOE game using min-max algorithm
Diagram:-
Python Code:
import os
import time
board = [' ',' ',' ',' ',' ',' ',' ',' ',' ',' ']
player = 1
########win Flags##########
Win = 1
Draw = -1
Running = 0
Stop = 1
###########################
Game = Running
Mark = 'X'
31 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
def DrawBoard():
print(" %c | %c | %c " % (board[1],board[2],board[3]))
print("___|___|___")
print(" %c | %c | %c " % (board[4],board[5],board[6]))
print("___|___|___")
print(" %c | %c | %c " % (board[7],board[8],board[9]))
print(" | | ")
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
Game=Draw
else:
Game=Running
print("Tic-Tac-Toe Game")
print("Player 1 [X] --- Player 2 [O]\n")
print()
print()
print("Please Wait...")
time.sleep(1)
while(Game == Running):
os.system('cls')
DrawBoard()
if(player % 2 != 0):
print("Player 1's chance")
Mark = 'X'
else:
print("Player 2's chance")
Mark = 'O'
choice = int(input("Enter the position between [1-9] where you want to mark :
"))
if(CheckPosition(choice)):
board[choice] = Mark
player+=1
CheckWin()
os.system('cls')
DrawBoard()
if(Game==Draw):
print("Game Draw")
elif(Game==Win):
player-=1
if(player%2!=0):
print("Player 1 Won")
else:
print("Player 2 Won")
NOTE:-
Game Rules
33 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
1. Traditionally the first player plays with "X". So you can decide who wants
to go with "X" and who wants go with "O".
2. Only one player can play at a time.
3. If any of the players have filled a square then the other player and the same
player cannot override that square.
4. There are only two conditions that may match will be draw or may win.
5. The player that succeeds in placing three respective marks (X or O) in a
horizontal, vertical or diagonal row wins the game.
OUTPUT:-
34 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
35 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
36 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
37 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
PRACTICAL No.-6
A. Write a program to solve Missionaries and Cannibals problem.
B. Design an application to simulate number puzzle problem.
Aim:-
Write a program to solve Missionaries and Cannibals problem.
Diagram:-
Python Code:-
import math
# Missionaries and Cannibals Problem
class State():
def __init__(self, cannibalLeft, missionaryLeft, boat, cannibalRight,
missionaryRight):
self.cannibalLeft = cannibalLeft
self.missionaryLeft = missionaryLeft
self.boat = boat
self.cannibalRight = cannibalRight
self.missionaryRight = missionaryRight
self.parent = None
def is_goal(self):
if self.cannibalLeft == 0 and self.missionaryLeft == 0:
return True
else:
return False
def is_valid(self):
if self.missionaryLeft >= 0 and self.missionaryRight >= 0 \
and self.cannibalLeft >= 0 and self.cannibalRight >= 0 \
and (self.missionaryLeft == 0 or self.missionaryLeft >=
self.cannibalLeft) \
and (self.missionaryRight == 0 or self.missionaryRight >=
self.cannibalRight):
38 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
return True
else:
return False
def __hash__(self):
return hash((self.cannibalLeft, self.missionaryLeft, self.boat,
self.cannibalRight, self.missionaryRight))
def successors(cur_state):
children = [];
if cur_state.boat == 'left':
new_state = State(cur_state.cannibalLeft, cur_state.missionaryLeft -
2, 'right',
cur_state.cannibalRight, cur_state.missionaryRight + 2)
## Two missionaries cross left to right.
if new_state.is_valid():
new_state.parent = cur_state
children.append(new_state)
new_state = State(cur_state.cannibalLeft - 2,
cur_state.missionaryLeft, 'right',
cur_state.cannibalRight + 2, cur_state.missionaryRight)
## Two cannibals cross left to right.
if new_state.is_valid():
new_state.parent = cur_state
children.append(new_state)
new_state = State(cur_state.cannibalLeft - 1, cur_state.missionaryLeft
- 1, 'right',
cur_state.cannibalRight + 1, cur_state.missionaryRight + 1)
## One missionary and one cannibal cross left to right.
if new_state.is_valid():
new_state.parent = cur_state
children.append(new_state)
39 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
if new_state.is_valid():
new_state.parent = cur_state
children.append(new_state)
new_state = State(cur_state.cannibalLeft + 1,
cur_state.missionaryLeft, 'left',
cur_state.cannibalRight - 1, cur_state.missionaryRight)
## One cannibal crosses right to left.
if new_state.is_valid():
new_state.parent = cur_state
children.append(new_state)
return children
def breadth_first_search():
initial_state = State(3,3,'left',0,0)
if initial_state.is_goal():
return initial_state
frontier = list()
explored = set()
frontier.append(initial_state)
while frontier:
state = frontier.pop(0)
if state.is_goal():
return state
explored.add(state)
children = successors(state)
for child in children:
if (child not in explored) or (child not in frontier):
frontier.append(child)
return None
def print_solution(solution):
path = []
path.append(solution)
parent = solution.parent
while parent:
path.append(parent)
parent = parent.parent
for t in range(len(path)):
state = path[len(path) - t - 1]
41 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
def main():
solution = breadth_first_search()
print ("Missionaries and Cannibals solution:")
print ("(cannibalLeft,missionaryLeft,boat,cannibalRight,missionaryRight)")
print_solution(solution)
42 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
43 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
44 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
AIM:-
Design an application to simulate number puzzle problem.
PYHTON CODE:-
'''
8 puzzle problem, a smaller version of the fifteen puzzle:
States are defined as string representations of the pieces on the puzzle.
Actions denote what piece will be moved to the empty space.
States must allways be inmutable. We will use strings, but internally most of
the time we will convert those strings to lists, which are easier to handle.
For example, the state (string):
'1-2-3
4-5-6
7-8-e'
will become (in lists):
[['1', '2', '3'],
['4', '5', '6'],
['7', '8', 'e']]
'''
GOAL = '''1-2-3
4-5-6
7-8-e'''
INITIAL = '''4-1-2
7-e-3
8-5-6'''
def list_to_string(list_):
return '\n'.join(['-'.join(row) for row in list_])
def string_to_list(string_):
return [row.split('-') for row in string_.split('\n')]
45 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
# we create a cache for the goal position of each piece, so we don't have to
# recalculate them every time
goal_positions = {}
rows_goal = string_to_list(GOAL)
for number in '12345678e':
goal_positions[number] = find_location(rows_goal, number)
class EigthPuzzleProblem(SearchProblem):
def actions(self, state):
'''Returns a list of the pieces we can move to the empty space.'''
rows = string_to_list(state)
row_e, col_e = find_location(rows, 'e')
actions = []
if row_e > 0:
actions.append(rows[row_e - 1][col_e])
if row_e < 2:
actions.append(rows[row_e + 1][col_e])
if col_e > 0:
actions.append(rows[row_e][col_e - 1])
if col_e < 2:
actions.append(rows[row_e][col_e + 1])
return actions
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
rows = string_to_list(state)
row_e, col_e = find_location(rows, 'e')
row_n, col_n = find_location(rows, action)
return list_to_string(rows)
OUTPUT:
47 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
48 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
49 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
50 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
PRACTICAL No.-7
A. Write a program to shuffle Deck of cards.
B. Solve traveling salesman problem using artificial intelligence technique.
Aim:-
Write a program to shuffle Deck of cards.
Diagram:-
Python Code:-
#first let's import random procedures since we will be shuffling
import random
#next, let's start building list holders so we can place our cards in there:
cardfaces = []
suits = ["Hearts", "Diamonds", "Clubs", "Spades"]
royals = ["J", "Q", "K", "A"]
deck = []
for j in range(4):
51 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
for k in range(4):
for l in range(13):
card = (cardfaces[l] + " of " + suits[k])
#this makes each card, cycling through suits, but first through faces
deck.append(card)
#this adds the information to the "full deck" we want to make
#now let's shuffle our deck!
random.shuffle(deck)
OR
# Python program to shuffle a deck of card using the module random and
draw 5 cards
# import modules
import itertools, random
# make a deck of cards
deck = list(itertools.product(range(1,14),['Spade','Heart','Diamond','Club']))
# shuffle the cards
random.shuffle(deck)
# draw five cards
print("You got:")
for i in range(5):
print(deck[i][0], "of", deck[i][1])
Output:-
52 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
53 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
OR
54 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
PRACTICAL No.-8
A. Solve the block of World problem.
B. Solve constraint satisfaction problem
Aim:-
Implementation Of Constraints Satisfactions Problem
PYTHON CODE:
from __future__ import print_function
constraints = [
(('WA', 'NT'), const_different),
(('WA', 'SA'), const_different),
(('SA', 'NT'), const_different),
(('SA', 'Q'), const_different),
(('NT', 'Q'), const_different),
(('SA', 'NSW'), const_different),
(('Q', 'NSW'), const_different),
(('SA', 'V'), const_different),
(('NSW', 'V'), const_different),
]
print(backtrack(my_problem))
print(backtrack(my_problem,
variable_heuristic=MOST_CONSTRAINED_VARIABLE))
print(backtrack(my_problem,
variable_heuristic=HIGHEST_DEGREE_VARIABLE))
55 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
print(backtrack(my_problem,
value_heuristic=LEAST_CONSTRAINING_VALUE))
print(backtrack(my_problem,
variable_heuristic=MOST_CONSTRAINED_VARIABLE,
value_heuristic=LEAST_CONSTRAINING_VALUE))
print(backtrack(my_problem,
variable_heuristic=HIGHEST_DEGREE_VARIABLE,
value_heuristic=LEAST_CONSTRAINING_VALUE))
print(min_conflicts(my_problem))
OUTPUT:-
Note:
Following practical will be update soon:
• Practical No-4-B
• Practical No.-8-A
• Practical No-9
• Practical No.10.
56 | P a g e
https://E-next.in
T.Y.B.Sc.IT ARITIFICIAL INTELLIGENCE 2018-19
57 | P a g e
https://E-next.in