a ^ ~b ^ c => d If Màn hình không lên hình And công tắt màn hình không sáng And cắm lại dây điện màn hình, màn hình lên hình Then Dây điện màn hình bị lỏng.. a ^ ~b ^ ~c ^ e => f If Màn
Trang 1Page 1 of 20
Phương pháp biểu diễn tri thức
và ứng dụng
Suy diễn lùi - Ứng dụng trong chuẩn đoán sự cố máy vi tính
Giảng viên: PGS.TS Đỗ Văn Nhơn
2013
Trần Nguyên Phong MSHV: CH1101028
Trang 3Mục Lục
Trang
I. Đặt vấn đề 2
II. Cơ sở lý thuyết 2
1. Định nghĩa suy diễn lùi 2
2. Cơ chế suy diễn lùi 2
3. Ưu điểm suy diễn lùi 3
4. Nhược điểm suy diễn lùi 3
III. Nội dung bài toán 3
IV. Xây dựng một cơ sở tri thức 4
1. Tập nút 4
2. Tập luật và giải thích 7
3. Thuật toán 11
4. Tổ chức chương trình 14
V. Thực thi chương trình 16
VI. Tham khảo 18
I. Đặt vấn đề
Trong thời đại công nghệ thông tin hiện nay, máy vi tính trở thành công cụ hỗ trợ đắc lực cho con người Máy vi tính đã góp phần giúp con người giải quyết công việc một cách nhanh chóng hơn bởi các chức năng: lưu trữ, tính toán, xử lý dữ liệu Khi máy tính gặp sự
cố có thể gây chậm trể công việc, ảnh hưởng đến hiệu suất làm việc Do đó, yêu cầu xử lý
Trang 4sự cố máy vi tính đã trở nên cấp thiết Dựa trên kiến thức cơ bản về biểu diễn tri thức, phạm
vi tiểu luận này sẽ trình bày ứng dụng của biểu diễn tri thức cho việc chuẩn đoán cơ bản các
sự cố của máy vi tính
II. Cơ sở lý thuyết
1.Định nghĩa Suy diễn lùi
Suy diễn lùi là chiến lược suy diễn để chứng minh một giả thiết bằng cách thu thập thông tin hỗ trợ
2. Cơ chế Suy diễn lùi
Hệ thống Suy diễn lùi bắt đầu từ đích (kết luận) cần chứng minh
Trước hết nó kiểm tra trong bộ nhớ làm việc để xem đích này đã được bổ sung trước đó chưa Bước này cần thiết vì cơ sở tri thức khác có thể đã chứng minh đích này
Nếu đích chưa được chứng minh, nó tìm các luật có phần THEN chứa đích Các luật này được gọi là đích
Hệ thống xem phần giả thuyết của các luật đích này có trong bộ nhớ làm việc hay không Các giả thuyết không được liệt kê trong bộ nhớ gọi là các đích mới, các đích mới này cần được giải nhờ các luật khác
Quá trình này tiếp tục đệ quy theo cơ chế tìm theo chiều sâu cho đến khi tìm thấy một giả thiết không do luật nào cung cấp Đó là nút tận cùng
Khi thấy nút tận cùng, hệ thống dùng các thông tin này để giải đích con và đích ban đầu
3. Ưu điểm của Suy diễn lùi
* Ưu điểm chính của Suy diễn lùi là phù hợp với bài toán đưa ra giả thiết rồi xem giả thiết đó có đúng không
* Suy diễn lùi tập trung vào đích đã cho Nó tạo ra một loạt các câu hỏi chỉ
Trang 5* Khi suy diễn lùi muốn suy diễn cái gì đó từ các thông tin đã biết, nó chỉ tìm trên một phần của cơ sở tri thức thích đáng đối với bài toán đang xét
* Suy diễn lùi được đánh giá cao trong các bài toán giải quyết nhiệm vụ như
là chuẩn đoán, dự đoán, tìm lỗi
4. Nhược điểm Suy diễn lùi
* Nhược điểm cơ bản của Suy diễn lùi là nó thường tiếp theo dòng suy diễn, thay vì đúng ra phải dừng ở đó mà sang nhánh khác
* Tuy nhiên có thể khắc phục nhược điểm này bằng cách dùng nhân tố tin cậy
và các luật meta
III Nội dung bài toán
Sẽ có 2 file là Nut và Luat với cách tổ chức như sau
- File luật được lưu dưới dạng text: sẽ được viết lại dưới dạng mệnh đề toán học
- File nút lưu dưới dạng XML: chứa các sự cố máy tính mà ta quan sát được cũng như những kết luận về sự cố máy tính
<Nut>
<doi_tuong name="Dây điện">
<Benh id="d">bị lỏng</Benh>
<Benh id="f">bị hư</Benh>
</doi_tuong>
<doi_tuong name="Công tắc màn hình">
<Benh id="b">sáng</Benh>
</doi_tuong>
</Nut>
Khi chạy chương trình, người dùng sẽ phải trả lời những câu hỏi mà chương trình đưa ra bằng cách sẽ trả lời
Trang 6Có: 1 Không: 0
Và chương trình sẽ đưa ra kết luận có kèm theo lời giải thích cho những vấn
đề mà người dùng yêu cầu
IV Xây dựng một cơ sở tri thức
1. Tập nút
• Về mặt từ ngữ
TẬP NÚT
a. Màn hình không lên hình
b. Công tắt màn hình sáng
c. Cắm lại dây điện màn hình, màn hình sáng
d. Dây điện bị lỏng
e. Thay dây điện mới, màn hình sáng
f. Dây điện lỏng
g. Màn hình bị hư
h. Cắm lại dây nguồn, màn hình sáng
i. Dây nguồn bị lỏng
j. Thay dây nguồn mới, màn hình sáng
k. Dây nguồn CPU bị hư
l. Cắm lại sợi cáp nối màn hình với CPU, màn hình sáng
m. Sợi cáp nối màn hình với CPU bị lỏng
n. Thay sợi cáp nối màn hình với CPU
o. Sợi cáp nối màn hình với CPU bị hư
p. CPU phát tiếng bíp
q. Con chíp bị hư
r. Cắm lại Ram/Card màn hình màn hình sáng
s. Ram/Card màn hình bị lỏng
t. Thay Ram/Card màn hình màn hình sáng
u. Ram/Card màn hình bị hư
v. Main bị hư
w. Máy tự động restart
x. CPU bị nóng
y. Quạt CPU bị hư
z. Cài lại win máy hoạt động tốt
aa.Hệ điều hành bị lỗi
ab.Thay Ram, máy hoạt động tốt
Trang 7ac. Ram bị hư
ad.Cổng USB không nhận
ae.Có cài chức năng nhận USB cho máy
af. Cắm lại sợi cáp nối Main với cổng USB, máy nhận USB
ag.Cáp nối Main với cổng USB bị lỏng
ah.Cáp nối Main với cổng USB bị hư
ai. Bàn phím lúc gõ được, lúc không gõ được
aj. Cắm lại cổng bàn phím, bàn phím hoạt động tốt
ak.Cổng bàn phím bị lỏng
al. Thay cổng bàn phím mới, bàn phím hoạt động tốt
am. Cổng bàn phím bị hư
an.Bàn phím bị hư
ao.Chuột không di chuyển theo ý muốn
ap.Máy bị treo
aq.Cắm lại cổng PS2, chuột di chuyển tốt
ar. Cổng PS2 bị lỏng
as. Thay chuột mới, chuột di chuyển tốt
at. Chuột bị hư
au.Cổng PS2 bị hư
av.Không đọc được đĩa
aw.Đĩa không cùng loại ổ đĩa
ax.Thay đĩa mới, đọc được
ay.Đĩa bị hư
az.Ổ đĩa bị hư
• Về mặt cấu trúc dữ liệu:
sáng
Màn hình không sáng
??
Trong đó:
• Stt: biến thuộc kiểu nguyên dương Lưu chỉ số thứ tự của nút
• Tên: thuộc kiểu string Lưu tên của nút (a, b, c, ~a, ~b ….)
• Ý nghĩa: thuộc kiểu string Lưu ý nghĩa của nút
Trang 8• Câu hỏi: thuộc kiểu string Lưu câu hỏi để khi suy diễn buộc phải đặt câu hỏi để lấy giá trị của nút thì lấy câu hỏi ra để đặt với người sử dụng
• Loại nút: biến thuộc kiểu nguyên dương Bao gồm {1,2,3} xác định nút thuộc kiểu nào: nút kết luận, nút trung gian hay nút giả thiết
• Giá trị: biến thuộc kiểu nguyên Bao gồm 3 giá trị
o 1: có giá trị True
o 0: có giá trị false
o -1: biến chưa khởi tạo giá trị
Lưu ý khi nhập giá trị cho 1 nút thì nút phủ định của nó cũng nhận được giá trị tương ứng Vì tập nút ở đây bao gồm nút và nút phủ định của nút đó
2. Tập luật và giải thích:
• Về mặt từ ngữ
1. a ^ ~b ^ c => d
If (Màn hình không lên hình And công tắt màn hình không sáng And cắm lại dây điện màn hình, màn hình lên hình) Then (Dây điện màn hình bị lỏng)
2. a ^ ~b ^ ~c ^ e => f
If (Màn hình không lên hình And công tắt màn hình không sáng And cắm lại dây điện màn hình, màn hình không lên And thay dây điện màn hình khác, màn hình lên hình) Then (dây điện màn hình bị hư)
3. a ^ ~b ^ ~c ^ ~e => g
If (Màn hình không lên hình And công tắt màn hình không sáng And dây điện màn hình không bị lỏng And thay dây điện màn hình khác, màn hình không lên hình) Then (màn hình bị hư)
4. a ^ b ^ h => i
If (Màn hình không lên hình And Công tắt màn hình sáng And cắm lại dây nguồn CPU, màn hình lên hình) Then (Dây nguồn CPU bị lỏng)
5. a ^ b ^ ~h ^ j => k
Trang 9If (Màn hình không lên hình And Công tắt màn hình sáng cắm lại dây nguồn CPU, màn hình không lên hình And thay dây nguồn CPU mới, màn hình lên hình) Then (dây nguồn CPU bị hư)
6. a ^ b ^ l => m
If (Màn hình không lên hình And Công tắt màn hình sáng And cắm lại sợi cáp nối màn hình với CPU, màn hình lên hình) Then (sợi cáp nối màn hình với CPU
bị lỏng)
7. a ^ b ^ ~l ^ n => o
If (Màn hình không lên hình And Công tắt màn hình sáng And cắm lại sợi cáp nối màn hình với CPU, màn hình không lên hình And Thay sợi cáp khác, màn hình lên) Then (sợi cáp nối màn hình với CPU bị hư)
8. a ^ b ^ ~l ^ ~n ^ ~p => q
If (Màn hình không lên hình And Công tắt màn hình sáng And sợi cáp nối màn hình với CPU không bị lỏng And Thay sợi cáp khác, màn hình không lên And CPU không có phát ra tiếng “bip”) Then (con chíp bị hư)
9. a ^ b ^ p ^ r => s
If (Màn hình không lên hình And Công tắt màn hình sáng And CPU có phát ra tiếng “bip” And cắm lại Ram/card màn hình, màn hình lên) Then (Ram/card màn hình bị lỏng)
10. a ^ b ^ p ^ ~r ^ t => u
If (Màn hình không lên hình And Công tắt màn hình sáng And CPU có phát ra tiếng “bip” And cắm lại Ram/card màn hình, màn hình không lên And thay Ram/card màn hình mới, màn hình lên) Then (Ram/card màn hình bị hư)
11. a ^ b ^ p ^ ~r ^ ~t=> v
If (Màn hình không lên hình And Công tắt màn hình sáng And CPU có phát ra tiếng “bip” And cắm lại Ram/card màn hình, màn hình không lên And thay Ram/card màn hình mới, màn hình không lên) Then (Main bị hư)
Trang 1012. w ^ x => y
If (máy tự động restart And CPU bị nóng) Then (Quạt CPU bị hư)
13. w ^ ~x ^ z => aa
If (máy tự động restart And CPU không bị nóng And cài lại Win máy hết restart) Then (hệ điều hành bị lỗi)
14. w ^ ~x ^ bb => cc
If (máy tự động restart And CPU không bị nóng And thay Ram máy hết Restart) Then (Ram bị hư)
15. w ^ ~x ^ ~bb => v
If (máy tự động restart And CPU không bị nóng And cài lại Win máy vẫn restart And thay Ram máy vẫn Restart) Then (Main bị hư)
16. dd ^ ~ee => aa
If (Cổng USB không hoạt động được And không cài chức năng nhận USB cho máy) Then (lỗi khi cài hệ điều hành)
17. dd ^ ee ^ ff => gg
If (Cổng USB không hoạt động được And có cài chức năng nhận USB cho máy And cắm lại sợi cáp nối từ Main ra cổng USB, cổng USB nhận) Then ( sợi cáp nối từ Main ra cổng USB bị lỏng)
18.dd ^ ee ^ ~ff => hh
If (Cổng USB không hoạt động được And có cài chức năng nhận USB cho máy And cắm lại sợi cáp nối từ Main ra cổng USB, cổng USB không nhận) Then (cáp nối
từ Main ra cổng USB hư)
19.ii ^ jj => kk
If (bàn phím lúc gõ được, lúc không được And cắm lại cổng bàn phím hoạt động bình thường) Then (cổng bàn phím bị lỏng)
20.ii ^ ~jj ^ ll=> mm
Trang 11If (bàn phím lúc gõ được, lúc không được And cắm lại cổng bàn phím vẫn không hoạt động bình thường And thay cổng bàn phím mới, bàn phím hoạt động) Then (cổng bàn phím bị hư)
21. ii ^ ~jj ^ ~ll=> nn
If (bàn phím lúc gõ được, lúc không được And cắm lại cổng bàn phím vẫn không hoạt động bình thường And thay bàn phím mới, bàn phím vẫn không hoạt động tốt) Then (bàn phím bị hư)
22.oo ^ pp => aa
If (con chuột không di chuyển theo ý muốn And Hệ điều hành bị treo) Then (Lỗi do
hệ điều hành)
23. oo ^ ~pp ^ qq => rr
If (con chuột không di chuyển theo ý muốn And Hệ điều hành không bị treo And cắm lại cổng PS2, chuột hoạt động tốt) Then (Cổng PS2 bị lỏng)
24.oo ^ ~pp ^ ss => tt
If (con chuột không di chuyển theo ý muốn And Hệ điều hành không bị treo And thay chuột mới, chuột hoạt động tốt) Then (Chuột bị hư)
25.oo ^ ~pp ^ ~qq ^ ~ss => uu
If (con chuột không di chuyển theo ý muốn And Hệ điều hành không bị treo And thay chuột mới, chuột vẫn không hoạt động tốt And cắm lại cổng PS2, chuột không hoạt động tốt) Then (Cổng PS2 bị hư)
26.vv ^ ww => wa
If (không đọc được đĩa And Đĩa không cùng loại với ổ đĩa) Then (Đĩa và ổ đĩa không tương thích nhau)
27.vv ^ ~ww ^ xx => yy
If (không đọc được đĩa And Đĩa cùng loại với ổ đĩa And thay đĩa mới, đọc được đĩa) Then (Đĩa bị hư)
28.vv ^ ~ww ^ ~xx => zz
Trang 12If (không đọc được đĩa And Đĩa cùng loại với ổ đĩa And thay đĩa mới, không đọc được đĩa) Then (ổ đĩa bị hư)
• Về mặt cấu trúc dữ liệu:
Trong đó:
• Stt: biến thuộc kiểu nguyên dương Lưu chỉ số thứ tự của luật
• Vế trái: mảng string Lưu các nút nằm bên vế trái
• Vế phải: mảng string Lưu các nút nằm bên vế phải
3. Thuật toán:
*** Thuật toán tách vế:
Input: tập luật
Output: tách các nút nằm ở vế trái, vế phải
Duyệt qua tập luật
Ở mỗi luật duyệt từ trái sang, chỉ lấy các phần từ là ký hiệu các nút
Nếu chưa gặp dấu phân cách giữa 2 vế (“ > ”) thì thêm các nút vào vế trái
Ngược lại, thêm các nút vào vế phải
Hết tập luật
*** Thuật toán phân loại nút
Input : Tên nút
Output: Loại nút
Với DOM (loại nút)={1,2,3}={Nút kết luận, nút trung gian, nút tận cùng}
Tập nút kết luận = Vế phải \ Vế trái (các nút chỉ có trong vế phải)
Tập nút trung gian = Vế trái ∩ Vế phải (các nút nằm ở vế trái và vế phải)
Tập nút giả thiết = Vế trái \ Vế phải (các nút chỉ nằm ở vế trái)
Trang 13• Tạo tập kết luận:
Duyệt tập nút ở vế phải
Duyệt tập nút ở vế trái
Nếu nút ở vế trái có trong vế phải, dừng duyệt nút vế trái và ghi nhận nút vế phải đó nằm trong vế trái
Hết tập nút ở vế trái
Nếu nút đó không được ghi nhận trong vế phải thì thêm nút đó vào tập kết luận
Hết tập nút ở vế phải
• Tạo tập trung gian:
Duyệt tập nút ở vế phải
Duyệt tập nút ở vế trái
Nếu nút ở vế trái có trong vế phải, dừng duyệt nút vế trái và ghi nhận nút vế phải đó nằm trong vế trái
Hết tập nút ở vế trái
Nếu nút đó ghi nhận nằm trong vế phải thì thêm nút đó vào tập trung gian
Hết tập nút ở vế phải
• Tạo tập giả thiết:
Duyệt tập nút ở vế trái
Duyệt tập nút ở vế phải
Nếu nút ở vế trái có trong vế phải, dừng duyệt nút vế phải và ghi nhận nút vế phải đó nằm trong vế phải
Hết tập nút ở vế phải
Nếu nút đó không được ghi nhận trong vế phải thì thêm nút đó vào tập giả thiết
Hết tập nút ở vế trái
*** Thuật toán suy diễn lùi với cơ chế giải thích Why và How
Trang 14Output: Một kết luận đúng hoặc xuất ra “không giải đáp được”
Đọc tập nút
Đọc tập luật
Áp dụng thuật toán phân loại nút để phân thành tập kết luận, tập trung gian, tập giả thiết
Khai báo loại nút cho từng nút DOM={1,2,3}={nút kết luận, nút trung gian, nút giả thiết}
Phục vụ cho giải thích của cơ chế Why bao gồm 2 stack : stack_why1 và stack_why2 Phục vụ cho giải thích của cơ chế How bao gồm 1 stack : stack_how
** Suy diễn lùi với cơ chế giải thích Why và How với tham số truyền vào là số thứ tự của luật
Tìm giá trị luật đang xét tương ứng với số thứ tự của luật;
Nếu giá trị luật đang xét = 1
Xuất ra kết luận đúng Chấm dứt chuỗi suy diễn Nếu có kết luận = 0
Xuất ra “Không giải đáp được”
** Thủ tục tìm giá trị nút
Giá trị luật = 1
Push (stack_why1, số thứ tự của nút kết luận đang xét)
Push (stack_why2, số thứ tự của nút kết luận đang xét)
Lấy ra vế trái của luật đó
Lặp lại khi hết các nút trong vế trái của luật
Nếu 1 nút đã có giá trị : giá trị luật = giá trị luật AND giá trị nút
Ngược lại
Trường hợp: loại nút = 2 // nút trung gian
Trang 15Tìm giá trị luật; (với nút đang xét là nút kết luận của luật)
Trường hợp: loại nút = 3 // nút giả thiết
Yêu cầu nhập dữ liệu cho nút Giá trị luật = giá trị luật AND giá trị nút Nếu giá trị luật = 0, dừng việc duyệt các nút trong vế trái của luật
Hết các nút trong vế trái của Luật
Giá trị các nút vế phải của luật = giá trị luật
Nếu giá trị của nút đang xét = 1
Push(stack_how, số thứ tự của nút kết luận đang xét)
*Cơ chế giải thích Why:
Lặp lại đến khi stack_why1 rỗng
Pop(stack_why1,int biến số thứ tự)
Nối chuỗi các luật có nút kết luận mang số thứ tự là biến stt
Hết stack_why1
Xuất chuỗi các luật để trả lời
Sau khi giải thích xong:
Stack_why1 = Stack_why2
*Cơ chế giải thích How:
Lặp đến khi stack_how rỗng
Pop (stack_how, int biến stt)
Nối chuỗi các luật có nút kết luật mang số thứ tự là biến stt
Hết stack_how
Xuất chuỗi các luật để trả lời
4 Tổ chức chương trình:
Vì có nhu cầu cho người dùng nhập tình trạng vào Sau đó chương trình mới tiến hành suy diễn dựa trên các tình trạng máy của người dùng Do đó, chương