chapter1

28
BAØI GIAÛNG MOÂN HOÏC : Trí Tueä Nhaân Taïo Noäi dung : Toång quan veà trí tueä nhaân taïo Caùc phöông phaùp giaûi quyeát vaán ñeà cô baûn Heä chuyeân gia Caùc phöông phaùp bieåu dieãn tri thöùc Vaøi öùng duïng trí tueä nhaân taïo lyù giaûi vôùi logic Xöû lyù tri thöùc khoâng chaéc chaén Vieäc hoïc maùy Bieân soïan : Tieán só Nguyeãn Thieän Thaønh Thaønh phoá Hoà Chí Minh Ngaøy 7 Thaùnh 01 Naêm 2006

Upload: dzinh-tuong

Post on 11-Apr-2017

31 views

Category:

Automotive


0 download

TRANSCRIPT

Page 1: Chapter1

BAØI GIAÛNG MOÂN HOÏC : Trí Tueä Nhaân Taïo

Noäi dung : Toång quan veà trí tueä nhaân taïo Caùc phöông phaùp giaûi quyeát vaán ñeà cô baûn Heä chuyeân gia Caùc phöông phaùp bieåu dieãn tri thöùc Vaøi öùng duïng trí tueä nhaân taïo lyù giaûi vôùi

logic Xöû lyù tri thöùc khoâng chaéc chaén Vieäc hoïc maùy

Bieân soïan : Tieán só Nguyeãn Thieän Thaønh• Thaønh phoá Hoà Chí Minh Ngaøy 7 Thaùnh 01 Naêm

2006

Page 2: Chapter1

Chöông 1 :Toång Quan Veà Trí Tueä Nhaân TaïoChöông naøy goàm coù : Trí tueä nhaân taïo laø gì ? Lòch söû phaùt trieån trí tueä nhaân

taïo Caùc thaønh phaàn cô baûn cuûa trí

tueä nhaân taïo Giôùi Thieäu Veà Ngoân Ngöõ Laäp

Trình Prolog

Page 3: Chapter1

Trí tueä nhaân taïo laø gì ? Trí tueä nhaân taïo laø lónh vöïc khoa hoïc chuyeân

nghieân cöùu caùc phöông phaùp cheá taïo trí tueä maùy sao cho gioáng nhö trí tueä con ngöôøi.

Vaøi ñònh nghóa cuûa trí tueä nhaân taïo ñieån hình laø

Heä thoáng maø bieát suy nghó nhö con ngöôøi Heä thoáng maø bieát haønh ñoäng nhö con ngöôøi

Ñeå heä thoáng maø bieát suy nghó vaø haønh ñoäng gioáng nhö con ngöôøi thì heä thoáng ñoù phaûi coù tri thöùc, phaûi coù khaû naêng lyù giaûi, phaûi coù khaû naêng hoïc, phaûi coù thò giaùc vaø thính giaùc ñoàng thôøi phaûi bieát di chuyeån gioáng nhö con ngöôøi.

Page 4: Chapter1

Trí tueä con ngöôøi laø gì ? Laø khaû naêng giaûi quyeát vaán ñeà cuûa con ngöôøi.

Thöôøng, khaû naêng giaûi quyeát vaán ñeà cuûa con ngöôøi thoâng qua boán thao taùc cô baûn laø Xaùc ñònh taäp hôïp ñích

Xeùt quaù trình suy nghó giaûi quyeát vaán ñeà cuûa con ngöôøi, quaù trình suy nghó naøy phaûi coù ñieåm baét ñaàu vaø ñieåm keát thuùc.

Ñieåm baét ñaàu ñöôïc goïi laø traïng thaùi ban ñaàu vaø ñieåm keát thuùc ñöôïc goïi laø traïng thaùi ñích cuûa baøi toùan.

Giöõa hai traïng thaùi cuûa quaù trình suy nghó ñöôïc phaân raõ ra nhieàu maûnh nhoû, moãi maûnh nhoû ñöôïc goïi laø ñích töøng phaàn.

Taäp caùc ñích töøng phaàn naøy ñònh höôùng caùch giaûi quyeát vaán ñeà cuûa con ngöôøi.

Thu thaäp caùc söï kieän vaø luaät suy dieãn Con ngöôøi thöôøng xuyeân thu thaäp caùc söï kieän vaø

coâng thöùc hoùa caùc söï kieän thaønh luaät ñeå laøm cô sôû tri thöùc giaûi quyeát vaán ñeà.

Luaät laø moái quan heä giöõa vaøi söï kieän ñaõ bieát vaø moät vaøi söï kieän chöa bieát.

Tri tröùc laø söï hieåu bieát veà moät lónh vöïc naøo ñoù.

Page 5: Chapter1

Cô cheá taäp trung Khi giaûi quyeát vaán ñeà, coù nhieàu ñöôøng suy nghó

khaùc nhau xuaát hieän cuøng luùc. Ñeå taäp trung baùm theo ñöôøng suy nghó giaûi quyeát

vaán ñeà vaø ñoàng thôøi loïai boû caùc ñöôøng suy nghó khaùc nhôø moät cô cheá coù saün trong boä oùc con ngöôøi ñoù laø cô cheá taäp trung.

Boä maùy suy dieãn Quaù trình giaûi quyeát vaán ñeà laø moät quaù trình laäp

luaän töø söï kieän ñaõ bieát ñeå suy dieãn ra söï kieän chöa bieát.

Quaù trình naøy ñöôïc laëp laïi cho ñeán khi daãn ñeán ñích. Ñeå laøm ñöôïc ñieàu naøy, nhôø moät cô cheá coù saün

trong boä oùc con ngöôøi ñoù laø boä maùy suy dieãn. Trí tueä maùy laø gì ? Trí tueä maùy laø khaû

naêng giaûi quyeát vaán ñeà cuûa maùy sao cho gioáng khaû naêng giaûi quyeát vaán ñeà cuûa con ngöôøi ñoù laø

Page 6: Chapter1

Haønh ñoäng gioáng nhö con ngöôøi.Suy nghó gioáng nhö con ngöôøi.Hoïc thích nghi vôùi tình huoáng gioáng nhö con ngöôøi.Xöû lyù thoâng tin gioáng nhö con ngöôøi. Haønh ñoäng vaø suy nghó treân cô sôû logic vaø chính

xaùc gioáng nhö con ngöôøi. Neàn taûng cuûa trí tueä nhaân taïo caàn ñeán

caùc nguoàn tri thöùc cuûa nhieàu lónh vöïc khoa hoïc khaùc nhau nhö

Khoa hoïc maùy tính vaø kyõ thuaät maùy tính ( cheá taïo phaàn meàm vaø phaàn cöùng).

Trieát hoïc ( Thieát keá luaät suy dieãn lyù giaûi ) Toùan hoïc ( Kieán thöùc suy luaän logic, thieát keá thuaät toùan

vaø toái öu hoùa ) Tri hoïc vaø taâm lyù hoïc (Moâ hình hoùa suy nghó con ngöôøi

ôû möùc cao ) Khoa hoïc thaàn kinh ( Moâ hình hoùa hoïat ñoäng boäc oùc con

ngöôøi ôû möùc thaáp ) Ngoân ngöõ hoïc ( taïo ngoân ngöõ noùi töï nhieân cho maùy )

Page 7: Chapter1

Neàn taûng naøy ñöôïc moâ taû nhö hình

Artificial Intelligence

Mathematics

Cognitive Science

Philosophy

Biology

Linguistics

Computer Science &

Engineering

Economics

Psychology

Page 8: Chapter1

Lòch söû phaùt trieån trí tueä nhaân taïo YÙ töôûng cheá taïo trí tueä maùy ñaõ coù töø laâu nhöng

maõi ñeán naêm 1950, nhaø toùan hoïc ngöôøi Anh coâng boá coâng trình khoa hoïc cuûa oâng ta ñoù laø “Maùy tính vaø Thoâng minh”.

Ñaây ñöôïc xem nhö laø moác lòch söû baét ñaàu phaùt trieån khoa hoïc trí tueä nhaân taïo. Nhöõng naêm ngay sau ñoù coù caùc coâng trình ñöôïc coâng boá nhö

Naêm 1956, chöông trình giaûi baøi toùan toång quaùt. Naêm 1958, chöông trình chöùng minh ñònh lyù hình hoïc.

Ñænh cao cuûa vieäc phaùt trieån ôû lónh vöïc naøy phaûi noùi ñeán nhöõng naêm 1960. Duø raèng coøn bò haïn cheá nhieàu veà trang thieát bò nhöng nhöõng naêm naøy ñaõ coù nhieàu coâng trình ñöôïc coâng boá nhö

Naêm 1960, ngoân ngöõ Lisp. Naêm 1961, chöông trình giaûi caùc baøi toùan ñaïi soá sô

caáp. Naêm 1963, chöông trình troø chôi côø vua. Naêm 1964, chöông trình tính tích phaân. Naêm 1966, chöông trình phaân tích vaø hoïc noùi. Naêm 1968, chöông trình ñieàu khieån Robot theo phöông aùn

maét vaø tay.

Page 9: Chapter1

Naêm 1972, ngoân ngöõ Prolog. Töø nhöõng naêm 1969 ñeán naêm 1999,

coù nhieàu chöông trình ñöôïc xaây döïng treân caùc heä cô sôû tri thöùc.

Thaät vaäy, lónh vöïc trí tueä ñaõ ñi vaøo ñôøi soáng daân duïng töø nhöõng naêm 1980 ñeán naøy.

Page 10: Chapter1

Caùc thaønh phaàn cô baûn cuûa trí tueä nhaân taïo

Coù hai thaønh phaàn cô baûn cuûa trí tueä nhaân taïo ñoù laø bieåu dieãn tri thöùc vaø tìm kieám tri thöùc trong mieàn bieåu dieãn.

Tri thöùc cuûa baøi toùan coù theå ñöôïc phaân ra laøm ba loïai tri thöùc cô baûn ñoù laø tri thöùc moâ taû, tri thöùc thuû tuïc vaø tri thöùc ñieàu khieån. Tri thöùc moâ taû : moâ taû nhöõng gì ñöôïc bieát veà

baøi toùan. Loïai tri thöùc naøy bao goàm caùc söï kieän, caùc quan heä vaø caùc tính chaát cuûa baøi toùan.

Tri thöùc thuû tuïc : moâ taû toång quaùt caùch giaûi quyeát baøi toùan. Loïai tri thöùc naøy bao goàm luaät suy dieãn hôïp leä, chieán löôïc tìm kieám vaø giaûi thuaät tìm kieám.

Tri thöùc ñieàu khieån : laø luaät chuû choát ñeå ñieàu khieån quaù trình tìm kieám giaûi quyeát baøi toùan.

Page 11: Chapter1

Nhö vaäy, bieåu dieãn tri thöùc laø gì ? Ñoù laø phöông phaùp theå hieän tri thöùc trong maùy sao cho ñuû vaø hieäu löïc ñeå baøi toùan ñöôïc giaûi toát nhaát.

Ví duï : Xeùt baøi toùan ngöôøi noâng daân, choàn, ngoãng vaø nguõ coác. Baøi toùan ñaët ra laø ngöôøi noâng daân muoán mang theo

vôùi mình moät con choàn, moät con ngoãng vaø moät soá nguõ coác qua beân kia soâng baèng moät chieác thuyeàn.

Tuy nhieân, thuyeàn cuûa oâng ta quaù beù chæ coù theå mang theo moät thöù duy nhaát vôùi oâng ta treân moãi chuyeán thuyeàn sang soâng.

Neáu oâng ta ñeå laïi choàn vaø ngoãng beân naøy soâng thì choàn seõ aên ngoãng vaø neáu oâng ta ñeå laïi ngoãng vaø nguõ coác thì ngoãng seõ aên heát soá nguõ coác.

Haõy saép xeáp caùc chuyeán thuyeàn qua laïi soâng sao cho ngöôøi noâng daân mang moïi thöù sang beân kia soâng an toøan?

Page 12: Chapter1

Vôùi baøi toùan naøy, caùch bieåu dieãn tri thöùc toát nhaát coù theå vaïch ra caùc raøng buoäc voán saün coù trong baøi toùan ñoù laø

xaây döïng moät bieåu ñoà vôùi caùc nuùt coù ñaùnh nhaõn bieåu dieãn ngöôøi noâng daân mang theo thöù maø oâng ta caàn phaûi mang theo treân moãi chuyeán thuyeàn

vaø caùc caïnh lieân keát giöõa caùc nuùt bieåu dieãn baèng caùc ñöôøng muõi teân chæ caùc chuyeán thuyeàn qua laïi soâng.

Caùch bieåu dieãn naøy haøm chöùa caùc thaønh phaàn nhö ngöõ töø hoïc, caáu truùc, thuû tuïc vaø ngöõ nghóa.

Ngöõ töø hoïc (Lexical) : laø caùc töø vöïng hôïp leä ñöôïc söû duïng nhö ø caùc kyù hieäu trong bieåu dieãn.

Caáu truùc (Structure) : laø caùc ñöôøng muõi teân lieân keát giöõa caùc nuùt chæ ñònh caùc chuyeán thuyeàn qua laïi soâng.

Thuû tuïc (Procedure) : laø moâ taû caùch giaûi baøi toùan töø nuùt naøy ñeán nuùt kia nhôø thoâng caùc ñöôøng chæ ñònh muõi teân.

Ngöõ nghóa (Semantic) : laø yù nghóa cuûa caùc nuùt vaø caùc caïnh lieân keát thoâng qua caùch giaûi baøi toùan.

Bieåu ñoà bieåu dieãn tri thöùc cuûa baøi toùan ngöôøi noâng daân ñöôïc moâ taû nhö hình

Page 13: Chapter1

Farmer FoxGooseGrain

Start

End

Farmer FoxGooseGrain

Farmer Fox GooseGrain

Farmer Fox GooseGrain

Farmer Fox GooseGrain

Farmer Fox Goose Grain

Farmer FoxGoose Grain

Farmer FoxGoose Grain

Farmer FoxGoose Grain

Farmer Fox Goose Grain

Page 14: Chapter1

Vôùi ngöôøi noâng daân vaø ba thöù oâng ta muoán mang theo ôû beân naøy soâng hoaëc beân kia soâng, ta coù 21+3 = 16 laàn saép xeáp khaùc nhau, trong ñoù coù 10 laàn saép xeáp qua laïi soâng an toøan vaø 6 laàn saép xeáp khaùc qua laïi soâng khoâng an toøan ñoù laø

Choàn, ngoãng vaø nguõ coác beân naøy soâng hoaëc beân kia soâng,

Ngoãng vaø nguõ coác beân naøy soâng hoaëc beân kia soâng

Choàn vaø ngoãng beân naøy soâng hoaëc beân kia soâng.

Khi tri thöùc cuûa baøi toùan ñaõ ñöôïc bieåu dieãn, phöông phaùp giaûi baøi toùan trong lónh vöïc trí tueä nhaân taïo ñoù laø kyõ thuaät tìm kieám trong mieàn bieåu dieãn tri thöùc cuûa baøi toùan ñoù.

Ñeå giaûi baøi toùan ngöôøi noâng daân, kyõ thuaät tìm kieám laø baèng caùch baùm doø tìm theo caùc ñöôøng muõi teân baét ñaàu töø nuùt khôûi taïo lieân keát qua caùc nuùt ñeå ñi ñeán ñích trong bieåu dieãn cuûa baøi toùan.

Page 15: Chapter1

Giôùi Thieäu Veà Ngoân Ngöõ Laäp Trình Prolog

Ngoân ngöõ laäp trình Prolog laø coâng cuï laäp trình suy luaän logic daønh rieâng cho lónh vöïc trí tueä nhaân taïo vôùi caùc ñaëc ñieåm nhö sau :

Noù laø ngoân ngöõ cho pheùp xöû lyù song song vaø ñeä quy. Noù laø ngoân ngöõ cho pheùp lieân keát vôùi nhieàu loïai

ngoân ngöõ laäp trình khaùc nhö C, Assembler vaø Pascal. Gioáng nhö caùc ngoân ngöõ laäp trình khaùc, caáu truùc

chöông trình cuûa ngoân ngöõ Prolog vôùi caùc töø khoùa ñöôïc moâ taû nhö sau :

domains<Vuøng khai baùo bieán >

predicates< Vuøng khai baùo haøm vò töø >

clauses< Vuøng khai baùo caùc meänh ñeà söï kieän vaø meänh ñeà luaät>

goal< Vuøng khai baùo meänh ñeà ñích cuûa chöông trình>

Page 16: Chapter1

domains : laø töø khoùa cho pheùp vuøng khai baùo bieán trong moät chöông trình Prolog vôùi caùc kieåu döõ lieäu khoâng chuaån vaø döõ lieäu chuaån. Döõ lieäu chuaån cuûa prolog laø short, word, integer, real, string, symbol. Cuù phaùp khai baùo bieán vôùi caùc kieåu döõ lieäu laø

<Variable_name> = <Data_type> Ví duï : Khai baùo bieán d vôùi kieåu döõ lieäu integer

vaø List laø bieán danh saùch chöùa caùc soá integer vôùi caùc caâu leänh laødomainsd = integerList = d*

predicates : laø töø khoùa cho pheùp vuøng khai baùo caùc haøm vò töø. Ví duï : Khai baùo haøm vò töø tính father vôùi hai bieán

ñoái soá cuûa noù laø X vaø Y kieåu symbol vôùi caùc caâu leänh laø

Page 17: Chapter1

domainsx = symbolpredicatesfather(X, Y)

Löu yù : Caùc bieán trong caùc haøm vò töø tính laø chöõ caùi in hoa hoaëc chuoåi baét ñaàu vôùi chöõ caùi in hoa.

clauses : laø töø khoùa cho pheùp vuøng khai baùo caùc meänh ñeà söï kieän vaø meänh ñeà luaät suy dieãn. Meänh ñeà söï kieän : laø caùc haøm vò töø tính ñöôïc

thieát laäp ñeå khai baùo caùc söï kieän. Cuù phaùp toång quaùt cuûa haøm vò töø laøpredicate_name(<Const1>, . . .,<ConstN>).

Löu yù : Caùc ñoái soá trong caùc vò töø tính sö’kieän laø caùc chuoåi haèng soá vôùi caùc chöõ caùi in thöôøng.

Ví duï : Söï kieän cho raèng John laø father cuûa marry, söï kieän naøy ñöôïc khai baùo vôùi meänh ñeà söï kieän father laøfather(john, marry).

Page 18: Chapter1

Meänh ñeà luaät suy dieãn : Ñeå khai baùo luaät suy dieãn If <Conditions> Then <Clusion> trong chöông trình Prolog, meänh ñeà luaät suy dieãn ñöôïc khai baùo vôùi cuù phaùp toång quaùt laøpredicate_name(<Clusion>):- predicate_name(<Conditions>).

Trong ñoù, veá traùi cuûa meänh ñeà laø töông öùng vôùi veá keát luaän vaø veá phaûi cuûa meänh ñeà laø töông öùng vôùi veá ñieàu khieän cuûa luaät if-Then.

Ví duï : Chöông trình prolog vôùi meänh ñeà söï kieän vaø luaät laødomainsx = symbolpredicatesnondeterm father(X, Y)nondeterm grandfather(X,Z)clausesfather(john, marry).father(bod, john).grandfather(X,Z) :- father(X,Y), father(Y,Z).goalgrandfather(X,Z), write(X, “Grandfather of “, Z),nl.

• Chaïy chöông trình cho keát quaû laø Bod is grandfather of marry

Page 19: Chapter1

Toùan töû trong prolog : Toùan töû logic :

Toùan töû and : , Toùan töû or : ; Toùan töû not : not

Toùan töû so saùnh : Toùan töû nhoû hôn : < Toùan töû nhoû hoaëc baèng : <= Toùan töû baèng nhau : = Toùan töû lôùn hôn : > Toùan töû lôn hoaëc baèng : >= Toùan töû khoâng baèng : <>

Toùan töû soá hoïc : Coäng : + Tröø : - Nhaân : * Chia : /

Page 20: Chapter1

Ví duï : Giaûi phöông trình baäc 2 : Ax2 + Bx + C = 0 vôùi thuaät toùan ñöôïc moâ taû nhö hình

Ax2+ Bx + C = 0

A = 0

A ≠ 0

C = 0

B ≠ 0

C ≠ 0

B = 0

C = 0 C ≠ 0

B = 0 B ≠ 0

C = 0 C ≠ 0C = 0 C ≠ 0

Any solution

Undefined

Zero solution

X = -C/B Zero solution

X = sqrt(-C/B)

X = -B/A X1 = (-B + sqrt(B2 -4AC))/2A

X2 = (-B - sqrt(B2 -4AC))/2A

Page 21: Chapter1

Luaät If- Then giaûi phöông trình baäc 2 vôùi thuaät toùan hình caây ñöôïc thieát laäp laø If A = 0 and B = 0 and C = 0 Then Display Any solution. If A = 0 and B = 0 and C ≠ 0 Then Display Undefined solution. If A = 0 and B ≠ 0 and C = 0 Then Display Zero solution If A = 0 and B ≠ 0 and C ≠ 0 Then Display x = -C/B. If A ≠ 0 and B = 0 and C = 0 Then Display Zero solution. If A ≠ 0 and B = 0 and C ≠ 0 Then Display x = ±sqrt(-C/A). If A ≠ 0 and B ≠ 0 and C = 0 Then Display x = 0 and x = -B/A. If A ≠ 0 and B ≠ 0 and C ≠ 0 Then Display x = (-B ±sqrt(B2 – 4AC))/2A.

Chöông trình Prolog ñöôïc thieát laäp treân cô sôû luaät If-Then giaûi baøi toùan phöông trình baäc 2 laødomainsr = realpredicatessolve(R, R, R)

Page 22: Chapter1

clausessolve(A, B, C) :- A = 0, B = 0, C = 0, write(“Any solution “),nl,!.solve(A, B, C) :- A = 0, B = 0, C <> 0, write(“Undefined solution “),nl,!.solve(A, B, C) :- A = 0, B <> 0, C = 0, write(“Zero solution “),nl,!.solve(A, B, C) :- A = 0, B<.0, C <> 0, X = -C/B, write(“X = “,X),nl,!.solve(A, B, C):- A <> 0, B = 0, C = 0, write(“Zero solution “),nl,!.solve(A, B, C) :- A <> 0, B = 0, C <> 0, D = -C/A, D > 0,X1 = sqrt(D), X2 = -sqrt(D),write(“X1 = “, X1,” X2 = “,X2),nl,!.solve(A, B, C) :- A <> 0, B <> 0, C = 0, X1 = 0, X2 = -B/A,write(“X1 = “,X1,” X2 = “,X2),nl,!.solve(A, B, C) :- A <> 0, B <> 0, C <> 0, D = B*B – 4*A*C, D > 0,X1 = (-B + sqrt(D))/(2*A), X2 = (-B – sqrt(D))/(2*A),write(“X1 = “, X1,” X2 = “,X2),nl,!.

goalwrite(“Enter coeffient A : ), readreal(A), write(“Enter coeffient A : ), readreal(A), write(“Enter coeffient A : ), readreal(A),solve(A, B, C).

Page 23: Chapter1

Xöû lyù danh saùch : Xaùc ñònh thaønh vieân cuûa danh saùch vôùi caùc meänh ñeà

laømember(X, [X | _ ]) :- !.member(X, [_ | L ]) :- member(X, L).

Neáu X laø thaønh vieân cuûa danh saùch L thì meänh ñeà traû veà giaù trò logic true; maët khaùc traû veà giaù trò logic false.

Noái hai danh saùch vôùi caùc meänh ñeà laøappend([ ], L, L).append([X | L1], L2, [X | L3]) :- append(L1, L2, L3).

Noái hai danh saùch L1 vaø L2 cho keát quaû L3. Hieån thò noäi dung cuûa danh saùch vôùi caùc meänh ñeà laø

writelist([ ]).Writelist([H | T]) :- write(H), nl, writelist(T).

Hieån thò ñaûo noäi dung cuûa danh saùch vôùi caùc meänh ñeà laø

reverse_writelist([ ]).reverse_writelist([H | T]) :- reverse_writelist(T), write(H),nl.

Loïai boû phaàn töû ñaàu tieân cuûa danh saùch T vôùi meänh ñeà laø

dequeue(E, [E | T], T).

Page 24: Chapter1

Coäng moät phaàn töû vaøo cuoái danh saùch vôùi caùc meänh ñeà laø

add_to_queue(E, [ ],[E]).add_to_queue(E, [H | T], [H | Tnew]) :- add_to_queue(E,T,Tnew).

Coäng theâm moät phaàn töû vaøo ñaàu danh saùch stack vôùi meänh ñeà laø

stack(Top, Stack,[Top | Stack]). Coäng theâm moät danh saùch vaøo cuoái danh

saùch stack vôùi meänh ñeà laøadd_list_to_stack(L, Stack, Result) :- append(L, Stack, Result).

Xaùc ñònh thaønh vieân laø cXa1cdanh saùch stack vôùi meänh ñeà laø

member_stack(E, Stack) :- member(E, Stack). Hieån thò ñaûo noäi dung cuûa stack vôùi caùc

meänh ñeà laøreverse_print-stack(S) :- empty_stack(S).reverse_print_stack(S) :- stack(E, Res, S),

reverse_print_stack(Res),wrie(E),nl.

Page 25: Chapter1

Xaùc ñònh thaønh vieân thuoäc laø cuûa taäp hôïp S vôùi meänh ñeà laø

member_set(X, S) :- member(X,S). Coäng thaønh vieân khoâng thuoäc veà danh saùch

vaøo ñaàu danh saùch vôùi caùc meänh ñeà laøadd_if_not_in_set(X, L, L) :- member(X, L), !.add_if_not_in_set(X, L, [X | L]).

Xaùc ñònh taäp hôïp laø taäp con cuûa moät taäp hôïp khaùc vôùi caùc meänh ñeà laø

subset([ ], _ ).Subset({H | T], L) :- member_set(H, L), subset(T,L).

Lieät keâ taát caû caùc giaù trò cuûa cuøng thuoäc tính trong lôùp söû duïng leänh findall vôùi cuù phaùp laø

findall(Property_name, Predicate_name, List). Ví duï :

predicates person(Name, Address, Age)clausesperson(“Alan”,”22 Bstreet”, 42).person(“Peter”,”21 C street”,36).goalfindall(Age, person(_,_,Age), L).

Page 26: Chapter1

• Ví duï : Chöông trình Prolog giaûi baøi toùan ngöôøi noâng daân choàn ngoãng vôùi maõ nguoàn laø

• domains• LOC = east;• west• STATE = state(LOC farmer,LOC wolf,LOC goat,LOC cabbage)• PATH = STATE*• • predicates• go(STATE,STATE) % Start of the algorithm• path(STATE,STATE,PATH,PATH) % Finds a path from one state to another• nondeterm move(STATE,STATE) % Transfer a system from one side to another• opposite(LOC,LOC) % Gives a location on the opposite side• nondeterm unsafe(STATE) % Gives the unsafe states• nondeterm member(STATE,PATH) % Checks if the state is already visited• write_path(PATH)• write_move(STATE,STATE)

• clauses• go(StartState,GoalState):-• path(StartState,GoalState,[StartState],Path),• write("A solution is:\n"),• write_path(Path).•

Page 27: Chapter1

path(StartState,GoalState,VisitedPath,Path):-• move(StartState,NextState), % Find a move• not(unsafe(NextState)), % Check that it is not unsage

not(member(NextState,VisitedPath)), % Check that we have not had this situation before

• path(NextState,GoalState,[NextState|VisitedPath],Path),• !.

• path(GoalState,GoalState,Path,Path). % The final state is reached

move(state(X,X,G,C),state(Y,Y,G,C)):-• opposite(X,Y). % Move FARMER + WOLF• move(state(X,W,X,C),state(Y,W,Y,C)):-• opposite(X,Y). % Move FARMER + GOAT• move(state(X,W,G,X),state(Y,W,G,Y)):-• opposite(X,Y). % Move FARMER + CABBAGE• move(state(X,W,G,C),state(Y,W,G,C)):-• opposite(X,Y). % Move ONLY FARMER• opposite(west,east).

• unsafe(state(F,X,X,_)):- % The wolf eats the goat• opposite(F,X),• !.• unsafe(state(F,_,X,X)):- % The goat eats the cabbage• opposite(F,X),• !.•

Page 28: Chapter1

• member(X,[X|_]):-!.• member(X,[_|L]):- member(X,L).• opposite(east,west).• write_path([H1,H2|T]):- write_move(H1,H2), write_path([H2|T]).• write_path([]).• write_move(state(X,W,G,C),state(Y,W,G,C)):-!,• write("The farmer crosses the river from ",X," to ",Y),nl.• write_move(state(X,X,G,C),state(Y,Y,G,C)):-!,• write("The farmer takes the Wolf from ",X," of the river to ",Y),nl.• write_move(state(X,W,X,C),state(Y,W,Y,C)):-!,• write("The farmer takes the Goat from ",X," of the river to ",Y),nl.• write_move(state(X,W,G,X),state(Y,W,G,Y)):-!,• write("The farmer takes the cabbage from ",X," of the river to

",Y),nl.• goal• go(state(east,east,east,east),state(west,west,west,west)),• write("solved").• Chaïy chöông trình cho keát quaû laø• A solution is:• The farmer takes the Goat from west of the river to east• The farmer crosses the river from east to west• The farmer takes the cabbage from west of the river to east• The farmer takes the Goat from east of the river to west• The farmer takes the Wolf from west of the river to east• The farmer crosses the river from east to west• The farmer takes the Goat from west of the river to east• no