示例#1
0
        /// <summary>
        /// Suy diễn để chứng minh điều gì đó
        /// </summary>
        /// <returns>Nếu tập tìm thấy thì trả về true, ngược lại trả về false</returns>
        public Boolean SearchCondition(MMenhDe menhDeCanCM)
        {
            int            demSKDB  = 0;
            int            demTLuat = 0;
            List <MMenhDe> TSKM     = new List <MMenhDe>();

            while (demSKDB != TSKDB.Count || demTLuat != TLuat.Count)
            {
                demSKDB  = TSKDB.Count;
                demTLuat = TLuat.Count;

                List <int> viTriLuatDaDung = new List <int>();
                for (int i = 0; i < TLuat.Count; i++)
                {
                    MLuat li = TLuat[i];
                    List <MChiTietLuat> veTrai     = li.ChiTietLuat();
                    Boolean             suDungDuoc = true;
                    foreach (MChiTietLuat m in veTrai)
                    {
                        if (!TSKDB.Contains(m.Left()))
                        {
                            suDungDuoc = false;
                            break;
                        }
                    }
                    if (suDungDuoc)
                    {
                        TSKDB.Add(li.Right());
                        TSKM.Add(li.Right());
                        viTriLuatDaDung.Add(i);
                    }
                }
                if (TSKDB.Contains(menhDeCanCM))
                {
                    return(true);
                }
                for (int i = viTriLuatDaDung.Count - 1; i >= 0; i--)
                {
                    TLuat.RemoveAt(viTriLuatDaDung[i]);
                }
            }
            return(false);
        }
示例#2
0
        /// <summary>
        /// Suy diễn tìm tất cả các phương án
        /// </summary>
        /// <returns>nếu tập SKDB thay đổi thì trả về true, ngược lại trả về false</returns>
        public List <MMenhDe> Search()
        {
            int            demSKDB  = 0;
            int            demTLuat = 0;
            List <MMenhDe> TSKM     = new List <MMenhDe>();

            while (demSKDB != TSKDB.Count || demTLuat != TLuat.Count)
            {
                demSKDB  = TSKDB.Count;
                demTLuat = TLuat.Count;

                List <int> viTriLuatDaDung = new List <int>();
                for (int i = 0; i < TLuat.Count; i++)
                {
                    MLuat li = TLuat[i];
                    List <MChiTietLuat> veTrai     = li.ChiTietLuat();
                    Boolean             suDungDuoc = true;
                    foreach (MChiTietLuat m in veTrai)
                    {
                        if (TSKDB.FindIndex(item => item.ID == m.Left().ID) == -1)
                        {
                            Console.WriteLine("TEST: " + m.Left().ID);
                            suDungDuoc = false;
                            break;
                        }
                        Console.WriteLine("TEST OUT: " + m.Left().ID);
                        if (suDungDuoc)
                        {
                            TSKDB.Add(li.Right());
                            TSKM.Add(li.Right());
                            viTriLuatDaDung.Add(i);
                            break;
                        }
                    }
                }

                for (int i = viTriLuatDaDung.Count - 1; i >= 0; i--)
                {
                    TLuat.RemoveAt(viTriLuatDaDung[i]);
                }
            }
            return(TSKM);
        }