19
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

Báo cáo Hệ chuyêngia - Nhận dạng động vật

Embed Size (px)

DESCRIPTION

Báo cáo Hệ chuyêngia - Nhận dạng động vật, sử dụng suy diễn tiến!

Citation preview

Page 1: Báo cáo Hệ chuyêngia - Nhận dạng động 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

Page 2: Báo cáo Hệ chuyêngia - Nhận dạng động vật

M c l cụ ụPhân công công việc..............................................................................................................................2

I. Phân tích bài toán..........................................................................................................................3

II. Thiết kế chương trình....................................................................................................................3

1. Kiến trúc chương trình:..........................................................................................................3

2. Mô hình suy diễn...................................................................................................................3

3. Cơ sở tri thức:........................................................................................................................4

III. Cài đặt chương trình..................................................................................................................7

1. Thuật toán suy diễn tiến.........................................................................................................7

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”.................................8

3. Thuật toán tìm bao đóng........................................................................................................9

4. Thuật toán tìm luật dư thừa..................................................................................................10

5. Thuật toán tìm sự kiện dư thừa............................................................................................11

IV. Demo chương trình.................................................................................................................14

1. Giao diện chính....................................................................................................................14

2. Giao diện quản lý sự kiện....................................................................................................14

3. Giao diện quản lý tập luật....................................................................................................15

TÀI LIỆU THAM KHẢO..........................................................................................................................16

Phân công công việc

STT Họ tên Công việc1 Lê Thanh Nghị Tìm hiểu thuật toán suy diễn tiến, viết báo cáo2 Đỗ 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

Page 3: Báo cáo Hệ chuyêngia - Nhận dạng động vật

I. Phân tích bài toán1. 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

Page 4: Báo cáo Hệ chuyêngia - Nhận dạng động vật

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ụnga. Thuật toán suy diễn tiến

Input: - Tập các mệnh đề đã cho GT={gt1, gt2, gt3, gt4,… gtm }. - Tập các luật R = { r1, r2, r3, r4,…, rm} với ri = p1^…^ pn q với i = 1,.., n. - Tập KL = { q1,…, qk}.Output:- Thông báo thành công nếu ∀qi ( i=1 , k ) đều được suy ra từ GT và tập

luật R

Phương pháp:/*¿ r 1→

TG1 r 2→

TG2 r3→

TG3 → …→ TGn∋KL*/

/*TG là tập các sự kiện(mệnh đề) đúng cho đến thời điểm đang xét*/

void SDT()

4

Page 5: Báo cáo Hệ chuyêngia - Nhận dạng động vật

{

TG = GT

/* SAT là tập hợp các luật có dạng p1^…^ pn q, sao cho ∀ p i (i=1 , n )∈TG */

SAT = Loc(R, TG)

while (KL ₵ TG) and (SAT ≠ Ø) do

{

r ←get (SAT )/*Lấ/y luật r trong SAT*/

/*Gia2 sử2: ri = p1^…^ pn q */

TG=TG∪{q } /*Bổ2 sung vế/ pha2i vào TG*/

R=R ¿ r } /*Loại đi luật đã áp dụng*/

SAT=Loc¿ R ,TG} /*Tính lại tập SAT*/

}

If KL∈TG then exit (“Thành cổng”)

Else exit (“Khổng thành cổng”)

}

b. Thuật toán tìm bao đóngInput: 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 fi = , 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;

5

Page 6: Báo cáo Hệ chuyêngia - Nhận dạng động vật

For mổHi fi = {

If X+ {

X+ = X+ ;Flag = True;

}}

}}

c. Thuật toán tìm phủ tối thiểuInput : 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ế/ pha2i mổHi phụ thuộc hàm trong F sao cho vế/ pha2i cu2a mổHi phụ thuộc hàm chỉ2 chứa một thuộc tính (điếMu này luổn thực hiện đửợc do bổ2 đếM trến)∀ f: X → Y ∈ F∀ A ∈ Yg = X → A F = F ∪ gm = m + 1

Bửớc 2 : Tìm tập phụ thuộc hàm đấMy đu2 bằng cách loại bo2 các thuộc tính dử thừa ở2 vế/ trái cu2a từng phụ thuộc hàm.∀ f X → A ∈ F∀ B ∈ XX' =X − BIf (X'→ A ∈ F+) X = X'Chú ý :Việc tìm tấ/t ca2 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 cu2a X.

Bửớc 3 : Loại bo2 các phụ thuộc hàm dử thừa trong F.

6

Page 7: Báo cáo Hệ chuyêngia - Nhận dạng động vật

∀ f ∈ FG = F − f {loại f ra kho2i F. và lửu { F − f} vào G }If (F + = G+ ) {gọi thu2 tục kiế2m tra F, G tửởng đửởng ở2 dửới}

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ếHn 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;

7

Page 8: Báo cáo Hệ chuyêngia - Nhận dạng động vật

}

FindTHOA(TGIAN, THOA, VET);

}

temVET = VET;

}

if (!flag) txtKetQua.Text = "Khổng tìm thấ/y con vật phù

hợp!";

}

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ếHn:\r\n";

string exp = "Gia2i 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]);

}

8

Page 9: Báo cáo Hệ chuyêngia - Nhận dạng động vật

return left + " => " + ReadNameToDesc(rule.clauseRight);

}

9

Page 10: Báo cáo Hệ chuyêngia - Nhận dạng động vật

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))

10

Page 11: Báo cáo Hệ chuyêngia - Nhận dạng động vật

{

result += "^" + s;

}

}

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(':');

11

Page 12: Báo cáo Hệ chuyêngia - Nhận dạng động vật

string clauseLeft =

split[1].Substring(0,split[1].IndexOf('='));

string clauseRight =

split[1].Substring(split[1].IndexOf('>')+1);

string[] strList =

Common.ArrayListToArrayString(arr, item.ToString());

string baodong = Common.timBaoDong(clauseLeft,

strList);

if (Common.match(baodong, clauseRight))

DuThua.Add(item);

}

string ms = "Các luật dử 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);

}

5. Thuật toán tìm sự kiện dư thừa

private void bttSuKienDuThua_Click(object sender, EventArgs e)

{

if (lstbDSLuat.SelectedIndex == -1)

12

Page 13: Báo cáo Hệ chuyêngia - Nhận dạng động vật

{

MessageBox.Show("Bạn hãy chọn 1 luật", "Thổng báo");

return;

}

ArrayList arr = Common.GetList();

string[] R = Common.ArrayListToArrayString(arr);

string re =

lstbDSLuat.SelectedItem.ToString().Split(':')[1].Split('=')[0];

string[] ev = re.Split('^');

ArrayList Events = new ArrayList();

foreach (var item in ev)

{

string bd = Common.timBaoDong(Common.RemoveEvent(re,

item), R);

if (Common.match(bd, item))

Events.Add(item);

}

if (Events.Count == 0)

{

MessageBox.Show("Khổng có sự kiện nào dử

thừa","Thổng báo");

return;

}

string ms = "Các sự kiện dử thừa:\r\n";

foreach (var item in Events)

{

ms += item + "\r\n";

}

ms += "Bạn có muổ/n loại bo2 các sự kiện dử thừa ra kho2i

luật:\r\n"+lstbDSLuat.SelectedItem;

string te = lstbDSLuat.SelectedItem.ToString();

if (MessageBox.Show(ms, "Thổng báo",

MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) ==

System.Windows.Forms.DialogResult.OK)

{

foreach (var item in Events)

13

Page 14: Báo cáo Hệ chuyêngia - Nhận dạng động vật

{

string a = te.Substring(0, te.IndexOf(':') + 1)

+ Common.RemoveEvent(re, item.ToString()) +

te.Substring(te.IndexOf('='));

lstbDSLuat.Items[lstbDSLuat.SelectedIndex] = a;

}

Common.WriteTextToFile("Rule.txt", lstbDSLuat);

}

}

14

Page 15: Báo cáo Hệ chuyêngia - Nhận dạng động vật

IV. Demo ch ng trìnhươ

1. Giao diện chính

2. Giao diện quản lý sự kiện

15

Page 16: Báo cáo Hệ chuyêngia - Nhận dạng động vật

3. Giao diện quản lý tập luật

16

Page 17: Báo cáo Hệ chuyêngia - Nhận dạng động vật

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

17