Exemplo n.º 1
0
        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++;
            }
        }
Exemplo n.º 2
0
        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++;
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }