Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Thuật toán suy diễn tiến trong hệ chuyên gia/trí tuệ nhân tạo trong C#

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    120

    Post Thuật toán suy diễn tiến trong hệ chuyên gia/trí tuệ nhân tạo trong C#

    Ngồi làm bài tập lớn về cái suy diễn tiến này, thấy hay hay nên post nên chia sẻ cùng anh em.
    Thứ 1, về thuật toán như sau:
    1. Suy dien tien
    *Suy dien tien voi logic menh de
    -Input:+ Tap luat Rule={r1,r2,r3,…,rm}
    + Gia thiet (GT), ket luan (KL)
    -Output: Return “true” neu GT  KL
    *Method
    TD = GT; //TD: tap dich, GT: gia thuyet
    T = FILTER(Rule, TD); //loc rule co VT (ve trai) trong TD
    While <KL Є/ TD> and <T ≠ ø> do
    {
    r = Get(T);
    TD = TD Ū {q}; //r: left->q
    Rule = Rule \ {r}; // luat nao da dung roi thi bo di
    T=FILTER(Rule,TD); // luu y Rule nao ma loc ra tu TD da xuat hien roi thi khong lay lai
    }
    If (KL Є TD) then return “true”
    Else return false

    Vd minh hoa 1: Rule= {r1: a ^ b->c, r2: b->d, r3: a->e, r4: a ^ d ->e, r5: b ^ c->f, r6: e ^ f->g }
    KT : a ^ b ->g ?
    Giai:
    -Input: Tap luat Rule = {r1, r2, r3, r4, r5, r6}
    GT: a ^ b
    KL: a ^ b->g
    -Output: return “true” neu GT->KL

    Thứ 2: Về code
    Visual C# Code:
    1.     public class Luat
    2.     {
    3.         public  List<RuleItem> List;
    4.         public Luat(string fileName)
    5.         {
    6.             RuleItem e = new RuleItem();
    7.             List = e.GetData(fileName);
    8.         }
    9.         /*
    10.         *Suy dien tien voi logic menh de
    11.         -Input:+ Tap luat Rule={r1,r2,r3,…,rm}
    12.                 + Gia thiet (GT), ket luan (KL)
    13.         -Output: Return “true” neu GT => KL
    14.         *Method
    15.         TD = GT;      //TD: tap dich, GT: gia thuyet
    16.         T = FILTER(Rule, TD);     //loc rule co VT (ve trai) trong TD
    17.         While  <KL Є/ TD> and <T ≠ ø> do
    18.         {
    19.          r = Get(T);      
    20.         TD = TD Ū {q};               //r: left->q
    21.         Rule = Rule \ {r};            // luat nao da dung roi thi bo di    
    22.         T=FILTER(Rule,TD);         // luu y Rule nao ma loc ra tu TD da xuat hien roi thi khong lay lai
    23.         }
    24.         If (KL Є TD) then return “true”
    25.         Else return false
    26.         */
    27.         private void PrintGT(string title,List<string> gt)
    28.         {
    29.             string str=title+"{";
    30.             foreach (string s in gt)
    31.                 str += s + ",";
    32.             str += "}\n";
    33.             Console.WriteLine(str);
    34.         }
    35.         private void PrintRule(string title, List<RuleItem> rule)
    36.         {
    37.             string str = title + "{";
    38.             foreach (RuleItem r in rule)
    39.                 str += r.Code + ",";
    40.             str += "}\n";
    41.             Console.WriteLine(str);
    42.         }
    43.         public string KQ { get; set; }
    44.         public bool SuyDienTien(List<RuleItem> rules, List<string> gt, List<EventItem> kl)
    45.         {
    46.             //Lay tat ca ma cua gt
    47.             List<string> td = gt;
    48.             //Lay rule co VT chua cac gia thuyet
    49.             List<RuleItem> newRules= FILTER(rules, td);
    50.             List<RuleItem> vet = new List<RuleItem>();
    51.             //In
    52.             Console.WriteLine("----------------------------\n");
    53.             PrintRule("Rules=",rules);
    54.             PrintGT("TD=", gt);
    55.             PrintRule("T=", newRules);
    56.             int c = 1;
    57.             //
    58.             while (newRules.Count>0 && Check_KL_in_TL(kl, td) == false)            
    59.             {
    60.                 //r=GET(T)
    61.                 Console.WriteLine("Chay lan "+c.ToString()+"\n");
    62.                 foreach (RuleItem r in newRules)
    63.                 {
    64.                     if(td.IndexOf(r.Right)<0)
    65.                         td.Add(r.Right.Trim());
    66.                     rules.Remove(r);
    67.                     vet.Add(r);
    68.                 }
    69.                 newRules = FILTER(rules, td);
    70.                 PrintGT("TD=", gt);
    71.                 PrintRule("Rules=", rules);
    72.                 PrintRule("T=", newRules);
    73.                 c++;
    74.             }
    75.             PrintRule("VET=", vet);
    76.             return Check_KL_in_TL(kl, td);
    77.         }
    78.  
    79.         //
    80.         private List<RuleItem> FILTER(List<RuleItem> rules,  List<string> gt)
    81.         {
    82.             List<RuleItem> lst=new List<RuleItem>();
    83.             foreach (RuleItem r in rules)
    84.             {              
    85.                 //GT={a,b}
    86.                 //r1={a,b,c->k) - ko lay luat nay
    87.                 //r2={a->k) - Lay luat nay
    88.                 //r3={b->k) - Lay luat nay
    89.                 //r4={a,b->k) - Lay luat nay
    90.                 if (r.Left.Length <= gt.Count)
    91.                 {  
    92.                     int count = 0;
    93.                     foreach (string tt in gt)
    94.                     {
    95.                         if (r.Left.Contains(tt))
    96.                             count++;
    97.                     }
    98.                     if (count == r.Left.Length)
    99.                         lst.Add(r);
    100.                    
    101.                 }
    102.  
    103.             }
    104.             return lst;
    105.         }
    106.         //Kiem tra xem gia thuyet da suy ra ket luan chua
    107.         private bool Check_KL_in_TL(List<EventItem> kl, List<string> gt)
    108.         {
    109.             foreach (EventItem k in kl)
    110.             {
    111.                 foreach (string g in gt)
    112.                     if (g == k.Code)
    113.                         {
    114.                             KQ = k.Name;
    115.                             return true;
    116.                         }
    117.             }
    118.             return false;
    119.         }
    120.        
    121.     }

    Mr Thanh -KHMT1K8 - HAUI
    Đã mất công nghĩ thì nghĩ mẹ cái thật lớn vào !
    Y!H: trinhhoaithanh1905

  2. #2
    Ngày gia nhập
    02 2013
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    78

    Mình rất thích học về mấy cái này. Bạn làm luôn một cái tut về ứng dụng luôn đi

  3. #3
    Ngày gia nhập
    06 2017
    Bài viết
    1

    bác có thể cho em cả project được không ạ?

    c.ơn bác nhiều lắm

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn