Cài đặt ví dụ minh họa hợp giải trên logic ngôn ngữ

Một phần của tài liệu Suy diễn trong logic ngôn ngữ1 (Trang 63)

Do thời gian có hạn, việc cài đặt quá trình hợp giải trong logic ngôn ngữ áp

dụng cho bài toán suy diễn tổng quát em vẫn chưa thực hiện được. Ở đây chỉ là sự cài đặt áp dụng cho ví dụ trên, với những bài toán khác thì nó không hiệu quả. Tuy

nhiên, ý tưởng về việc xây dựng cấu trúc dữ liệu bài toán và một số vấn đề khác có

thể được dùng lại cho sự phát triển tiếp về sau.

Theo công thức hợp giải như trang 35, chúng ta có hợp giải của công thức Aa

V Bb1, với độ tin cậy α1 và công thức Cc V Bb2, với độ tin cậy α2 là công thức Aa V Cc, với độ tin cậy α3 = {α1, α2, ¬(b1b2)}. Trong đó A, B, C là các kí hiệu mệnh

đề logic; a, b1 , b2 , c là các giá trị ngữ nghĩa; α1, α2, α3 là độ tin cậy của các công

thức. Từ đó, chúng ta có ý tưởng xây dựng cấu trúc dữ liệu như sau:

- Mệnh đề logic là một cấu trúc dữ liệu gồm 3 trường: Prop là kí hiệu mệnh

đề, SeVal là giá trị ngữ nghĩa và i là chỉ số quy ước sự xuất hiện của mệnh

đề trong công thức. Các mệnh đề trên cùng một công thức sẽ có cùng chỉ số

i.

- Các công thức được lưu trữ trong cấu trúc bảng băm, mỗi công thức được lưu tại một chỉ số trong bảng băm tương ứng với chỉ số i của các mệnh đề

trong công thức đó. Ví dụ: công thức F0 = A V B lưu trữ tại vị trí 0 trong

bảng băm tương ứng với chỉ số i = 0 của các mệnh đề A và B.

- Để tiện việc tính toán, các giá trị ngữ nghĩa như MolVeryTrue,

MolTrue,…sẽ được quy thành các giá trị trong khoảng (0, 1) một cách cảm

tính, ví dụ: MolVeryFalse tương ứng 0.1, MolTrue tương ứng 0.6,….theo thủ

Các công thúc trong ví dụ trên:

1) (std_Robert, Hard)M oLF alse (uni_Robert, hi−ra)F alse (emp_Robert, Good)P ossT rue 2) (uni_Robert, Hi − ra)M oLV eryT rue

3) (std_Robert, Hard)V eryT rue 4) (emp_Robert, good)F alse

Đặt A: (std_Robert, Hard), B: (uni_Robert, hi−ra), C: (emp_Robert, Good)

Mã nguồn khởi tạo như sau:

// khởi tạo công thức 1)

md.Prop = "A";

md.SeVal = "MolFalse"; md.i = 0;

listLiteral.Add(md);//đưa mệnh đề vào công thức

md = newLiteral();// khởi tạo mệnh đề mới

md.Prop = "B"; md.SeVal = "False"; md.i = 0; listLiteral.Add(md); md = newLiteral(); md.Prop = "C"; md.SeVal = "PossTrue"; md.i = 0; listLiteral.Add(md);

// Khởi tạo công thức 2)

md.Prop = "B";

md.SeVal = "MolVTrue"; md.i = 1;

listLiteral.Add(md);

// Khởi tạo công thức 3)

md = new Literal(); md.Prop = "A"; md.SeVal = "VTrue"; md.i = 2;

listLiteral.Add(md);

// Khởi tạo công thức 4)

md = new Literal(); md.Prop = "C"; md.SeVal = "False"; md.i = 3;

listLiteral.Add(md);

Hình 3.3. Kết quả khởi tạo công thức

Kết quả hợp giải như sau :

Hình 3.4. Kết quả hợp giải Mã nguồn chương trình:

using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace ConsoleApplication2 { class Literal {

publicstring Prop;// ki hieu menh de

publicstring SeVal;// gia tri ngu nghia

publicint i;// chi so quy uoc su xuat hien cua Literal trong cung mot cong thuc

//cac literals co cung chi so i se la mot cong thuc tuyen cac literals do.

publicfloat GiaTri(string s) {

float f=0.0F;

if (s == "MVFalse") f = 0.1F;//MoreVeryFalse

elseif (s == "VFalse") f = 0.2F;//VeryFalse

elseif (s == "MolVFalse") f = 0.3F;//More or lessVeryFalse

elseif (s == "False") f = 0.4F;//False

elseif (s == "MolFalse") f = 0.5F;//More or less False

elseif (s == "MolTrue") f = 0.6F;//More or less True

elseif (s == "PossTrue") f = 0.61F;//poss true

elseif (s == "True") f = 0.7F;//True

elseif (s == "MolVTrue") f = 0.8F;//More or less VeryTrue

elseif (s == "VTrue") f = 0.9F;//VeryTrue

elseif (s == "MVTrue") f = 0.95F;//MoreVeryTrue

return f; }

publicstring GiaTu(float f) {

string s = "";

if (f == 0.1F) s = "MVFalse";//MoreVeryFalse

elseif (f == 0.2F) s = "VFalse";//VeryFalse

elseif (f == 0.3F) s = "MolVFalse";//More or lessVeryFalse

elseif (f == 0.4F) s = "False";//False

elseif (f == 0.5F) s = "MolFalse";//More or less False hoac PossFalse

elseif (f == 0.51F) s = "PossFalse";

elseif (f == 0.6F) s = "MolTrue";//More or less True hoac PossTrue

elseif (f == 0.61F)s = "PossTrue";

elseif (f == 0.7F) s = "True";//True

elseif (f == 0.8F) s = "MolVTrue";//More or less VeryTrue

elseif (f == 0.9F) s = "VTrue";//VeryTrue

elseif (f == 0.95F) s = "MVTrue";//MoreVeryTrue

return s; }

publicstring Min(float[]T) //phep lay gia tri nho nhat

{

float c = 1.0F;

for (int i = 0; i <= T.Length - 1; i++)

if (System.Math.Min(T[i], c) == T[i]) c = T[i];

return (GiaTu(c)); }

publicstring DoiXung(string s) //phep toan phu dinh

{

string[] T ={ "MVFalse", "VFalse", "MolVFalse","False","MolFalse","PossFalse"}; string[] F ={"MVTrue","VTrue","MolVTrue","True","MolTrue","PossTrue"};

for (int i = 0; i < 6; i++) if (s == T[i]) str = F[i];

elseif (s == F[i]) str = T[i];

return str; }

}

class Resolution // hợp giải

{

publicList<Literal> listLiteral = newList<Literal>();

publicHashtable listFormula = newHashtable();// danh sach chua cac cong thuc chuan bi cho qua

// trinh hop giai

public Literal md = new Literal(); publicvoid Khoitao()

{ md.Prop = "A"; md.SeVal = "MolFalse"; md.i = 0; listLiteral.Add(md); md = new Literal(); md.Prop = "B"; md.SeVal = "False"; md.i = 0;

listLiteral.Add(md); md = new Literal(); md.Prop = "C"; md.SeVal = "PossTrue"; md.i = 0; listLiteral.Add(md); md = new Literal(); md.Prop = "B"; md.SeVal = "MolVTrue"; md.i = 1; listLiteral.Add(md); md = new Literal(); md.Prop = "A"; md.SeVal = "VTrue"; md.i = 2; listLiteral.Add(md); md = new Literal(); md.Prop = "C"; md.SeVal = "False"; md.i = 3; listLiteral.Add(md); md = new Literal();

// Khoi tao danh sach cac cong thuc

for (int k = 0; k < 4; k++) {

for (int h = 0; h < listLiteral.Count; h++) if (listLiteral[h].i == k)

{

list.Add(listLiteral[h]); }

listFormula.Add(k, list); list = newList<Literal>(); }

}//end khoi tao

//khoi tao do tin cay cho cac cong thuc.Mac nhien la 1.

float[] T = { 1.0F, 1.0F, 1.0F, 1.0F };

float[] Conf1 = newfloat[3];

float[] Conf2 = newfloat[2];

int count = 0;

//Ham hop giai

publicvoid Hopgiai() {

for (int k = 0; k < listFormula.Count; k++) {

for (int h = k + 1; h < listFormula.Count; h++) {

List<Literal> getStr2 = (List<Literal>)listFormula[h];

listLiteral = newList<Literal>(); for (int l = 0; l < getStr1.Count; l++)

for (int m = 0; m < getStr2.Count; m++) { if (getStr1[l].Prop == getStr2[m].Prop) { ListLiteral.Add(getStr1[l]); listLiteral.Add(getStr2[m]); count++; } } Conf1[0] = T[k]; Conf1[1] = T[h];

Conf2 = newfloat[listLiteral.Count];

for (int p = 0; p < listLiteral.Count; p++) {

}

Conf1[2] = md.GiaTri(md.DoiXung(md.Min(Conf2)));

T[k] = Conf1[2]; if (Conf1[2] != 0)

Console.WriteLine("Do tin cay cua hop giai lan thu " + count.ToString() + " " + "la: " + md.Min(Conf1)); }

}

}//end hop giai

publicvoid HienThi() {

for (int k = 0; k < listFormula.Count; k++) {

List<Literal> getStr = (List<Literal>)listFormula[k];

Console.WriteLine("Cong thuc thu" + " " + k.ToString());

for (int i = 0; i < getStr.Count; i++) {

Console.Write(getStr[i].Prop + " " + getStr[i].SeVal + " "); }

Console.WriteLine(); }

}//end hien thi

class Program {

staticvoid Main(string[] args)

{ Resolution Rs = new Resolution(); Rs.Khoitao(); Rs.HienThi(); Console.WriteLine(); Rs.Hopgiai();

for (int k = 0; k < Rs.listFormula.Count; k++) {

List<Literal> getStr = (List<Literal>)Rs.listFormula[k]; if ((getStr.Count == 1) && getStr[0].Prop == "C") {

Console.WriteLine("Qua trinh hop giai dung"); } } Console.ReadLine(); } } }

KẾT LUẬN

Kết quảđạt được

Qua luận văn này, tôi đã thu được một số kết quả như sau:

+ Lý thuyết:

- Nắm bắt được nền tảng lý thuyết của logic mờ, logic ngôn ngữ.

- Nắm được nền tảng lý thuyết của cấu trúc đại số gia tử.

- Nắm được các phương pháp hợp giải trên logic mờ và logic ngôn ngữ.

+ Cài đặt:

- Cài đặt thử nghiệm phương thức hợp giải mờ cho mệnh đề logic.

- Cài đặt thử nghiệm phương thức hợp giải trên logic ngôn ngữ.

Đánh giá kết quả

Qua thời gian nghiên cứu luận văn, tôi đã thu được nhiều kiến thức bổ ích về

logic mờ, logic ngôn ngữ và các phương pháp suy diễn trên chúng. Tuy nhiên, do thời gian và khả năng bản thân có hạn, nên chưa thể có những nghiên cứu thật sâu

về các phương thức suy diễn trong logic ngôn ngữ cũng như chưa có những đóng góp mới về mặt lý thuyết. Về phần cài đặt, chỉ là những cài đặt thử nghiệm các phương thức hợp giải trên logic mờ và logic ngôn ngữ và còn nhiều hạn chế, chỉ là một số trường hợp đặc thù chứ chưa ở mức khái quát cho nhiều trường hợp, cần được phát triển thêm.

Hướng phát triển

Như đã nêu trên, việc cài đặt hợp giải trên logic mờ và trên logic ngôn ngữ

chỉ là những thử nghiệm, nhưng tôi tin tưởng rằng, với những kiến thức và kinh nghiệm thu được qua quá trình làm luận văn sẽ là tiền đề để tôi có thể cài đặt chúng

một cách hoàn chỉnh hơn trong tương lai. Đồng thời, tiếp tục nghiên cứu mở rộng

miền giá trị của ngôn ngữ sang các lớp đại số gia tử tổng quát hơn và xây dựng các

TÀI LIỆU THAM KHẢO

1. N. C. Ho and H. V. Nam, "A theory of refinement structure of hedge algebras and its application to linguistic-valued fuzzy logic", in: D. Niwinski and M. Zawadowski (Eds.), Logic, Algebra, and Computer Science (Banach Center Publications, PWN Polish Scientific Publishers, Warszawa, 1998).

2. N. C. Ho, H. V. Nam, and N. H. Chau, "Hedge algebras and their applications to fuzzy logic and fuzzy reasoning", Proc. of VJFUZZY'98 (Halong Bay, Vietnam, 1998), pp. 315-323.

3. N. C. Ho and W. Wechler, "Hedge algebras: an algebraic approach to structures of sets of linguistic domains of linguistic truth variables", Fuzzy Sets and Systems

35 (1990), pp. 281-293.

4. Chapter 3 • FUZZY LOGIC FUNDAMENTALS page 61 -100.

5. Richard C.T. Lee, “Fuzzy logic and resolution principle”, National institude of Health.

6. Zuliang Shen, Liya Ding Masso Mukaidono, “Fuzzy resolution principle”. 7. Nguyễn Cát Hồ, Trần Đình Khang, Huỳnh Văn Nam, Nguyễn Hải Châu, “Hedge aldebras, linguistic-valued logic and their application to fuzzy reasoning”.

8. Marc BEZEM, “Completeness of resolution revisited” , Theorical computer science 74(1990)

9. Trần Đức Khánh, Bài giảng Logic.

10. Nguyễn Cát Hồ, Huỳnh Văn Nam, “An algebraic approach to linguistic hedges

Một phần của tài liệu Suy diễn trong logic ngôn ngữ1 (Trang 63)