public void readFile() { // Lấy nội dung từ bảng luật string qr = "Select noidung from tblluat"; DataTable tbLuat = cn.ExcuteQuery(qr); for (int i = 0; i < tbLuat.Rows.Count; i++) { // Lấy thông tin từ bảng luật theo thứ từ từ hàng đầu tiên trở xuống string buff = tbLuat.Rows[i][0].ToString(); RuleDefine luatTG = new RuleDefine(); /* Trong SQL, ranh giới giữa Giả thuyết và Kết luận * là dấu '>', ta định nghĩa dấu '>' trong C# */ char[] delimiterChars = { '>' }; string[] tg = buff.Split(delimiterChars); /* Bắt đầu việc xử lý các sự kiện được nối với nhau * bằng dấu '^', ta định nghĩa dấu '^' trong C# */ char[] delimiterChars1 = { '^' }; string[] left = tg[0].Split(delimiterChars1); int j = 0; /* Trong C#, do ban dầu chưa có gì nên ta sẽ khai báo các chuỗi sự kiện trống, sau đó mới thực hiện lưu * từng chuỗi sự kiện kết hợp như trong SQL */ string buff1 = left[0]; while (buff1 != null) { luatTG.left.Add(buff1); j++; try { buff1 = left[j]; } catch { buff1 = null; } } j = 0; /* Trong SQL, dấu ',' là dấu ngăn cách giữa MÃ LUẬT và NỘI DUNG LUẬT * nên ta sẽ tiến hành đánh dấu và thêm nội dung luật tương ứng với mã luật */ char[] delimiterChars2 = { ',' }; string[] right = tg[1].Split(delimiterChars2); buff1 = right[0]; while (buff1 != null) { luatTG.right.Add(buff1); j++; try { buff1 = right[j]; } catch { buff1 = null; } } bin.Add(luatTG); demluat++; } }
public void readFile() { string qr = "Select noidung from tblluat"; //DataTable tbLuat = cn.GetTable(qr); DataTable tbLuat = cn.ExcuteQuery(qr); for (int i = 0; i < tbLuat.Rows.Count; i++) { string buff = tbLuat.Rows[i][0].ToString(); RuleDefine luatTG = new RuleDefine(); char[] delimiterChars = { '>' }; string[] tg = buff.Split(delimiterChars); //left char[] delimiterChars1 = { '^' }; string[] left = tg[0].Split(delimiterChars1); int j = 0; string buff1 = left[0]; while (buff1 != null) { luatTG.left.Add(buff1); j++; try { buff1 = left[j]; } catch { buff1 = null; } } j = 0; //right char[] delimiterChars2 = { ',' }; string[] right = tg[1].Split(delimiterChars2); buff1 = right[0]; while (buff1 != null) { luatTG.right.Add(buff1); j++; try { buff1 = right[j]; } catch { buff1 = null; } } bin.Add(luatTG); demluat++; } }
public bool SuyDien(List <string> left, List <string> right) { List <RuleDefine> mangluat = new List <RuleDefine>(); mangluat = bin; List <string> KL = right; // Dòng string trong phần kết luận của SQL List <string> TG = left; // Dòng sự kiện kết hợp trong SQL TimTapSat(TG, mangluat); while (SAT.Count > 0 && CheckIn(KL, TG) == false) { // Lấy luật r ra áp dụng RuleDefine r = SAT.ElementAt(0); mangluat.Remove(r); SAT.RemoveAt(0); // Thêm sự kiện vào chuỗi sự kiện kết hợp ( Thêm kết luận vào bộ nhớ làm việc ) foreach (string tg in r.right) { if (!TG.Contains(tg)) { TG.Add(tg); Console.WriteLine(tg); } } // Hàm tìm kết luận dựa trên tập các sự kiện kết hợp TimTapSat(TG, mangluat); } /* Bước này ta sẽ kiểm tra liệu giả thuyết có khớp với bộ nhớ hay không, nếu đúng thì thêm kết luận vào bộ nhớ làm việc, * nếu sai thì xét các luật tiếp theo cho đến khi gặp đích ( đã xét hết các sự kiện trong luật ) */ if (CheckIn(KL, TG) == false) { return(false); } else { return(true); } }
public bool SuyDien(List <string> left, List <string> right) { List <RuleDefine> mangluat = new List <RuleDefine>(); mangluat = bin; List <string> KL = right; List <string> TG = left; TimTapSat(TG, mangluat); while (SAT.Count > 0 && CheckIn(KL, TG) == false) { //Lấy luật r cuối cùng ra áp dụng RuleDefine r = SAT.ElementAt(0); mangluat.Remove(r); SAT.RemoveAt(0); //Thêm cái chưa có vào TG foreach (string tg in r.right) { if (!TG.Contains(tg)) { TG.Add(tg); Console.WriteLine(tg); } } TimTapSat(TG, mangluat); } if (CheckIn(KL, TG) == false) { return(false); } else { return(true); } }