Lab Manual-Artificial
Lab Manual-Artificial
Lab Manual-Artificial
Lab Manual
Of
ARTIFICIAL INTELLIGENCE LAB
(KCS – 751)
COURSE OUTCOMES
Course Statement
Outcomes (On completion of this course, students will be able to)
1) Study of PROLOG
5) WAP in turbo PROLOG for medical diagnosis and show the advantage and disadvantage of green and
red cuts.
7) Write a program to solve 4-Queen problem using PROLOG and Python both.
9) Write a program to solve water jug problem using LISP and Python both.
Study of PROLOG
PROLOG-PROGRAMMING IN LOGIC
PROLOG stands for Programming, In Logic — an idea that emerged in the early 1970’s to use logic as
programming language. The early developers of this idea included Robert Kowaiski at Edinburgh (on the
theoretical side), Marrten van Emden at Edinburgh (experimental demonstration) and Alian Colmerauer at
Marseilles (implementation). David D.H. Warren’s efficient implementation at Edinburgh in the mid -1970’s
greatly contributed to the popularity of PROLOG. PROLOG is a programming language centred around a small
set of basic mechanisms, Including pattern matching, tree based data structuring and automatic backtracking.
This Small set constitutes a surprisingly powerful and flexible programming framework. PROLOG is especially
well suited for problems that involve objects- in particular, structured objects- and relations between them.
SYMBOLIC LANGUAGE
PROLOG is a programming language for symbolic, non-numeric computation. It is especially well suited for
solving problems that involve objects and relations between objects. For example, it is an easy exercise in prolog
to express spatial relationship between objects, such as the blue sphere is behind the green one. It is also easy
to state a more general rule: if object X is closer to the observer than object Y. and object Y is closer than Z,
then X must be closer than Z. PROLOG can reason about the spatial relationships and their consistency with
respect to the general rule. Features like this make PROLOG a powerful language for ArtJIcia1 LanguageA1,)
and non- numerical programming. There are well-known examples of symbolic computation whose
implementation in other standard languages took tens of pages of indigestible code, when the same algorithms
were implemented in PROLOG, the result was a crystal-clear program easily fitting on one page.
Programming in PROIOG is accomplished by creating a database of facts and rules about objects, their
properties, and their relationships to other objects. Queries then can be posed about the objects and valid
conclusions will be determined and returned by the program Responses to user queries are determined through
a form of inference control known as resolution.
FOR EXAMPLE:
Sister ( sue,bill)
Parent ( ann.sam)
Male (jo)
Female ( riya)
b) RULES: To represent the general rule for grandfather, we write:
c) QUERIES: Given a database of facts and rules such as that above, we may make queries by typing
after a query a symbol’?’ statements such as: ?-parent (X,sam) Xann ?
Grandfather (X,Y)
X=jo, Y=sam
Output:-
XPERIMENT NO. 2
Program:
Clauses
likes(ram,mango).
girl(seema).
red(rose).
likes(bill ,cindy).
owns(john ,gold).
Output:
Goal queries ?-
likes(ram,What).
What= mango
?-likes(Who,cindy).
Who= cindy
?-red(What). What=
rose
?-owns(Who,What).
Who= john What=
gold.
EXPERIMENT NO. 3
Write predicates One converts centigrade temperatures to Fahrenheit, the other checks if
a temperature is below freezing.
Program:
Production rules:
Arithmetic:
c_to_f f is c * 9 / 5 +32
freezing f < = 32
Rules:
c_to_f(C,F):-
F is C * 9 / 5 + 32.
freezing(F) :- F
=< 32.
Output:
Queries:
?- c_to_f(100,X).
X = 212
Yes
?- freezing(15)
.Yes
?- freezing(45). No
EXPERIMENT NO. 4
Imagine a room containing a monkey, chair and some bananas. That have been hanged from
the centre of ceiling. If the monkey is clever enough he can reach the bananas by placing the
chair directly below the bananas and climb on the chair .The problem is to prove the monkey
can reach the bananas. The monkey wants it, but cannot jump high enough from the floor. At
the window of the room there is a box that the monkey can use. The monkey can perform the
following actions:-
1) Walk on the floor.
2) Climb the box.
3) Push the box around (if it is beside the box).
4) Grasp the banana if it is standing on the box directly under the banana.
Production Rules
can_reach clever,close. get_on: can_climb.
under in room,in_room, in_room,can_climb.
Close get_on,under| tall
Parse Tree
Clauses:
in_room(bananas). in_room(chair).
in_room(monkey).
clever(monkey).
can_climb(monkey, chair).
tall(chair). can_move(monkey,
chair, bananas).
can_reach(X, Y):- clever(X),close(X, Y). get_on(X,Y):-
can_climb(X,Y). under(Y,Z):-
in_room(X),in_room(Y),in_room(Z),can_climb(X,Y,Z).
close(X,Z):-get_on(X,Y), under(Y,Z); tall(Y).
Output: Queries:
?- can_reach(A, B).
A = monkey. B
= banana.
?- can_reach(monkey, banana).Yes.
EXPERIMENT NO. 5
WAP in turbo Prolog program for medical diagnosis and show the advantage and
disadvantage of green and red cuts.
Program:
Domains: disease,indication=symbol
name-string
Predicates: hypothesis(name,disease)
symptom(name,indication)
response(char) go
goonce
clauses go:-
goonce
write("will you like to try again (y/n)?"),
response(Reply),
Reply='n'. go.
goonce:-
write("what is the patient's name"),nl,
readln(Patient),
hypothesis(Patient,Disease),!,
write(Patient,"probably has",Disease),!,
goonce:-
write("sorry, i am not ina position to diagnose"), write("the
disease").
symptom(Patient,fever):-
write("does",Patient,"has a fever (y/n)?"),nl,
response(Reply), Reply='y',nl.
symptom(Patient,rash):-
Output:
makewindow(1,7,7"Expert Medical Diagnosis",2,2,23,70),
go.
EXPERIMENT NO. 6
WAP to implement factorial, Fibonacci of a given number using PROLOG.
Program:
Factorial:
factorial(0,1).
factorial(N,F) :-
N>0,
N1 is N-1,
factorial(N1,F1),
F is N * F1.
Output:
Goal:
?- factorial(4,X).
X=24
Fibonacci:
fib(0, 0).
fib(X, Y) :- X > 0, fib(X, Y, _). fib(1,
1, 0).
fib(X, Y1, Y2) :-
X > 1,
X1 is X - 1,
fib(X1, Y2, Y3),
Y1 is Y2 + Y3.
Output:
Goal:
?-fib(10,X).
X=55
EXPERIMENT NO. 7
Write a program to solve 4-Queen problem using PROLOG and Python both.
Program:
In the 4 Queens problem the object is to place 4 queens on a chessboard in such a way that no
queens can capture a piece. This means that no two queens may be placed on the same row,
column, or diagonal.
N1=N-1,makelist(N1,Rest).
nextrow(Row,[Row|Rest],Rest).
Output:
Goal:
?-nqueens(4),nl.
board([q(1,2),q(2,4),q(3,1),q(4,3),[],[],[7,4,1],[7,4,1])
yes
global N
N=4
def printSolution(board):
for i in range(N):
for j in range(N):
print (board[i][j],end=' ')
print()
def isSafe(board, row, col):
for i in range(col):
if board[row][i] == 1:
return False
for i, j in zip(range(row, -1, -1), range(col, -1, -1)):
if board[i][j] == 1:
return False
for i, j in zip(range(row, N, 1), range(col, -1, -1)):
if board[i][j] == 1:
return False
return True
if solveNQUtil(board, 0) == False:
print ("Solution does not exist")
return False
printSolution(board)
return True
solveNQ()
OutPut-
EXPERIMENT NO. 8
Program:
clauses road("tampa","houston",200).
road("gordon","tampa",300).
road("houston","gordon",100).
road("houston","kansas_city",120).
road("gordon","kansas_city",130).
route(Town1,Town2,Distance):-
road(Town1,Town2,Distance).
route(Town1,Town2,Distance):-
road(Town1,X,Dist1),
route(X,Town2,Dist2),
Distance=Dist1+Dist2,!.
Output:
Write a program to solve water jug problem using LISP and Python both.
Program:
;return the state when the first jug is filled (first jug can hold 3) (defun
fill-first-jug (state)
(cond
((< (get-first-jug state) 3) (get-state 3 (get-second-jug state))))))
;returns the state when the second jug is filled (second jug can hold 5)
(defun fill-second-jug (state)
(cond
((< (get-second-jug state) 5) (get-state (get-first-jug state) 5))))
;;;MAIN FUNCTION
(defun dfs (start-state depth lmt)
(setf *node* 0)
(setf *limit* lmt)
(dfs-node start-state depth) )
Ptython Code
from collections import deque
m = {}
isSolvable = False
path = []
q = deque()
q.append((0, 0))
u = q.popleft()
continue
continue
path.append([u[0], u[1]])
m[(u[0], u[1])] = 1
isSolvable = True
if (u[0] == target):
if (u[1] != 0):
path.append([u[0], 0])
else:
if (u[0] != 0):
path.append([0, u[1]])
sz = len(path)
for i in range(sz):
path[i][1], ")")
break
c = u[0] + ap
d = u[1] - ap
q.append([c, d])
c = u[0] - ap
d = u[1] + ap
q.append([c, d])
q.append([a, 0])
q.append([0, b])
if (not isSolvable):
print("No solution")
if __name__ == '__main__':
import collections
visited.add(root)
while queue:
vertex = queue.popleft()
visited.add(neighbour)
queue.append(neighbour)
if __name__ == '__main__':
bfs(graph, 0)
OutPut:
EXPERIMENT NO. 11
import numpy as np
import random
from time import sleep
def create_board():
return(np.array([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]))
def possibilities(board):
l = []
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 0:
l.append((i, j))
return(l)
def random_place(board, player):
selection = possibilities(board)
current_loc = random.choice(selection)
board[current_loc] = player
return(board)
def row_win(board, player):
for x in range(len(board)):
win = True
for y in range(len(board)):
if board[x, y] != player:
win = False
continue
if win == True:
return(win)
return(win)
winner = player
while winner == 0:
for player in [1, 2]:
board = random_place(board, player)
print("Board after " + str(counter) + " move")
print(board)
sleep(2)
counter += 1
winner = evaluate(board)
if winner != 0:
break
return(winner)
print("Winner is: " + str(play_game()))
Output: