xây dựng hệ chuyên gia nhận dạng con vật
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN HỆ CHUYÊN GIA ĐỀ TÀI: Xây dựng hệ chuyên gia nhận dạng con vật Gv hướng dẫn: TS. Phạm Văn Hà Sinh viên thực hiện: 1. Lê Thanh Nghị 2. Đỗ Văn Lưỡng Lớp: KHMT2 – K5 Hà Nội – 12/08/2013 Nhóm 27 – Lớp KHMT2-K5 Mục lục Phân công công việc STT Họ tên Công việc 1 Lê Thanh Nghị Tìm hiểu thuật toán suy diễn tiến, viết báo cáo 2 Đỗ Văn Lưỡng Tìm hiểu các thuật toán giải quyết dư thừa dữ liệu 2 Nhóm 27 – Lớp KHMT2-K5 I. Phân tích bài toán 1. Mục đích Áp dụng các kiến thức đã học, lập trình một chương trình mô phỏng, dùng hệ chuyên gia. Hệ nhận dạng một số động vật trong bài này sử dụng cơ sở tri thức người dùng dựa trên các sự kiện người dùng đưa vào. Hệ chuyên gia sẽ sử dụng một động cơ suy diễn thích hợp để kết hợp các sự kiện người dùng đưa vào đó với các luật đã được xây dựng sẵn để tìm được mục tiêu thích hợp. 2. Cách thức thực hiện - Ngôn ngữ lựa chọn: C# - Sử dụng cơ sở dữ liệu bao gồm tập các sự kiện, các luật, lưu trữ trong các tệp .txt. - Sử dụng 3 giao diện: giao diện chính chạy chương trình (frmMain), giao diện trình bày (frmExplain), giao diện quản lý tập sự kiện, tập luật (frmManagerRule) - Sử dụng các thuật toán như suy diễn tiến, thuật toán tìm bao đóng, loại bỏ luật thừa, sự kiện thừa. II. Thiết kế chương trình 1. Kiến trúc chương trình: Một phiên làm việc gồm: - Mục tiêu cần giải quyết - Người dùng chọn các đặc điểm - Đưa ra kết quả. 2. Mô hình suy diễn - Cách lựa chọn mục tiêu: 3 Nhóm 27 – Lớp KHMT2-K5 Hệ nhận dạng động vật đưa ra kết luận đó là động vật gì dựa trên các đặc điểm (thuộc tính) nổi bật của nó. (Các thuộc tính này được xây dựng sẵn trong phần cơ sở tri thức). Đối với mỗi thuộc tính, hệ sẽ ghi nhận giá trị có hay không có thuộc tính đó thông qua các lựa chọn của người dùng, và đưa ra kết luận về con vật đó dựa trên các đặc tính mà nó có. Hệ sử dụng suy diễn tiến dựa trên các luật để tìm được đáp án. - Biểu diễn tri thức: Tri thức của hệ nhận dạng động vật gồm tập các sự kiện (gồm các đặc điểm của động vật), tập luật Các sự kiện được biểu diễn trong file text Node.txt. Các luật được biểu diễn trong file Rule.txt gồm 2 mệnh đề mỗi luật, dạng luật dẫn If….then. - Cách thức suy diễn: Hoạt động của hệ là đi chứng minh đó là một con vật nào đó dựa trên cơ sở tri thức và sự lựa chọn các đặc điểm con vật của người dùng. 3. Cơ sở tri thức: Thu thập tri thức về một số đặc điểm riêng để phân loại động vật dựa trên phân nhóm động vật trong khoa học sinh học. 4. Các thuật toán được sử dụng a. Thuật toán suy diễn tiến Input: - Tập các mệnh đề đã cho GT={gt 1 , gt 2 , gt 3 , gt 4 ,… gt m }. - Tập các luật R = { r 1 , r 2 , r 3 , r 4 ,…, r m } với r i = p 1 ^…^ p n q với i = 1, , n. - Tập KL = { q 1 ,…, q k }. Output: - Thông báo thành công nếu đều được suy ra từ GT và tập luật R Phương pháp:/**/ /*TG là tập các sự kiện(mệnh đề) đúng cho đến thời điểm đang xét*/ void SDT() { 4 Nhóm 27 – Lớp KHMT2-K5 TG = GT /* SAT là tập hợp các luật có dạng p 1 ^…^ p n q, sao cho */ SAT = Loc(R, TG) while (KL ₵ TG) and (SAT ≠ Ø) do { /*Lấy luật r trong SAT*/ /*Giả sử: r i = p 1 ^…^ p n q */ /*Bổ sung vế phải vào TG*/ /*Loại đi luật đã áp dụng*/ /*Tính lại tập SAT*/ } If then exit (“Thành công”) Else exit (“Không thành công”) } b. Thuật toán tìm bao đóng Input: Tập thuộc tính X cần tính bao đóng trên lược đồ quan hệ R=(U,F). Đầu ra: Tập thuộc tính X+ Phương pháp: /* Kiểm tra lần lượt từng phụ thuộc hàm = α→β , nếu α ⊆ X + thì kết nạp vế phải (tức β ) vào vào X + : X + := X + ∪β . Lặp lại cho đến khi nào X + = Const.*/ void TimBaoDong() { flag = True; X + = X; while Flag { Flag = False; For mỗi fi = α→β { If α ⊆ X + 5 Nhóm 27 – Lớp KHMT2-K5 { X + = X + ∪ β; Flag = True; } } } } c. Thuật toán tìm phủ tối thiểu Input : Lược đồ quan hệ ban đầu Q và tập phụ thuộc hàm F, số lượng phụ thuộc hàm trong F là m. Output : Tập phụ thuộc hàm tối thiểu của F Bước 1 : Tách vế phải mỗi phụ thuộc hàm trong F sao cho vế phải của mỗi phụ thuộc hàm chỉ chứa một thuộc tính (điều này luôn thực hiện được do bổ đề trên) ∀ f: X → Y ∈ F ∀ A ∈ Y g = X → A F = F ∪ g m = m + 1 Bước 2 : Tìm tập phụ thuộc hàm đầy đủ bằng cách loại bỏ các thuộc tính dư thừa ở vế trái của từng phụ thuộc hàm. ∀ f X → A ∈ F ∀ B ∈ X X' =X − B If (X'→ A ∈ F+) X = X' Chú ý : Việc tìm tất cả các tập X' ⊆ X theo thuật toán trên hoàn toàn thay thế được việc tìm X' cách tìm các tập con của X. Bước 3 : Loại bỏ các phụ thuộc hàm dư thừa trong F. ∀ f ∈ F G = F − f {loại f ra khỏi F. và lưu { F − f} vào G } If (F + = G+ ) {gọi thủ tục kiểm tra F, G tương đương ở dưới} 6 Nhóm 27 – Lớp KHMT2-K5 III. Cài đặt chương trình 1. Thuật toán suy diễn tiến /// <summary> /// Thuật toán suy diễn tiến /// </summary> private void ForwardReasoning() { bool flag = false; foreach (var item in listRule) { Stack THOA = new Stack(); ArrayList VET = new ArrayList(); string TGIAN = txtDacDiem.Text.Trim(); string KL = ((Rule)item).clauseRight; if (KL.ToLower()[0] != 'b') continue; FindTHOA(TGIAN, THOA, VET); while (THOA.Count > 0 && !CheckedOfClause(TGIAN, KL)) { Rule rule = (Rule)THOA.Pop(); VET.Add(rule); TGIAN += "^" + rule.clauseRight; if (CheckedOfClause(TGIAN, KL)) { txtKetQua.Text = "Đây là " + Common.ReadNameToDesc(KL) +"!"; flag = true; break; } FindTHOA(TGIAN, THOA, VET); } temVET = VET; } if (!flag) txtKetQua.Text = "Không tìm thấy con vật phù hợp!"; } 7 Nhóm 27 – Lớp KHMT2-K5 2. Thuật toán giải thích lời khuyên khi người dùng nhấn nút “Giải thích” protected void LoadExplain() { ArrayList listNode = new ArrayList(); LoadListNode(listNode); if (VET == null) return; string mes = "Quá trình suy diễn:\r\n"; string exp = "Giải thích: \r\n"; foreach (var itemV in VET) { Rule r = (Rule)itemV; mes += "Theo luật "+r.nameRule +": "+ r.clauseLeft + "=>" + r.clauseRight + " thì:\r\n"; mes += Common.RuleToExplain(r) + "\r\n"; } txtExplain.Text = mes; } public static string RuleToExplain(Rule rule) { string[] s = rule.clauseLeft.Split('^'); string left = ""; for (int i = 0; i < s.Length; i++) { if (i < s.Length - 1) left += ReadNameToDesc(s[i]) + " và "; else left += ReadNameToDesc(s[i]); } return left + " => " + ReadNameToDesc(rule.clauseRight); } 8 Nhóm 27 – Lớp KHMT2-K5 3. Thuật toán tìm bao đóng public static string timBaoDong(string baoDong, string[] R) { string result = baoDong; bool flag = false; bool[] flagArray = new bool[R.Length]; for (int i = 0; i < R.Length; i++) { flagArray[i] = false; } int count = 0; bool flag2 = true; while (!flag) { if (flagArray[count]) { if (count == (R.Length - 1) && flag2) { break; } count++; if (count == R.Length) { count = 0; flag2 = true; } continue; } string s = R[count].Substring(0, R[count].IndexOf('=')); if (match(result, s)) { flag2 = false; flagArray[count] = true; s = R[count].Substring(R[count].IndexOf('>') + 1); if (!match(result, s)) { result += "^" + s; } 9 Nhóm 27 – Lớp KHMT2-K5 } count++; if (count == R.Length && flag2) { break; } if (count == R.Length) { flag2 = true; count = 0; } flag = true; foreach (bool item in flagArray) { if (!item) { flag = false; break; } } } return result.ToString(); } 4. Thuật toán tìm luật dư thừa private void bttRemove_Click(object sender, EventArgs e) { ArrayList arr = Common.GetList(); ArrayList DuThua = new ArrayList(); foreach (var item in arr) { string[] split = item.ToString().Split(':'); string clauseLeft = split[1].Substring(0,split[1].IndexOf('=')); string clauseRight = split[1].Substring(split[1].IndexOf('>')+1); 10 [...]... KHMT2-K5 Common.WriteTextToFile("Rule.txt", lstbDSLuat); } } 13 Nhóm 27 – Lớp KHMT2-K5 IV Demo chương trình 1 Giao diện chính 2 Giao diện quản lý sự kiện 14 Nhóm 27 – Lớp KHMT2-K5 3 Giao diện quản lý tập luật 15 Nhóm 27 – Lớp KHMT2-K5 TÀI LIỆU THAM KHẢO 1 Giáo trình Hệ Chuyên Gia 2 Các hệ cơ sở tri thức 3 http://en.wikipedia.org/wiki/Expert_system 4 http://www.cs.nott.ac.uk/~sxp/ES3/sld001.htm 16 ... MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.OK) { foreach (var item in Events) { string a = te.Substring(0, te.IndexOf(':') + 1) + Common.RemoveEvent(re, item.ToString()) + te.Substring(te.IndexOf('=')); lstbDSLuat.Items[lstbDSLuat.SelectedIndex] = a; } 12 Nhóm 27 – Lớp KHMT2-K5 Common.WriteTextToFile("Rule.txt", lstbDSLuat); } } 13 Nhóm 27 – Lớp KHMT2-K5 IV Demo chương trình 1 Giao diện... thừa:\r\n"; foreach (var item in DuThua) { ms += item.ToString() + "\r\n"; } if (MessageBox.Show(ms, "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.OK) { for (int i = 0; i < lstbDSLuat.Items.Count; i++) { if (ms.Contains(lstbDSLuat.Items[i].ToString())) { lstbDSLuat.Items.RemoveAt(i ); } } } Common.WriteTextToFile("Rule.txt", lstbDSLuat); Common.LoadFileToListBox("Rule.txt",lstbDSLuat); . TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN HỆ CHUYÊN GIA ĐỀ TÀI: Xây dựng hệ chuyên gia nhận dạng con vật Gv hướng dẫn: TS. Phạm Văn Hà Sinh viên thực hiện: 1 chương trình mô phỏng, dùng hệ chuyên gia. Hệ nhận dạng một số động vật trong bài này sử dụng cơ sở tri thức người dùng dựa trên các sự kiện người dùng đưa vào. Hệ chuyên gia sẽ sử dụng một động. tiêu: 3 Nhóm 27 – Lớp KHMT2-K5 Hệ nhận dạng động vật đưa ra kết luận đó là động vật gì dựa trên các đặc điểm (thuộc tính) nổi bật của nó. (Các thuộc tính này được xây dựng sẵn trong phần cơ sở