báo cáo bài tập lớn hệ chuyên gia đề tài tư vấn tử vi
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
Trang 3
Hà Nội, ngày tháng năm 2013 Giảng viên
Th.S Trần Thanh Hùng
Trang 4MỤC LỤC
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 2
MỤC LỤC 3
Giới thiệu sơ lược nội dung sẽ trình bày: 3
LỜI NÓI ĐẦU 4
BẢNG PHÂN CÔNG CÔNG VIỆC TRONG NHÓM 5
NỘI DUNG CHI TIẾT ĐỀ TÀI 6
I GIỚI THIỆU ĐỀ TÀI VÀ GIAI ĐOẠN THU THẬP TRI THỨC CHUYÊN GIA 6 1) Trình bày tên đề tài và mục đích đề tài 7
Tên của đề tài: 7
Mục đích đề tài: 7
Các yêu cầu xây dựng: 7
2) Phát biểu bài toán 7
a) Định nghĩa các “Số con người” 8
3) Xây dựng cơ sở tri thức 9
a) Quy ước 9
b) Sơ đồ suy diễn và các luật 11
II PHÂN TÍCH BÀI TOÁN 12
1) Mô tả bài toán 12
2) Hướng giải quyết 12
3) Cấu trúc dữ liệu 13
a) Biểu diễn các sự kiện 13
b) Biểu diễn các luật 14
c) Biểu diễn danh sách các sự kiện 15
d) Biểu diễn danh sách các luật 16
4) Thuật toán 16
III THIẾT KẾ CHƯƠNG TRÌNH DEMO 19
1) Ngôn ngữ và các công cụ 19
2) Cài đặt 20
3) Một số giao diện chính và kết quả chạy chương trình 20
4) Đánh giá và hướng phát triển 24
Hướng phát triển của đề tài: 25
MỘT SỐ TÀI LIỆU THAM KHẢO 26
LỜI KẾT 27
Giới thiệu sơ lược nội dung sẽ trình bày:
Trang 5Cấu trúc đề tài gồm 3 mục chính được đánh số I đến III, đi từ việc giớithiệu đề tài và mục đích đề tài đến hướng giải quyết chính và cuối cùng là chitiết cài đặt chương trình Demo của nhóm.
Ngoài ra phần đầu đề tài là “giới thiệu sơ lược nội dung đề tài” và phần cuối là “Một số tài liệu tham khảo” được nhóm sử dụng.
Một nội dung quan trong của đề tài là phần thuật toán sử dụng và chi tiếtcài đặt thuật toán của nhóm
Đề tài với mục đích demo là chính giúp chúng ta hiểu được vai trò quantrọng của việc xây dựng các hệ chuyên gia, và công dụng hữu ích của chúngcho con người, hiểu được các bước cơ bản để hiện thực hóa một hệ chuyên gia
Sau đây là nội dung chi tiết của đề tài, mọi ý kiến đóng góp xin gửi vềnhóm thực hiện Nhóm 8 Lớp KHMT1 - K5 Trường ĐH Công Nghiệp Hà Nội
LỜI NÓI ĐẦU
Trang 6Ngày nay, công nghệ thông tin là lĩnh vực không thể thiếu trong đời sốngcon người Hầu như trong mọi ngành, mọi lĩnh vực công nghệ thông tin đều cómặt Các sản phẩm phần mền tạo ra đã phục vụ và đem lại không ít lợi ích vềmặt kinh tế như các phần mền quản lý, thương mại điện tử, các dịch vụ mạngtruyền thống v.v… Đặc biệt các sản phẩm của công nghệ thông tin ngày naycòn đóng vai trò như một chuyên gia trong mọi lĩnh vực, nó đã giải quyết đượcrất nhiều vấn đề thường ngày mà người bình thường không thể làm được Các
hệ chuyên gia này chẩn đoán hay đưa ra các quyết định từ tập các giả thiết đầuvào
Trong cuộc sống hằng ngày, có rất nhiều người muốn biết trước số mìnhsau này sướng hay khổ, giàu hay nghèo hoặc một số người dùng bói toán đểgiảm stress Cho nên yêu cầu của con người chúng ta cần có một hệ chuyêngia giúp họ dự đoán tương lai của mình như thế nào
Cũng xuất phát từ yêu cầu đó, chúng tôi chọn đề tài “Tư Vấn Tử Vi”.
Mọi sự đóng góp ý kiến xin liên hệ nhóm 8, lớp KHMT1 - K5, trường
ĐH Công Nghiệp Hà Nội
Nhóm SV thực hiện: Nhóm 8 lớp KHMT1 - K5
Đào Ngọc Luân Phùng Minh Tuân
Vũ Hoàng Tuấn
Hà Nội, ngày 23 tháng 8 năm 2013
Trang 7BẢNG PHÂN CÔNG CÔNG VIỆC TRONG
NHÓM
STT Họ và tên Công việc Thời gian Tiến độ
1 Đào Ngọc Luân I đến III 07/2013 100%
2 Phùng Minh Tuân I đến III 07/2013 100%
3 Vũ Hoàng Tuấn I đến III 07/2013 100%
Trong thời gian thực hiện đề tài, nhóm đã họp mặt nhiều lần để bàn luận
và góp ý lẫn nhau giúp hoàn thiện đề tài Các cuộc họp của nhóm xoay quanhcác mục đích nghiên cứu của đề tài và bàn luận về phương pháp từ việc thu thậptài liệu đến việc nên lấy phần nào của tài liệu đưa vào bài… Chúng em xin trânthành cảm ơn sự giúp đỡ nhiệt tình từ phía các thầy cô giáo khoa Công NghệThông Tin trường ĐH Công Nghiệp Hà Nội đã giúp đỡ chúng em trong việccung cấp tài liệu và hướng dẫn đọc hiểu tài liệu và gỡ bỏ những vướng mắc gặpphải Chúng em cũng xin trân thành cảm ơn thầy Trần Thanh Hùng đã tận tìnhchỉ bảo, giúp đỡ chúng em để chúng em không đi sai hướng và hoàn thành tốt
đề tài
Hoạt động của nhóm theo hướng tất cả các thành viên cùng nghiên cứuchung các vấn đề khó, khi có vướng mắc hay phát hiện điều mới thì cùng nhautranh luận để tìm ra hướng giải quyết thích hợp
Kết quả nhận được sau các cuộc họp của nhóm là sự thành công trongcông việc của nhóm Nhóm đã hoàn thiện việc xây dựng mục đích đề tài, đềcương vắn tắt các nội dung cần triển khai và bàn giao công việc cụ thể cho cácthành viên Bằng sự lỗ lực thật sự của bản thân các thành viên trong nhóm cuốicùng nhóm đã hoàn thiện đề tài tốt đẹp
Trang 8NỘI DUNG CHI TIẾT ĐỀ TÀI
I GIỚI THIỆU ĐỀ TÀI VÀ GIAI ĐOẠN THU THẬP TRI
THỨC CHUYÊN GIA
1) Trình bày tên đề tài và mục đích đề tài
Tên của đề tài:
Xây dựng demo shệ chuyên gia Tư vấn tử vi
Mục đích đề tài:
Hệ chuyên gia xây dựng được phải có khả năng dự đoán tương lai củamột người nào đo
Các yêu cầu xây dựng:
Cần dự đoán tương lại và hiện tại một cách chuẩn xác , giải thích rõ ràng,giao diện cần có tính hướng người sử dụng …
2) Phát biểu bài toán
Bài toán là một hệ chuyên gia được xây dựng nhằm dự đoán tương laicủa người sử dụng nó hoặc nó có thể giúp con người phần nào giảm đi áp lựckhi gặp một vấn đề khó giải quyết nào đó Với mong muốn một phần nào đó cóthể tư vấn cho người sử dụng hệ thống biết tương lai mình như thế nào, số mìnhsướng hay khổ… , chương trình có thể đưa ra các lời khuyên hoặc nhận xét vềcon người bạn Người sử dụng chỉ cần trả lời đúng hoặc sai các câu hỏi về nhận
Trang 9dạng, hoặc dấu vết trên người của mình trên hệ thống và từ đó hệ thống sẽ đưa
ra các nhận xét hoặc lời khuyên cho người dùng
Ví dụ: người dùng sẽ nhận được câu dự đoán là “số bạn xung túc”
nếu tất cả các đặc điểm sau: dáng vóc cao, nốt ruồi ở mặt, bàn tay dài,trán cao,
trán rộng đều được người dùng cung cấp là “True” (Đúng).
Để làm được các yêu cầu trên thì hệ thống cần có một cơ sở trithức về các triệu chứng (hay các sự kiện cụ thể được thu thập từ người dùng),các luật suy diễn cụ thể cho tử vi dựa trên các đặc điểm về hình dáng được cungcấp Với tính chất demo là chính nhóm chúng em xây dựng hệ chuyên gia để dự
đoán 9 loại “số” con người khác nhau mà khi các thầy bói thường hay phán là :
“số đào hoa”, số phát đạt”, sô sung túc”, “số lận đận”, số bình an”, số nghèo khổ”, “số thọ lâu”, số phú quý”, “bệnh thủy đậu” Tương ứng với các “số” đó
thì có các đặc điểm về hình dáng con người tương ứng
Sau đây sẽ là định nghĩa chi tiết về các “số của con người”, các đặc điểmhình dáng của con người hay gặp và các nhận xét mà chương trình đưa ra
a) Định nghĩa các “Số con người”
- Một người có thể được gọi là “Số sung túc” khi người đó có
những đặc điểm hình dáng như: “dáng vóc cao”, “nốt ruồi ở
mặt”, “Bàn tay dài”, “trán cao”, “trán rộng”.
- Một người có thể được gọi là “Số đào hoa” khi người đó có
những đặc điểm hình dáng như: “dáng vóc cao”, “nốt ruồi ở
mặt”, “nốt ruồi ở tay”, “bàn tay vuông”, “bàn tay ít đường chỉ”.
Trang 10- Một người có thể được gọi là “Số nghèo khổ” khi người đó có
những đặc điểm hình dáng như: “có mạt trái xoan”, “gò má
cao”, “bàn tay ngắn” , “bàn tay vuông”
- Một người có thể được gọi là “Số lận đận” khi người đó có
những đặc điểm hình dáng như: Có mặt trái xoan”, “gò má
thấp”, “trán cao”, “trán rộng”.
- Một người có thể được gọi là “Số thọ” khi người đó có những
đặc điểm hình dáng như: “dáng vóc cao”, “nốt ruồi ở mặt”,
“nốt ruồi ở chân”, “cổ tròn”,“gò má cao””.
- Một người có thể được gọi là “Số bình an” khi người đó có
những đặc điểm hình dáng như: “Dáng vóc cao”, “nốt ruồi ở
tay”, “bàn tay vuông”.
- Một người có thể được gọi là “Số tài giỏi” khi người đó có
những đặc điểm hình dáng như: “Dáng vóc cao”, “trán cao”,
“bàn tay dài”.
- Một người có thể được gọi là “Số phát đạt” khi người đó có
những đặc điểm hình dáng như: “trán rộng”, “cổ tròn”, “nốt
ruồi ở mặt”, “bàn tay dài”.
- Một người bị coi là mắc “bệnh thủy đậu” khi người đó có các
triệu chứng như: “sốt”, “da nổi đỏ”, “mụn nước trên da”.
3) Xây dựng cơ sở tri thức
a) Quy ước
- Quy ước “Số con người”:
Trang 12b) Sơ đồ suy diễn và các luật
Từ các quy ước trên ta có được sơ đồ suy diễn như sau:
Trang 13Từ sơ đồ suy diễn trên ta có được tập 9 luật như sau: (dấu ^ biểu thị cho phép hội)
Trang 14II PHÂN TÍCH BÀI TOÁN
1) Mô tả bài toán
Bài toán đặt ra khi xây dựng hệ chuyên gia Dự đoán về căn số tương laicon người:
- Thu nhận các sự kiện do người dùng cung cấp miêu tả các triệu
chứng mà họ gặp phải
- Áp dụng các luật có sẵn từ việc làm việc với các chuyên gia từ
trước, được lưu trong một file dạng *.txt, để đưa ra dự đoán vànhận xét hợp lý
2) Hướng giải quyết
Các bước xây dựng hệ chuyên gia dự đoán “Số con người”:
- Xây dựng cấu trúc dữ liệu biểu diễn được các triệu chứng khác
nhau và chỉ rõ giá trị của nó là:
o True (đúng, người dùng có đặc điểm hình dáng đó)
o False (sai, người dùng có đặc điểm hình dáng đó)
Xây dựng: một lớp các sự kiện “SuKien” biểu diễn các đặc điểm hình dáng
là các mệnh đề có giá trị “True” hoặc “False”.
- Xây dựng cấu trúc dữ liệu lưu trữ cơ sở tri thức của hệ chuyên
gia để sử dụng trong suy luận và đưa ra được tư vấn
Lựa chọn của nhóm: xây dựng tập các luật sản xuất tổ chức trong một file
*.txt
Trang 15- Xây dựng thuật toán có thể để tiến hành suy diễn từ tập các sự
kiện được cung cấp bởi người dùng và tập các luật (Rules) có sẵntrong cơ sở tri thức để xác định được bệnh mà người dùng gặpphải và từ đó đưa ra nhận xét hợp lý
Lựa chọn của nhóm: sử dụng tư tưởng chính của thuật toán suy diễn tiến để
suy diễn, nghĩa là “lập luận từ các sự kiện, sự việc “tiền đề” để rút ra kết luận”
(Trích Giáo trình Hệ chuyên gia, ĐH Đà Nẵng)
3) Cấu trúc dữ liệu
a) Biểu diễn các sự kiện
Các sự kiện cho ta biết rằng người dùng có hay không bị các đặc điểmhình dáng tùy vào giá trị của sự kiện là True hay False do người dùng cung cấpqua giao diện người dùng
Mỗi sự kiện trong chương trình sẽ là một đối tượng trong lớp “SuKien”,
có:
- Các biến thành viên:
o private char tenSuKien; // tên của sự kiện
o private string textSuKien;
/* đoạn text mô tả đặc điểm hình dáng mà sự kiện biểu diễn, chẳng hạn sự kiện
có text là “dang voc cao” sẽ chứa giá trị của đặc điểm hình dáng “dáng vóc
cao” */
o private Boolean giaTriSuKien;
// giá trị của sự kiện cho biết người dùng có hay không bị triệu chứng
Trang 16- Các thuộc tính và các phương thức:
(Xin xem chi tiết trong class SuKien trong chương trình Demo kèm theo)
b) Biểu diễn các luật
Các luật là các tri thức chuyên gia được biểu diễn sao cho việc sử dụngluật cho ta kết quả là dự đoán người dùng có “Số như thế nào đó”
Các luật trong chương trình được biểu diễn theo cấu trúc gồm:
- Phần trái luật: (hay còn gọi là bộ khởi động) chứa danh sách các
sự kiện cần có để luật được áp dụng và các toán tử ^(hội),
@(tuyển) , ~(phủ định)
- Phần phải luật: chứa sự kiện biểu diễn các loại bệnh (cụ thể trong
chương trình là các bệnh từ 1 đến 9)
- Khi phần trái luật được thỏa mãn (nhận giá trị logic bằng True)
thì luật được khởi động và phần phải luật được áp dụng, nói cáchkhác là người dùng “có số ” như thế nào đó ở vế phải luật
Cụ thể trong chương trình mỗi luật sẽ là một đối tượng thể hiện của lớp
“Luat” gồm có:
- Các biến thành viên:
o private char tenLuat;// tên của luật
o private string traiLuat;// phần trái luật
o private string phaiLuat;// phần phải luật
o private string thanLuat;
Trang 17// gồm phần trái luật và phần phải luật và dấu ngăn cách “->” giữa chúng
- Các thuộc tính và phương thức:
(Xin xem chi tiết trong class Luat trong chương trình Demo kèm theo)
Các luật trong chương trình sẽ được lưu trữ dưới dạng các xâu trong mộtfile *.txt (Luat.txt) trong thư mục Debug của chương trình
c) Biểu diễn danh sách các sự kiện
Danh sách các sự kiện là một mảng một chiều với mỗi phần tử của nó làmột đối tượng sự kiện Danh sách này được dùng để duyệt qua các sự kiện đượccung cấp bởi người dùng từ đó có được câu trả lời là: liệu có hay không luật nào
đó trong tập cơ sở luật được khởi động và áp dụng
Cụ thể trong chương trình danh sách sự kiện được biểu diễn là một lớpgồm có:
- Các biến thành viên:
o private int soSuKien;// số các sự kiện trong danh sách
o private SuKien[] dsSuKien;
// mảng môt chiều lưu trữ danh sách các sự kiện
Trang 18Tương tự danh sách sự kiện, danh sách luật này là một mảng một chiềubiểu diễn cho tập các luật có trong cơ sở tri thức của chương trình Danh sáchnày dùng để duyệt qua các luật và cho biết loại bệnh mà người dùng mắc phảitheo đúng luật.
Cụ thể trong chương trình danh sách luật được biểu diễn là một lớp gồmcó:
- Các biến thành viên:
o private int soLuat;// số các luật có trong danh sách luật
o private Luat[] dsLuat;// mảng một chiều lưu trữ các luật
Điều đầu tiên cần khẳng định:
- Các sự kiện sẽ được thu nạp từ người dùng theo cách thức là:
“chuyên gia” hỏi , “người dùng” trả lời bằng cách xác nhận sự
kiện “chuyên gia” hỏi là đúng hay sai (True or False).
- Khi nhận được thông tin từ “người dùng” thì “chuyên gia” sẽ sử
dụng các “suy luận logic” theo thuật toán để xác định bệnh mà
người dùng mắc phải
Trang 19- Việc hỏi sẽ dừng trong 2 trường hợp:
o Xác nhận được người dùng có “số” như thế nào đó bằng cách
sử dụng luật nào đó trong cớ sở luật đã có
o Đã duyệt qua tất cả các sự kiện hoặc các luật mà không có luậtnào được áp dụng (chưa có luật xây dựng cho danh sách sự kiện
mà người dùng cung cấp)
Cụ thể cách giải quyết của nhóm là:
- Sử dụng tư tưởng của thuật toán suy diễn tiến để suy luận logic
tại mỗi bước
- Cụ thể là coi mỗi lần “chuyên gia” hỏi và “người dùng” trả lời là
một bước lặp của vòng While (điều kiện dừng chưa thỏa)
- Khi đó thuật toán cụ thể sẽ như sau:
Sử dụng 3 danh sách là: dsLuatDaHoi (danh sách các luật đã đượcchuyên gia hỏi rồi) và dsLuatCoTheHoi (danh sách các luật còn có thể hỏi,chưa bị phủ định bởi người dùng), dsLuatChuaHoi (danh sách các luật chưađược hỏi tới) Thuật toán gồm 3 bước cụ thể như sau:
Bước 1: Khởi tạo
Khởi tạo danh sách sự kiện ban đầu sẽ là danh sách mà tất cả các sự kiệnđều có giá trị là False (sai) (người dùng không có nhận xét nào về “số” củamình)
Load danh sách luật từ cơ sở tri thức dsLuatDaHoi = {rỗng},dsLuatCoTheHoi = dsLuatChuaHoi = {danh sách luật có trong cơ sở tri thức}
Trang 20Bước 2: Thu thập giá trị sự kiện và suy luận
Hỏi người dùng về một sự kiện nào đó theo một nguyên tắc nào đó
Nếu sự kiện được trả lời là True (Đúng):
- Duyệt qua các tất cả các luật có trong danh sách luật mà có sự
kiện đang hỏi (nằm bên vế trái luật) xem nếu luật đó là luật “đã
được hỏi rồi” thì đưa nó vào dsLuatDaHoi
- dsLuatCoTheHoi sẽ là danh sách các luật có chứa sự kiện đang
xét
- dsLuatChuaHoi không thay đổi
Nếu sự kiện được trả lời là False (Sai)
- Các luật trong cơ sở tri thức mà có chứa sự kiện đang xét (nằm
bên vế trái luật) sẽ được đưa vào dsLuatDaHoi và được loại bỏkhỏi dsLuatChuaHoi
- dsLuatCoTheHoi được gán bằng dsLuatChuaHoi
Bước 3: Điều kiện dừng
Lặp lại bước 2 cho đến khi 1 trong 2 trường hợp sau sảy ra
- Có luật được áp dụng: thì kết luận người dùng mắc bệnh tương
ứng mà luật biểu diễn và thông báo cho người dùng
- Không có luật nào được áp dụng cả (hay nói cách khác tập luật
đang xét bị rỗng), thông báo ra cho người dùng biết(dsLuatCoTheHoi = {rỗng})