Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 10

Bi1.

Bi tp qua ph: Cho 3 loi xe gm: xe ti (T), xe khch (K), xe con (C), ph ch
c 2 xe ti, 3 xe khch v 4 xe con, gi s u tin xe con qua ph, 1 xe ti c ti trng
bng 2 xe con, th t xe n nh sau: T, T, C, C, C, C, C, C, K, K, K. Khi ph y th ph
s ri bn, vit chng trnh xc nh cc hm mc tiu c th cho trng thi ph y (xc
nh th t xe ln ph).
a.Xc nh cc trng thi:
Trng thi ban u: (0,0,0)
Trng thi mc tiu: (2,3,4); (1,3,6); (0,3,8).
b.

Xc nh cc thao tc:
Xe ti ln ph
Xe con ln ph
Xe ti xung ph
Xe khch ln ph

Cy m t trng thi cho trng hp tng qut:


(0,0,0)
(1,0,0)

(0,1,0)

(1,1,0) (1,0,1) (1,1,0) (0,2,0) (0,1,1)

(2,0,0)

...

(0,0,1)
(1,0,1) (0,1,1) (0,0,2)

...

(2,1,0) (2,0,1)

...

...

Khi th t cc xe nh yu cu bi th ta c cy c th sau:

...

Tai, khach, con


(0,0,0)
(1,0,0)
(2,0,0)
Xe ti xung ph ( u tin xe con ln ph)
(1,0,0)

(2,0,1)
(2,0,2)

(1,0,1)

(0,0,0)

(2,0,3)

(1,0,2)

(0,0,1)

(2,0,4)

(1,0,2)

(0,0,2)

(2,1,4)

(1,0,3)

(0,0,3)

(2,2,4)

(1,0,4)

(0,0,4)

(2,3,4)

(1,0,5)

(0,0,5)

(1,0,6)

(0,0,6)

(1,1,6)

(0,1,6)

(1,2,6)

(0,2,6)

(1,3,6)

(0,3,6)

Trng thi mc tiu cho trng hp


ny tt tuy nhincha thy c
rng buc u tin cho xe con

Trng thi mc tiu cho trng hp


ny tt nht tha yu cu bi ton

c.Code:

Xe ti xung ph

Trng thi mc tiu cho trng hp


ny l 8 xe con nhng do s xe con
ch qua ph ch l 6 nn trng thi
mc tiu ch c th l
(0,3,6), trng thi ny cha tt

d.

Bi 2. M t c ch x l truy vn trong Prolog

a) Cho tp facts:
fact(b,1);
fact(b,2);
fact(c,3);
Truy vn: a:- fact(b,N), fact(c,N);
Theo thut ton:
u tin s Call fact(b,N), do mnh u tin c phn u trng vi phn u ca
fact(b,N) nn suy ra N=1, thay th gi tr ca N v thc hin tip tc:
Call fact(c,1), do khng tm c Rule tha nn kt qu tr v l fail v tip tc:
Redo Call fact(b,N), tm c mnh 2 tha v suy ra c N=2, tip tc:
Call fact(c,2), do khng tm c Rule tha nn kt qu tr v l fail v tip tc:
Redo Call fact(b,N), kt qu khng cn Rules xt nn kt qu cho truy vn l Fail v
Exit
S minh ha:
Exit
Call

Call
Fail

fact(b,N)

fact(b,N)

Call

N=1

fact(c,1)

Redo

Fail

Exit

Call

N=2
Redo

b) Cho tp facts:
fact(b,1);
fact(b,2);
fact(c,2);
Truy vn: a:- fact(b,N), fact(c,N);

fact(c,2)
Fail

Theo thut ton:


u tin s Call fact(b,N), do mnh u tin c phn u trng vi phn u ca
fact(b,N) nn suy ra N=1, thay th gi tr ca N v thc hin tip tc:
Call fact(c,1), do khng tm c Rule tha nn kt qu tr v l fail v tip tc:
Redo Call fact(b,N), tm c mnh 2 tha v suy ra c N=2, tip tc:
Call fact(c,2), tm c Rule tha nn kt qu tr v cho truy vn l Success v Exit.
S minh ha:
Exit
Call

Call

fact(b,N)

fact(b,N)

Call

N=1

fact(c,1)

Redo

Fail

Exit

Call

N=2

fact(c,2)

Success
Exit

c) Cho tp facts:
fact(b,1);
fact(b,2);
fact(c,1)
fact(c,2);
Truy vn: a:- fact(b,N), fact(c,N);
Theo thut ton:
u tin s Call fact(b,N), do mnh u tin c phn u trng vi phn u ca
fact(b,N) nn suy ra N=1, thay th gi tr ca N v thc hin tip tc:
Call fact(c,1), tm c Rule tha nn kt qu tr v l success v tip tc:
Redo Call fact(b,N), tm c mnh 2 tha v suy ra c N=2, tip tc:
Call fact(c,2), tm c Rule tha nn kt qu tr v cho truy vn l Success v Exit.
S minh ha:

Exit
Call

N=1

fact(b,N)

Redo

Call

Call
fact(c,1)
Success

Exit

fact(b,N)

Call

fact(c,2)

N=2

Success
Exit

Bi 3. S dng cu trc cy And/Or chng minh qu trnh thc thi trong Prolog
Cu a) Cho tp cc Subgoal:
1) drinks(alan,beer).
2) like(alan,coffee).
3) like(heather,coffee).
4) like(Person,Drink):drinks(Person,Drink).

a different subgoal

5) like(Person,Somebody):like(Person,Drink),

recursive subgoals

like(Somebody,Drink).
Truy vn: ?-like(alan,X).
M t:
Truy vn: ?-like(alan,X) lm nt u tin trong cy v bt u so khp cc bin, do
duyt cc mnh theo th t ta thy c mnh 2 khp nn cy c biu din nh sau:

?-like(alan,X)
2

X/c
offe
e

Kt qu 1 = Alan like coffee.


Gi s kt qu b fail hoc ta b qua kt qu X=coffee (bng cch g ";" thay v "."), th tin trnh
xy ra nh sau: Prolog tip tc qua mnh 3 v b qua mnh ny v alan heather v i n
mnh 4, lc ny do Person l bin nn thay alan vo Person, ta xt subgoal drinks(alan,X),
Backtracking xy ra v bt u so khp bin vi mnh 1:
?-like(alan,X)
2

X = coffee

4
Backtracking
X/c
offe
e
drinks(alan,X)
.
1
X/beer

X = beer
Kt qu 2 = Alan like beer because Alan drinks beer.
Gi s b qua kt qu X= beer th Prolog s xt n mnh 5, mnh 5 c 2 body, ta thay gi tr
alan cho bin Person v ta biu din nh sau:
|?- like(alan,X).
2
X/coff
ee
X = coffee

drinks(alan,
X).

like(alan,coffee)
like(Somebody,coffee)

X/beer

X/coffee

2
2
Somebody/alan

X = beer
X = coffee

Somebody =
alan

Kt qu 3 = Alan like Alan because Alan like coffee.


Backtracking xy ra v bt u so khp bin vi mnh 1, do khng khp nn i tip n mnh
2, suy ra X=coffee, thay kt qu ny vo like(Somebody,Drink) ta c Somebody = alan, gi
s b qua kt qu ny th ta c kt qu khc l Somebody=heather nh vo mnh 3, ta li gi
s b qua kt qu Somebody=heather xt tip.
Qu trnh c xy ra tip tc nh vo c ch Backtracking, cc subgoal cho do v tnh b lp
li khng c im dng.

likes(Someb,coffee)
Somebody
= alan

5
likes(Someb,coffee)

Somebody
= heather

likes(coffee,coffee)

Someb = alan

likes(coffee,X
)
likes(coffee,X2
likes(X,X2
)
)
likes(coffee,X3
likes(X2,X3
)
)

Cu b) Gi s gi nguyn tp cc mnh , sa li truy vn alan = heather


Tp cc Subgoal:
1) drinks(alan,beer).
2) like(alan,coffee).
3) like(heather,coffee).
4) like(Person,Drink):drinks(Person,Drink).

a different subgoal

5) like(Person,Somebody):like(Person,Drink),

recursive subgoals

like(Somebody,Drink).

2nd solution
= Alan like beer because Alan
X =drinks
beer beer.

Truy vn: ?-like(heather,X).


M t:
Truy vn: ?-like(heather,X) lm nt u tin trong cy v bt u so khp cc bin, do
duyt cc mnh theo th t ta thy c mnh 3 khp nn cy c biu din nh sau:
?-like(heather,X)
3

X/c
o

ffee

Gi s b qua kt qu trn th Prolog tm tip n cc mnh sau, c th n mnh 4,


heather c thay vo bin Person, suy ra X=coffee:
?-like(heather,X)
3

X = coffee

X/c
offe
e

Backtracking

drinks(heather,X).
3
X/coffee

X = coffee
Gi s b qua kt qu X= coffee th Prolog s xt n mnh 5, mnh 5 c 2 body, ta thay gi
tr heather cho bin Person trong body 1, khi|?- tm c X=coffee v ta thay vo body 2 biu din
like(heather,X
nh sau:
).
3
X/coffee
X = coffee

drinks(heather,
X).
3

X/coffee

5
like(heather,co
ffee)
X/coffee

like(Somebody,coff
ee)
2
Somebody/ala
n

X=
coffee
X = coffee

Somebody =
alan

Gi s ta b qua kt qu Sombody = alan th ta c Somebody =heather t mnh 3, gi s ta


tip tc b qua kt qu Somebody =heather, qu trnh li tip tc nh sau:

likes(Someb,coffee)
Somebody
= alan

5
likes(Someb,coffee)

Somebody
= heather

likes(coffee,coffee)

Someb = alan
likes(coffee,X)
likes(coffee,X2)

likes(X,X2)

Cu c) Biu din cy dng chui ht


likes(coffee,X3)

likes(X2,X3)
?-like(alan,X)
2

Call

X/c
offe
e

X=coffeee
likes(alan,X)

Gi s b qua kt qu X=coffeee, biu din li cy sau bng chui ht


?-like(alan,X)
2

X = coffee

4
Backtracking
X/c
offe
e
drinks(alan,X)
.
1
X/beer

X=coffeee

Call

Call

likes(alan,X)

drinks(alan,X)

X=beer

Redo

Gi s b qua kt qu X=beer, biu din li cy sau bng chui ht

|?- like(alan,X).
2
X/coff
ee
X = coffee

like(alan,coffee)

drinks(alan,
X).

like(Somebody,coffee)
1

X/coffee

X/beer

2
2
Somebody/alan

X = beer
X = coffee

Call

Call

likes(alan,X)

like(alan,coffee)

X=coffeee

X=coffeee

Call

drinks(alan,X)

Somebody =
alan
X=beer

Somebody=alan
Call

Redo

like(somebody,X)
redo

Call

Somebody=heather
...

like(somebody,X)
redo

You might also like