Вы находитесь на странице: 1из 28

# AL-FALAH SCHOOL OF ENGINEERING & TECHNOLOGY

## (A Muslim Minority Autonomous Institution)

NAAC A Grade Accredited by UGC

Department of Computer Science & Engineering

Lab Manual
Artificial Intelligence

Department of Computer Science and Engineering
Al-Falah School of Engineering and Technology

INDEX

1. Syllabus
2. Hardware/Software Requirements
3. Practicals to be conducted in the lab
4. Programs

CSE-308 F Intelligent System
L - T - P
2
Work Lab.
Exam : 25 Marks
Class 25 Marks
Total 50 Marks
Duration Exam
3 Hrs.

1. Study of PROLOG.

2. Write a program to solve 8 queens problem.

3. Solve any problem using depth first search.

4. Solve any problem using best first search.

5. Solve 8-puzzle problem using best first search

6. Solve Robot (traversal) problem using means End Analysis.

7. Solve traveling salesman problem.

HARDWARE REQUIRED

P-IV/III PROCESSOR
HDD 40GB
RAM 128MB or above

SOFTWARE REQUIRED

Window 98/2000/ME/XP
Prolog

Practicals to be conducted in the lab

S. No. Title of experiment

1 Program to find the route distance between two cities
2 Program to implement tower of Hanoi
3 Program to calculate the factorial of a number.
4 Program to implement family relationships
5 Program To Logon Example With Recursion And No Repeat
Predicate
6 Program to print the list of customers having different coloured cars
with price and model available
7 Program to implement water jug problem
8 Program to implement breadth first search
9 Recursion In PROLOG
10 Queries

PROGRAM NO. 1

AIM: TO FIND THE ROUTE DISTANCE BETWEEN TWO CITIES
DOMAINS
Town = symbol
Distance = integer

PREDICATES
nondeterm route(Town,Town,Distance)

CLAUSES

route(Town1,Town2,Distance):-

route(Town1,Town2,Distance):-
route(X,Town2,Dist2),
Distance=Dist1+Dist2,
!.

GOAL
route("Karimnagar", "Vishakapatnam", X),
write("Distance from Karimnagar to Vishakapatnam is ",X),nl.

Output:
Distance from Karimnagar to Vishakapatnam is 270
X=270
1 Solution

PROGRAM NO. 2

AIM: TO IMPLEMENT TOWER OF HANOI
Domains
A,B,C,N,Z=INTEGER

Predicates
Tower(integer,integer,integer,integer).

Clauses
Tower(1,A,C,B):-
write("move from",A,"to",C),nl.
Tower(N,A,C,B):-
Z=N-1,
Tower(Z,A,B,C),
write("move from",A,"to",C),nl,
Tower(Z,B,C,A).

goal:Tower(3,1,3,2).

Output:

move from1to3
move from1to2
move from3to2
move from1to3
move from2to1
move from2to3
move from1to3
yes

PROGRAM NO. 3

AIM: TO CALCULATE THE FACTORIAL OF A NUMBER
domains
A,B,Y,Z=Integer

predicates
fact(integer,integer)
go

clauses
go:-
write("enter the no."),nl,
B=1,
fact(A,B).
fact(A,B):-
A<>1,
Y=A-1,
Z=A*B,
fact(Y,Z).
fact(1,B):-
write("factorial is",B).

goal:go.

Output:

enter the no.
6
factorial is720yes

PROGRAM NO. 4

AIM: TO IMPLEMENT FAMILY RELATIONSHIPS

DATABASE - tmp
son(STRING,STRING)
sister(STRING,STRING)
brother(STRING,STRING)
married(STRING,STRING)

CLAUSES
son("Deepak","Jack").
sister("Jiya","swati").
brother("Sonia", "Harsh").
married("Jack", "Jiya").
married("Lokesh", "Sonia").
married("Priya","Deepak").

PREDICATES
father(STRING father,STRING child)
grandfather(STRING grandfather,STRING grandchild)
sister_in_law(STRING,STRING)
brother_in_law(STRING,STRING)
father_in_law(STRING,STRING)

CLAUSES
father(A,B):-son(B,A).

grandfather(A,B):-father(A,C), father(C,B).

sister_in_law(A,B):-married(A,C), sister(C,B).
sister_in_law(A,B):-brother(A,C), married(C,B).

brother_in_law(A,B):-married(A,C), brother(C,B).
brother_in_law(A,B):-brother(A,C), married(C,B).

father_in_law(A,B):-married(A,C), son(C,B).

GOAL
father_in_law("Priya",Z),
format(Msg,"father_in_law(\"Priya\",%)",Z),
write(Msg).
%GOAL father_in_law("Priya",Z).

Output:

father_in_law("Priya",Jack)Z=Jack, Msg=father_in_law("Priya",Jack)
1 Solution

PROGRAM NO. 5

AIM: LOGON EXAMPLE WITH RECURSION AND NO REPEAT
PREDICATE

domains
predicates
logon
clauses
logon :-

write("You are now logged on."),nl.
logon :-
write("Sorry, you are not permitted access."),
logon.

user(bill,bigfoot).

user(john,superman).
user(sue,happy).

goal:

Output:

1 Solution

PROGRAM NO. 6

AIM: TO PRINT THE LIST OF CUSTOMERS HAVING DIFFERENT
COLORED CARS WITH PRICE AND MODEL AVAILABLE.

Domains
namelist=names*
names=symbol
color=symbol
list=names*

Predicates
cust_names(namelist,color)
model(color,list)
cost(symbol)
price(color,integer)

Clauses
cust_names([jitander,preeti,veena,avinash,jyeshtha],green).
cust_names([arvind,poonam,abhijeet],white).
model(red,[hyundai_accent,ford_monedo,indgo]).
model(white,[maruti_esteem,maruti_baleno]).
model(green,[toyota_avalon,lotus_elise]).
model(green,[toyta_avalon,lotus_elise]).
price(red,450000).
price(white,350000).
price(green,430000).
cost(green):-
cust_names(A,green),nl,
write(A),nl,
price(green,X),nl,
write("the price of green color car is ",X),nl,
model(green,Y),nl,
write("the model available in green color ",Y),nl.
cost(white):-
cust_names(A,white),nl,
write(A),nl,
price (white,X),nl,
write("the price of white color car is ",X),nl,
model(blue,Y),nl,
write(" the models available in white color ",Y),nl.

goal:
write(" name list of customers who own green color car :-"),nl,
cost(green).
/*write("name list of customers who own red color car :-"),nl,
cost(red).
write("name list of customer who own white color car :-"),nl,
cost(white). */

Output:
name list of customers who own green color car :-

["jitender","preeti","veena","avinash","jyeshtha"]

the price of green color car is 430000

the model available in green color ["toyota_avalon","lotus_elise"]
yes

PROGRAM NO. 7

AIM: TO IMPLEMENT WATER JUG PROBLEM

Domains
Z,A,X,Y=integer

Predicates
waterjug(X,Y)

Clauses
waterjug(X,Y):-
X=0,
Y=0,
write("4l jug empty & 3l jug empty"),nl,
Z=0,
A=3,
waterjug(Z,A).
waterjug(X,Y):-
X=0,
Y=3,
write("4l jug empty & 3ljug 3l water"),nl,
Z=3,
A=0,
waterjug(Z,A).
waterjug(X,Y):-
X=3,
Y=0,
write(" 4l jug 3l water & 3l jug empty"),nl,
Z=3,
A=3,
waterjug(Z,A).
waterjug(X,Y):-
Z=3,
A=3,
write("4l jug 3l water& 3l jug 3l water"),nl,
Z=4,
A=2,
waterjug(Z,A).
waterjug(X,Y):-
X=4,
Y=2,
write("4l jugh 4l water & 3l jug 2l water"),nl,

Z=0,
A=2,
waterjug(Z,A).
waterjug(X,A):-
X=0,
Y=2,
write("4l jug empty & 3l jug 2l water"),nl,
Z=2,
A=0,
waterjug(Z,A).
waterjug(X,Y):-
X=2,
Y=0,
write("Goal Achieved").

goal:waterjug(0,0).

Output:

4l jug empty & 3l jug empty
4l jug empty & 3ljug 3l water
4l jug 3l water & 3l jug empty
4l jug 3l water& 3l jug 3l water
4l jug 3l water& 3l jug 3l water
4l jug 3l water& 3l jug 3l water
4l jug empty & 3l jug 2l water
4l jug 3l water& 3l jug 3l water
4l jug empty & 3l jug 2l water
4l jug 3l water& 3l jug 3l water
Goal Achievedyes

PROGRAM NO. 8

AIM: TO IMPLEMENT BREADTH FIRST SEARCH

Domains
W=Integer*
Value=Integer

Predicates
pop(W,W,Value)
append(W,W,W)
go
checkbfs(W)
test(Value,W,W)

Clauses
S1=Tail.
append([],LIST1,LIST1).
append([X|LIST1],LIST2,[X|LIST3]):-
append(LIST1,LIST2,LIST3).
checkbfs([]):-
write("STACK NULL").
checkbfs(STACK):-
write("checkbfs"),nl,
pop(STACK,STACK2,X),
test(X,STACK2,S3),
write(S3),nl,
checkbfs(S3).
test(A,STACK2,S3):-
A=5,nl,
write(A,"goal found"),
S3=[].
test(A,STACK2,S3):-
write(A),nl,
S3=STACK2.
go:-
A=[10],B=[7],C=[6],D=[5],E=[12],F=[11],G=[15],
H=[16],I=[17],J=[20],
append(I,J,R1),
append(G,H,R2),

append(E,F,R3),
append(R2,R1,R4),
append(R3,R4,R5),
append(C,D,R6),
append(B,R6,R7),
append(R7,R5,R8),
append(A,R8,R9),
ROOT=R9,
write("Starting Program\n"),nl,
checkbfs(ROOT).

Goal:go.

Output:

Starting Program

checkbfs
10
[7,6,5,12,11,15,16,17,20]
checkbfs
7
[6,5,12,11,15,16,17,20]
checkbfs
6
[5,12,11,15,16,17,20]
checkbfs

5goal found[]
STACK NULLyes

PROGRAM NO. 9

Recursion In PROLOG
Consider the following database (Pl file).
parent(gaurav,suarav).
parent(saurav,sita).
parent(sita,gita).
parent(gita,rattan).
parent(suarav,ram).
parent(ram,sunny).
ancestor(A,B):-parent(A,B).
ancestor(A,B):-parent(C,B),ancestor(A,C).

OUTPUT:
1 ?- [ancestor].
to consult or compile th PROLOG source file.
2 ?- ancestor(gaurav,saurav).
3 ?- ancestor(gaurav,rattan).
4 ?- ancestor(rattan,saurav).
5 ?- ancestor(WHO,WHOM).
6 ?- ancestor(WHO,WHOM).

PROGRAM NO. 10

1 ?- [LIST].
To consult or compile the PROLOG source file.
2 ?- [H1|T] = [1,2,3].
3 ?- [H1,H2|T] = [1,2,3].
4 ?- [H1,H2,H3|T] = [1,2,3].
5 ?- [H1,H2,H3,H4|T] = [1,2,3].

OUTPUT:

H1 =1
T=2,3

H1=1
H2=2

T=[3]

H1=1
H2=2
H3=3
T=[]

false