Chẳng hạn như bài toán đong nước, bài toán ba người tu hành và ba kẻ ăn thịt người,…Ngoài ra luật sinh cũng còn được ứng dụng để viết các chương trình tròchơi giải trí mang tính trí tuệ
Trang 1M c l c ục lục ục lục
LỜI NÓI ĐẦU 2
I BIỂU DIỄN TRI THỨC BẰNG LUẬT SINH 3
1 Bài toán đong nước 3
2 Khái niệm luật sinh 10
3 Cơ chế suy luận trên các luật sinh 12
4 Tối ưu luật 14
5 Ưu điểm và nhược điểm của biểu diễn tri thức bằng luật sinh 15
II CÀI ĐẶT CHƯƠNG TRÌNH 16
1 Giới thiệu trò chơi Caro 16
2 Cài đặt hệ thống 16
3 Thực thi chương trình 17
4 Phân tích, thiết kế 18
5 Giới thiệu một số source code của chương trình 19
TÀI LIỆU THAM KHẢO 24
Trang 2L I NÓI Đ U ỜI NÓI ĐẦU ẦU
Luật sinh là một trong những phương pháp biểu diễn tri thức trên máy tính Nóđóng vai trò hết sức quan trong trong việc khẳng định khả năng giải quyết vấn đề củamột hệ cơ sở tri thức Rất nhiều bài toán trong trí tuệ nhân tạo đều được giải quyếtbằng luật sinh Chẳng hạn như bài toán đong nước, bài toán ba người tu hành và ba kẻ
ăn thịt người,…Ngoài ra luật sinh cũng còn được ứng dụng để viết các chương trình tròchơi giải trí mang tính trí tuệ như cờ tướng, cờ Caro,…
Bài thu hoạch này áp dụng các quy tắc của luật sinh trong thiết kế trò chơi Carogiữa người và máy tính Nội dung bài thu hoạch mở đầu giới thiệu về bài toán liên quanđến luật sinh, tiếp theo là khảo sát về luật sinh, và cuối cùng là trình bày các luật trongviệc thiết kế trò chơi Caro
Xin chân thành cảm ơn thầy Hoàng Kiếm, đã truyền đạt kiến thức chuyên sâu về
cơ sở tri thức, trí tuệ nhân tạo Nhờ đó mà em đã hoàn thành được bài thu hoạch này.Đồng thời cũng xin cảm ơn bạn bè, đồng nghiệp đã hỗ trợ tôi trong suốt thời gian làmbài thu hoạch
Trang 3I BIỂU DIỄN TRI THỨC BẰNG LUẬT SINH
1 Bài toán đong nước
Nội dung bài toán: Cho 2 bình rỗng X và Y có thể tích lần lượt là Vx và Vy Hãydùng 2 bình này để đong ra Z lít nước, trong đó Z<= min(Vx,Vy)
Bài toán này khá tiêu biểu, thường được dùng để minh họa chon nét đẹpcủa phương pháp giải quyết vấn đề - bài toán bằng cách chuyển giao tri thứccho máy tính Nếu sử dụng thuật toán thông thường chúng ta chỉ giải được một
số trường hợp cụ thể của bài toán này Thậm chí, nhiều người khi mới tiếp cậnvới bài toán này còn không tin là nó có thể hoàn toàn được giải một cách tổngquát bởi máy tính Bài toán này sẽ được giải quyết bằng cách sử dụng các luậtdẫn xuất (luật sinh)
Với một trường hợp cụ thể của bài toán như Vx=5 (bình 5) và Vy=7 (bình 7)
và z=4 Sau một thời gian tính toán, ta có thể sẽ đưa ra một quy trình đổ nướcđại loại như:
- Trút hết qua bình 5 cho đến khi 5 đầy
- Phần còn lại chính là số nước cần đong
Tuy nhiên, với những số liệu bình Vx và Vy khác, thì ta phải “mày mò” lại từđầu để tìm ra quy trình đổ nước Cứ thế, mỗi một trường hợp sẽ có một cách
đổ nước hoàn toàn khác nhau Như vậy, nếu có một ai đó yêu cầu ta đưa ramột cách làm tổng quát thì chính ta cũng sẽ lúng túng, ngoại trừ trường hợp đãbiết trước cách giải theo tri thức sắp sửa tìm hiểu ở đây
Vì chưa tìm ra được một quy tắc cụ thể nào, ta sẽ thực hiện một loạt cácthao tác “cảm tính” như đong đầy một mình, trút một bình này sang bình kia,
đổ hết nước trong một bình ra…vừa làm vừa nhẩm tính xem cách làm này cóthể đi đến kết quả hay không Sau nhiều lần thí nghiệm rất có thể ta sẽ rút ramột số kinh nghiệm như “khi bình 7 đầy nước mà bình 5 chưa đầy thì hãy đổ nósang bình 5 cho đến khi bình 5 đầy” v.v
Trang 4Vậy thì tại sao ta lại không thử “truyền” những kinh nghiệm này cho máytính và để cho máy tính “mày mò” tìm các thao tác cho chúng ta? Điều nàyhoàn toàn có lợi, ví máy tính có khả năng “mày mò” hơn hẳn chúng ta Nếunhững “kinh nghiệm” mà chúng ta cung cấp cho máy tính không giúp chúng tatìn được lời giải, chúng ta sẽ thay thế nó bằng những kinh nghiệm khác và lạitiếp tục để máy tính tìm kiếm lời giải.
Bài toán được phát biểu lại một cách hình thức hơn như sau:
- Không mất tính tổng quát, luôn có thể giả sử rằng V x < V y
- Gọi lượng nước chứa trong bình X là x (0<=x<=Vx)
- Gọi lượng nước chứa trong bình Y là y (0<=y<=Vy)
Như vậy, điều kiện kết thúc của bài toán sẽ là:
x=z hoặc y=zĐiều kiện đầu của bài toán là: x=0 và y=0
Người ta đã chứng minh được rằng, bài toán đong nước chỉ có lời giải khi số
nước cần đong là một bội số của ước số chung lớn nhất của thể tích 2 bình: z=n
x USCLN(V x ,V y ) (với n nguyên dương).
Trên thực tế, lúc đầu để giải trường hợp tổng quát của bài toán này, người
ta đã dùng đến hơn 15 luật (kinh nghiệm) khác nhau Sau này, người ta đã rútgọn lại chỉ còn 3 luật được mô tả như sau:
(L1) Nếu bình X đầy thì đổ hết nước trong bình X đi.
(L2) Nếu bình Y rỗng thì đổ đầy nước vào bình Y.
(L3) Nếu bình Y không rỗng và bình X không đầy thì hãy trút nước từ bình Y sang bình X (cho đến khi bình X đầy hoặc bình Y hết nước).
Quá trình giải được thực hiện bằng cách xét lần lượt các luật sau, luật nàothỏa mãn thì sẽ được áp dụng Sau khi áp dụng luât, trạng thái của bài toán sẽthay đổi, ta lại tiếp tục xét các luật kế tiếp, nếu hết luật, quay trở lại luật đầutiên Quá trình tiếp diễn cho đến khi đạt được điều kiện kết thúc của bài toán.Như vậy, các luật chính là các “kinh nghiệm” hay tri thức mà ta đã chuyểngiao cho máy tính
Trang 5Ta có thể dễ dàng chuyển đổi cách giải này thành chương trình như sau:
… x:=0; y:=0;
WHILE ((x<>z) AND (y<>z)) DO BEGIN
IF (x=V x ) THEN x:=0;
IF (y=0) THEN y:=V y ;
IF (y>0) THEN BEGIN
Trang 6Luật (L3) x=3, y=2
Ba luật mà chúng ta đã cài đặt trong chương trình trên được gọi là cơ sở trithức Còn cách thức tìm kiếm lời giải bằng cách duyệt tuần tự từng luật và ápdụng nó được gọi là động cơ suy diễn Hai thuật ngữ này sẽ được định nghĩachính xác ở cuối phần này
Cách giải quyết vấn đề theo kiểu này rất khác so với cách giải bằng thuậttoán thông thường là chúng ta không đưa ra một trình tự giải quyết vấn đề cụthể mà chỉ đưa ra các quy tắc chung chung (dưới dạng các luật), máy tính sẽdựa vào đó (áp dụng các luật) để xây dựng một quy trình giải quyết vấn đề.Điều này cũng giống như việc chúng ta giải toán bằng cách đưa ra các định lý,quy tắc liên quan đến bài toán mà không cần chỉ ra cách giải cụ thể
Vậy thì điểm thú vị nằm ở điểm nào? Có thể cảm thấy rằng ta vẫn đang dùngtri thức “cứng” (vì các tri thức vẫn là các câu lệnh IF được cài sẵn trong chươngtrình) Thực ra thì chương trình của chúng ta đã “mềm” hơn một chút Để rõhơn, ta hãy quan sát phiên bản kế tiếp của chương trình này
FUNCTION DK(L INTEGER): BOOLEAN;
Trang 7CONST SO_LUAT=3;
BEGIN WHILE (x<>z) AND (y<>z) DO BEGIN
không cần phải sửa lại chương trình chính
Bây giờ hãy giả sử rằng ta đã có hàm và thủ tục đặc biệt sau:
FUNCTION GiaTriBool(DK: String): BOOLEAN;
PROCEDURE ThucHien(ThaoTac: String);
Hàm GiaTriBool nhận vào một chuỗi điều kiện, nó sẽ phân tích chuỗi, tính
toán rồi trả ra giá trị BOOLEAN của biểu thức này Ví dụ: GiaTriBoolean(‘6<7’) s4trả ra FALSE
Thủ tục ThucHien cũng nhận vào một chuỗi, cũng sẽ phân tích chuỗi rồi tiến
hành thực hiện những hành động được miêu tả trong chuỗi này
Với hàm và thủ tục này, chương trình của chúng ta sẽ như sau:
CONST SO_LUAT=3;
TYPE Luat RECORD
Trang 8FOR i:=1 TO SO_LUAT DO
IF GiaTriBoolean(CacLuat[i].DK) THEN ThucHien(CacLuat[i].ThaoTac);
END;
END.
Cứ tạm cho rằng, trong quá trình chương trình thi hành, ta có thể dễ dàngthay đổi số phần tử mảng CacLuat (các ngôn ngữ lập trình sau này như Visual C++, Delphi đều cho phép điều này) Và như vậy, với chương trình này, khi muốn
sửa đổi “tri thức”, ta chỉ cần thay đổi giá trị mảng CacLuat là xong.
Tuy nhiên, người sử dụng vẫn gặp khó khăn khi muốn bổ sung hoặc hiệuchỉnh tri thức Họ cần phải nhập các chuỗi đại loại như ‘x=0’ hoặc ‘k=min(Vx-x,y)’… Các chuỗi này vẫn còn khá xa lạ đối với những người dùng bình thường(tuy nó có ý nghĩa đối với chương trình) Chúng ta cần phải giảm bớt “khoảngcách” này lại bằng cách đưa ra những chuỗi điều kiện hoặc thao tác có ý nghĩatrực tiếp đối với người dùng Chương trình sẽ có chuyển đổi lại các điều kiện vàthao tác này sang dạng phù hợp với chương trình
Để làm được điều trên, chúng ta cần phải liệt kê được các trạng thái và thaotác cơ bản của bài toán này Sau đây là một số trạng thái và thao tác cơ bản
- Trạng thái cơ bản: Bình X đầy; Bình X rỗng; Bình X không rỗng; Bình X có
n lít nước
Trang 9DỮ LIỆU
THUẬT TOÁN
ĐỘNG CƠ SUY DIỄN
DỮ LIỆU
CƠ SỞ TRI THỨC
- Thao tác: Đổ hết nước trong bình; Đổ đầy nước trong bình, Đổ nước từbình A sang bình B cho tới khi B đầy hoặc A rỗng
Lưu ý rằng ta không có thao tác “Đổ n lít nước từ A sang B” ví bài toán đã giảđịnh rằng các bình đều không có vạch chia, hơn nữa nếu ta biết cách đổ n lítnước từ A sang B thì lời giải bài toán trở thành quá đơn giản
Ví đây là một bài toán đơn giản nên ta có thể dễ dàng nhận thấy rằng, các trạngthái cơ bản và thao tác chẳng có gì khác so với các điều kiện mà chúng ta đãđưa ra
Kế tiếp, ta sẽ viết các đoạn chương trình cho phép người dùng nhập vào cácluật (dạng nếu… thì…) được hình thành từ các trạng thái và điều kiện cơ bảnnày, và thực hiện chương trình máy tính có thể xử lý được như ở ví dụ trên.Như vậy, so với chương trình truyền thống được cấu tạo từ 2 “chất liệu” cơ bản
là dữ liệu và thuật toán, chương trình trí tuệ nhân tạo được cấu tạo từ 2 thànhphần là cơ sở tri thức (knowledge base) và động cơ suy diễn (inference engine)
- Cơ sở tri thức: là tập hợp các tri thức liên quan đến vấn đề mà chươngtrình quan tâm giải quyết
- Động cơ suy diễn: là phương pháp vận dụng tri thức trong cơ sở tri thức
để giải quyết vấn đề
Nếu xét theo quan niệm biểu diễn tri thức vừa thảo luận ở trên thì:
- Cơ sở tri thức chỉ là một dạng dữ liệu đặc biệt, và
- Động cơ suy diễn chỉ là một dạng của thuật toán đặc biệt mà thôi
Tuy vậy, có thể nói rằng, cơ sở tri thức cùng với động cơ suy diễn là mộtbước tiến hóa mới của dữ liệu và thuật toán của chương trình Ta có thể hình
Trang 10NGƯỜI DÙNG
HỆ THỐNG GIAO TIẾP NGƯỜI DÙNG
HỆ THỐNG THU NHẬN
VÀ TỐI ƯU TRI THỨC
ĐỘNG CƠ SUY DIỄN
CƠ SỞ TRI THỨC
dung động cơ suy diễn giống như một loại động cơ tổng quát được chuẩn hóa
có thể dùng để vận hành nhiều loại xe máy khác nhau và cơ sở tri thức chính làloại nhiên liệu đặc biệt để vận hành loại động cơ này Hình ảnh sau tóm tắt chothấy cấu trúc chung nhất của một chương trình trí tuệ nhân tạo
Cơ sở tri thức cũng gặp phải những vấn đề tương tự như trong cơ sở dữliệu, đó là: sự trùng lắp, thừa, mâu thuẫn Khi xây dựng cơ sở tri thức nhữngyếu tố này cần được chú ý đến Như vậy, bên cạnh vấn đề biểu diễn tri thức, tacòn phải đề ra các phương pháp để loại bỏ những tri thức trùng lắp, thừa hoặcmâu thuẫn Những thao tác này sẽ được thực hiện trong quá trình ghi nhận trithức vào hệ thống và được đề cập đến trong phần tìm hiểu về các luật sinh
2 Khái niệm luật sinh
Phương pháp biểu diễn tri thức bằng luật sinh được phát minh bởi Newell
và Simon trong lúc hai ông đang cố gắng xây dựng một hệ giải bài toán tổngquát Đây là một kiểu biểu diễn tri thức có cấu trúc Ý tưởng cơ bản là tri thức
có thể được cấu trúc bằng một cặp điều kiện – hành động: “NẾU điều kiện xảy
ra THÌ hành động sẽ được thi hành”
Thí dụ:
NẾU đèn giao thông là đỏ THÌ bạn không được đi thẳng
NẾU máy tính đã mở mà không khởi động được THÌ kiểm tra nguồn điện.
Trang 11Hiện nay, các luật sinh đã trở nên phổ biến và được áp dụng rỗng rãi trongnhiều hệ thống trí tuệ nhân tạo khác nhau Luật sinh có thể là công cụ mô tả đểgiải quyết vấn đề thực tế thay cho các kiểu phân tích vấn đề truyền thống.Trong trường hợp này, các luật được dùng như là các chỉ dẫn (tuy có thể khônghoàn chỉnh) nhưng rất hữu ích để trợ giúp cho các quyết định trong quá trìnhtìm kiếm, từ đó làm giảm không gian tìm kiếm Một ví dụ khác là luật sinh cóthể được dùng để bắt chước hành vi của những chuyên gia Theo cách này, luậtsinh không chỉ đơn thuần là một kiểu biểu diễn tri thức trong máy tính mà làmột kiểu biểu diễn các hành vi của con người.
Như vậy, luật là cấu trúc tri thức dùng để liên kết thông tin đã biết với cácthông tin khác giúp đưa ra các suy luận, kết luận từ những thông tin đã biết.trong hệ thống dựa trên các luật, người ta thu thập các tri thức lĩnh vực của cácchuyên gia và lưu trữ trong cơ sở tri thức Hệ thống dùng các luật này cùng vớicác thông tin trong bộ nhớ để giải bài toán Việc sử dụng các luật trong hệthống để xử lý thông tin được quản lý bằng bộ suy diễn
Một cách tổng quát, luật sinh có dạng như sau:
P 1 ^P 2 ^…^P n Q
Tùy vào các vấn đề đang quan tâm mà luật sinh có những ngữ nghĩa hay cấutạo khác nhau:
- Trong logic vị từ: P1^P2^…^Pn , Q là những biểu thức logic
- Trong ngôn ngữ lập trình, mỗi một luật sinh là một câu lệnh
IF (P 1 AND P 2 AND … AND P n ) THEN Q.
Để biểu diễn một tập luật sinh, thường phải chỉ rõ 2 thành phần chính sau:
(1) Tập các sự kiện F (Facts)
F={f1,f2,…,fi}
(2) Tập các quy tắc R (Rules) áp dụng trên các sự kiện dạng như sau:
f1^f2^…^fi q
Trong đó, các fi, q đều thuộc F
Ví dụ: Cho một cơ sở tri thức được xác định như sau:
+ Các sự kiện: A,B,C,D,E,F,G,H,K + Tập các quy tắc hay luật sinh (rule)
R1: A E R2: B D R3: H A
Trang 12R4: E^G C R5: E^K B R6: D^E^K C R7: G^K^F A
3 Cơ chế suy luận trên các luật sinh
Suy diễn tiến: là quá trình suy luận xuất phát từ một số sự kiện ban đầu, xácđịnh các sự kiện có thể được “sinh” ra từ các sự kiện này
Sự kiện ban đầu: H,K
Ví dụ:
Tập các sự kiện:
+ Ổ cứng là “hỏng” hay “hoạt động bình thường”
+ Hỏng màn hình+ Lỏng cáp màn hình+ Tình trạng đèn ổ cứng là “tắt” hoặc “sáng”
+ Có âm thanh đọc ổ cứng+ Tình trạng đèn màn hình “xanh” hoặc “chớp đỏ”
+ Không sử dụng được máy tính+ Điện vào máy tính “có” hay “không”
Trang 13Không sử dụng được máy tính
Trang 144 Tối ưu luật
Tập các luật trong một cơ sở tri thức rất có khả năng thừa, trùng lắp hoặcmâu thuẫn Dĩ nhiên là hệ thống có thể đổ lỗi cho người dùng về việc đưa vào
hệ thống những tri thức như vậy Tuy việc tối ưu một cơ sở tri thức về mặt tổngquát là một thao tác khó ví giữa các tri thức thường có quan hệ không tườngminh, nhưng trong giới hạn cơ sở tri thức dưới dạng luật, ta vẫn có một sốthuật toán đơn giản để loại bỏ vấn đề này
Rút gọn bên phải
Luật sau hiển nhiên đúng: A ^ B A (1)
Do đó luật: A ^ B A ^ C
Là hoàn toàn tương đương với: A ^ B C
Quy tắc rút gọn: có thể loại bỏ những sự kiện bên vế phải nếu những sự
kiện đó đã xuất hiện bên vế trái Nếu sau khi rút gọn mà vế phải trở thànhrỗng thì luật đó là luật hiển nhiên Ta có thể loại bỏ các luật hiển nhiên rakhỏi tri thức
Phân rã và kết hợp luật
Luật: A v B C
Tương đương với hai luật: A C và B C
Với quy tắc này, ta có thể loại bỏ hoàn toàn các luật có phép nối HOẶC.Các luật có phép nối này thường làm cho thao tác xử lý trở nên phức tạp
Luật thừa
Một luật dẫn A B được gọi là thừa nếu có thể suy ra luật này từ nhữngluật còn lại
Ví dụ: Trong tập các luật {A B, B C, A C} thì luật thứ 3 là luật thừa
vì nó có thể được suy ra từ 2 luật kia
Trang 15Thuật toán tối ưu tập luật dẫn
Thuật toán này sẽ tối ưu hóa tập luật đã cho bằng cách loại đi các luật cóphép nối HOẶC, các luật hiển nhiên hoặc các luật thừa
Thuật toán bao gồm các bước chính:
Bước 1: Rút gọn vế phảiVới mỗi luật r trong R
Với mỗi sự kiện A thuộc VếPhải(r)
Nếu A thuộc VếTrái(r) thì loại A ra khỏi vế phải của R.Nếu VếPhải(r) rỗng thì loại bỏ r ra khỏi hệ luật dẫn: R=R-{r}Bước 2: Phân rã các luật
Với mỗi luật r: X1 v X2 v … v Xn Y trong R
Với mỗi i từ 1 đến n: R:=R+{Xi –Y}
R:=R-{r}
Bước 3: Loại bỏ luật thừaVới mỗi luật r thuộc RNếu VếPhải(r) thuộc BaoĐóng(VếTrái(r),R-{r}) thì R:=R-{r}
Bước 4: Rút gọn vế tráiVới mỗi luật dẫn r: X={A1,A2,…,An} Y thuộc R
Với mỗi sự kiện Ai thuộc r
Gọi luật r1: X-Ai YS=(R-{r}) U {r1}Nếu BaoĐóng(X-Ai,S) trùng với BaoĐóng(X,R)Thì loại sự kiện A ra khỏi X
5 Ưu điểm và nhược điểm của biểu diễn tri thức bằng luật sinh
Ưu điểm
Biểu diễn tri thức bằng luật đặc biệt hữu hiệu trong những tình huống hệthống cần đưa ra những hành động dựa vào những sự kiện có thể quan sátđược Nó có những ưu điểm chính sau đây:
- Các luật rất dễ hiểu nên có thể dễ dàng dùng để trao đổi với người dùng(vì nó là một trong những dạng tự nhiên của ngôn ngữ)
- Có thể dễ dàng xây dựng được cơ chế suy luận và giải thích từ các luật
- Việc hiệu chỉnh và bảo trì hệ thống là tương đối dễ dàng
- Có thể cải tiến dễ dàng để tích hợp các luật mờ
- Các luật thường ít phụ thuộc vào nhau