Bài giảng Trí Tuệ Nhân Tạo - Chương 6: Biểu diễn tri thức và sử dụng luật - Nguyễn Văn Hòa

pdf 27 trang huongle 2100
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Trí Tuệ Nhân Tạo - Chương 6: Biểu diễn tri thức và sử dụng luật - Nguyễn Văn Hòa", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_tri_tue_nhan_tao_chuong_6_bieu_dien_tri_thuc_va_su.pdf

Nội dung text: Bài giảng Trí Tuệ Nhân Tạo - Chương 6: Biểu diễn tri thức và sử dụng luật - Nguyễn Văn Hòa

  1. Ch ươ ng 6: Bi u di n tri th c và s dng lu t 1
  2. Ni dung  Tri th ức khai báo và th ủ t ục  Suy di ễn ti ến, suy di ễn lùi  Lập trình logic  Gi ới thi ệu ngôn ng ữ Prolog 2
  3. Tri th c khai báo và th t c  Bi ểu di ễn d ạng khai báo  Là m ột d ạng bi ểu di ễn mà ở đó tri th ức đượ c đặ c t ả nh ưng s ử dụng nó không đượ c nêu ra.  Để s ử d ụng nó c ần b ổ sung m ột ch ươ ng trình đặ c t ả cái gì s ẽ đượ c làm v ới tri th ức và b ằng cách nào  Ví d ụ:  Dạng đặ c t ả: m ột t ập các “logical assertion”  Bộ phân gi ải có th ể đượ c hi ểu nh ư là cách để làm vi ệc v ới t ập assertions trên.  Tập assertions nh ư là DATA vào B Ộ PHÂN GI ẢI.  Một cách nhìn khác: t ập assertions trên nh ư là m ột PROGRAM. Ở đó: Lu ật giúp cho s ự suy di ễn x ảy ra. Các con đườ ng suy di ễn khác nhau t ừ START – GOAL (hay ng ượ c l ại) đượ c quan ni ệm nh ư con đườ ng th ực thi trong ch ươ ng trình. 3
  4. Tri th c khai báo và th t c (tt)  Bi ểu di ễn d ạng th ủ t ục  Là m ột d ạng bi ểu di ễn mà thông tin điều khi ển c ần thi ết cho vi ệc s ử d ụng tri th ức đượ c nhúng vào chính tri th ức đó.  Để s ử d ụng c ần b ổ sung m ột b ộ thông d ịch có th ể th ực thi các ch ỉ th ị ch ứa trong tri th ức.  Sự khác nhau c ơ b ản gi ữa tri th ức th ủ t ục và khai báo nằm ở ch ổ: Thông tin điều khi ển n ằm ở đâu? 4
  5. Suy di n ti n & suy di n lùi  Suy di ễn ti ến ∧ ∧ ∧ ⇒  Cho m ột t ập lu ật (câu có d ạng): p 1 p2 pn q và m ột t ập các s ự ki ện { p,r, }  Hỏi m ột s ự ki ện q có ph ải là m ột h ệ qu ả c ủa t ập lu ật và tập s ự ki ện hay không?  Tìm t ất c ả các lu ật có gi ả thi ết thu ộc t ập các s ự ki ện  Thêm k ết lu ận vào t ập các s ự ki ện  Ti ếp t ục các d ẫn xu ất khác 5
  6. Suy di n ti n & suy di n lùi (tt)  Suy di ễn ti ến: ví d ụ 6
  7. Suy di n ti n & suy di n lùi (tt)  Suy di ễn ti ến: ví d ụ 7
  8. Suy di n ti n & suy di n lùi (tt)  Suy di ễn lùi ∧ ∧ ∧ ⇒  Cho m ột t ập lu ật (câu có d ạng): p 1 p2 pn q và m ột t ập các s ự ki ện { p,r, }  Hỏi m ột s ự ki ện p có ph ải là m ột h ệ qu ả c ủa t ập lu ật và tập s ự ki ện hay không?  Ki ểm tra xem p có thu ộc t ập các s ự ki ện hay không  Nếu không tìm t ất c ả các lu ật có k ết lu ận là p  Nếu gi ả thi ết c ủa các lu ật này là m ột h ội, ti ếp t ục th ủ t ục ( đệ quy) v ới t ừng th ứa s ố c ủa phép h ội 8
  9. Suy di n ti n & suy di n lùi (tt)  Suy di ễn lùi : ví d ụ 9
  10. Suy di n ti n & suy di n lùi (tt)  Suy di ễn lùi : ví d ụ 10
  11. Gi i thi u v ngôn ng Prolog  Cấu trúc ch ươ ng trình  Ngôn ng ữ Prolog là ngôn ng ữ l ập trình suy lu ận trên c ơ sở logic toán h ọc để gi ải quy ết các bài toán trong l ĩnh vực trí tu ệ nhân t ạo.  Đặ c điểm c ủa ngôn ng ữ là x ử lý tri th ức c ủa các bài toán đượ c mã hóa b ằng ký hi ệu.  Một điểm m ạnh khác c ủa ngôn ng ữ là x ử lý danh sách trên c ơ s ở x ử lý song song và đệ qui v ới các thu ật toán tìm ki ếm.  Ngôn ng ữ cho phép liên k ết v ới các ngôn ng ữ khác nh ư C, Pascal và Assembler. 11
  12. Gi i thi u v ngôn ng Prolog  Cấu trúc ch ươ ng trình (tt) Domains /* domain declarations*/ Predicates /* predicate declarations */ clauses /*clauses ( rules and facts) */ goal /*subgoal_1 subgoal_2 */ 12
  13. Ch ươ ng trình Prolog m u domains nguoi = string predicates cha(nguoi,nguoi) me(nguoi,nguoi) ong_noi(nguoi,nguoi) ong_ngoai(nguoi,nguoi) clauses /*cac qui tac */ ong_noi(X,Y):- cha(X,Z),cha(Z,Y). ong_ngoai(X,Y):- cha(X,Z),me(Z,Y). /* cac su kien */ cha(nam,minh). cha(minh,lam). cha(long,giang). cha(long,thu). me(thu,phi). 13
  14. Ph n domains : mi n xác đ nh  Là ph ần đị nh ngh ĩa ki ểu m ới d ựa vào các ki ểu đã bi ết  Cú pháp đị nh ngh ĩa ki ểu  = ho ặc  = Trong đó các ki ểu m ới phân cách b ởi d ấu «,», các ki ểu đã bi ết phân cách b ởi d ấu «;» 14
  15. Ph n domains (tt)  VD Domains ten, tac_gia, nha_xb, dia_chi = string nam, thang, so_luong = integer dien_tich = real nam_xb = nxb(thang, nam) do_vat = sach(tac_gia, ten, nha_xb, nam_xb); xe(ten, so_luong); nha(dia_chi, dien_tich) 15
  16. Ph n Predicates : v t  Là ph ần b ắt bu ộc ph ải có  Ph ần predicates c ần ph ải khai báo đầ y đủ các v ị từ s ử d ụng trong ph ần Clauses  Cú pháp ( ) Các ki ểu đượ c phân cách nhau b ởi «,»  VD Predicates so_huu (ten, do_vat) so_nguyen_to(integer) 16
  17. Ph n Clauses : lu t  Là ph ần b ắt bu ộc ph ải có, dùng để mô t ả các s ự ki ện và các lu ật  Sử d ụng các v ị t ừ đã khai báo trong ph ần predicates  Cú pháp ( ) ( ) ( ) Các ký hi ệu bao g ồm :- (điều ki ện n ếu); , ( điều ki ện và) ; ( điều ki ện ho ặc) . (k ết thúc v ị t ừ) 17
  18. Ph n Clauses (tt)  VD Clauses so_nguyen_to(2):-!. so_nguyen_to(N):-N>0, so_nguyen_to(M), M 0. so_huu(“Nguyen Van A”, sach(“Do Xuan Loi”, “Cau truc DL”, “Khoa hoc Ky thuat”, nxb(8,1985))). 18
  19. Ph n goal  Bao g ồm các m ục tiêu mà ta yêu c ầu Prolog xác đị nh và tìm k ết qu ả  Không b ắt bu ộc ph ải có  Nếu đượ c vi ết s ẵn trong CT thì đó g ọi là goal n ội; Nếu không, khi ch ạy CT Prolog s ẽ yêu c ầu ta nh ập goal vào, goal ngo ại  VD  Constants  Pi = 3.141592653 19
  20. VD ch ươ ng trình prolog domains so_nguyen = integer predicates so_nguyen_to(so_nguyen) Clauses so_nguyen_to(2):-!. so_nguyen_to(N):-N>0, so_nguyen_to(M), M 0. goal so_nguyen_to(13). /* goal n ội */ 20
  21. B ký t và t khóa  Prolog dùng b ộ ký t ự sau:  Các ch ữ cái và ch ữ s ố (A – Z, a – z, 0 – 9);  Các toán t ử (+, -, *, /, )  Các ký hi ệu đặ c bi ệt  Một vài t ừ khóa  Trace: Khi có t ừ khoá này ở đầ u ch ươ ng trình, thì ch ươ ng trình đượ c th ực hi ện t ừng b ướ c để theo dõi  Fail: Khi ta dùng goal n ội, để nh ận v ề t ất c ả các k ết qu ả khi ch ạy goal n ội, ta dùng toán t ử Fail  ! hay còn g ọi là nhát c ắt, nh ận ch ỉ m ột k ết qu ả t ừ goal ngo ại, ta dùng ký hi ệu ! 21
  22. Ki u d li u chu n  Ki ểu do prolog đị nh ngh ĩa s ẵn: char,integer, real string và symbol  char: ký t ự, h ằng ph ải n ằm trong d ấu nháy: ‘a’, ‘#’  integer: -32768 đế n 32767  real: s ố th ực  string: chu ỗi ký t ự, h ằng chu ỗi ký t ự n ằm trong dấu nháy kép; ”prolog” 22
  23. Ki u do ng ư i dùng đ nh ngh ĩa  Ki ểu m ẩu tin  Cú pháp = tên m ẩu tin (danh sách các ki ểu ph ần t ử) Domains ten, tac_gia, nha_xb, dia_chi = string nam, thang, so_luong = integer dien_tich = real nam_xb = nxb(thang, nam) 23
  24. K thu t đ quy  Sử d ụng đệ quy khi m ột v ị t ừ đượ c đị nh ngh ĩa nh ờ vào chính v ị t ừ đó  Tr ườ ng h ợp d ừng đượ c th ể hi ện b ằng m ột s ự ki ện  VD Predicates Facto (integer, integer) Clauses Facto(0,1):- !. Facto(N, Y) :- N>0,M = N–1, facto(M, Z), Y=N*Z. 24
  25. Các hàm xu t nh p chu n  Xu ất ra màn hình  write( Arg1, Arg2, ,Argn) in ra màn hình giá tr ị c ủa các đố i số.  writef( đinh_dang, Arg1, Arg2, ,Argn) in ra màn hình giá tr ị của các đố i s ố theo đị nh_d ạng  Các đị nh_d ạng  “%d”: In s ố th ập phân bình th ườ ng; đố i s ố ph ải là char ho ặc integer  “%c”: Đố i s ố là m ột s ố integer, in ký t ự có mã Ascci là đố i s ố đó, ch ẳng h ạn writef(“%c”,65) đượ c A  “%e”: In s ố th ực d ướ i d ạng l ũy th ừa c ủa 10  “%x”: In s ố Hexa; đố i s ố ph ải là char ho ặc integer  “%s”: In m ột chu ỗi ho ặc m ột symbol 25
  26. Các hàm xu t nh p chu n (tt)  Nh ập vào t ừ bàn phím  Readln(X): Nh ập m ột chu ỗi ký t ự vào bi ến X  ReadInt(X): Nh ập m ột s ố nguyên vào bi ến X  ReadReal(X): Nh ập m ột s ố th ực vào bi ến X  ReadChar(X): Nh ập vào m ột ký t ự vào bi ến X 26
  27. Ví d  Tháp Hà n ội  Ng ườ i nông dân  Random  27