当前位置 : 主页 > 编程语言 > java >

人工智能-球星产生式系统实验报告

来源:互联网 收集:自由互联 发布时间:2022-06-30
实验目的 理解生产式系统结构原理与实际应用。 掌握生产式规则表示及规则库组件的实现方法。 熟悉和掌握生产式系统的运行机制,掌握基于规则推理的基本方法。 实验原理 产生式

实验目的

  • 理解生产式系统结构原理与实际应用。
  • 掌握生产式规则表示及规则库组件的实现方法。
  • 熟悉和掌握生产式系统的运行机制,掌握基于规则推理的基本方法。
  • 实验原理

           产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。在产生式系统中,论域的知识分为两部分:用事实表示静态知识;用产生式规则表示推理过程和行为。

    实验内容

  • 建立自己的生产式系统(包括规则库和事实),然后进行推理,即可以自己选择事实,并基于原有的规则和输入的事实进行推理。
  • 建造球星识别系统,根据输入的球星特征判断是哪一位球星或给出相应的回答。
  • 算法设计
  • 首先建立事实库

      事实库是程序开始的时候直接选择的,根据用户的需要选择,即要求用户选择球星的特征进行识别。如果未识别出来,则提示输入有误。

      球星的特征如下:

    球星特征

    西部第八

    西部第三

    东部第四

    东部第一

    西部第一

     

    火箭队

    雷霆队

    骑士队

    热火队

    勇士队

     

    35号

    13号

    12号

    30号

    3号

    23号

    前锋

    后卫

    中锋

     

     

     

    杜兰特

    哈登

    霍华德

    库里

    韦德

    詹姆斯

     

    建立静态规则库

      即建立产生式规则,采用产生中间试试的方法,便于建立和使用规则。

      为了方便设计,我们把要是别的球星限制在6个,这样所需的产生式规则就比较少,本算法一共有11种规则:

        R1:如果是西部第八,则球星为火箭队。

        R2:如果是西部第三,则球星是雷霆队。

        R3:如果是东部第一,则球星是骑士队。

        R4:如果是东部第四,则球星是热火队。

        R5:如果是西部第一,则球星是勇士队。

        R6:如果是雷霆队,且为35号且为前锋,则球星为杜兰特。

        R7:如果是火箭队,且为13号且为后卫,则球星为哈登。

        R8:如果是火箭队,且为12号且为中锋,则球星为霍华德。

        R9:如果是勇士队,且为30号且为后卫,则球星为库里。

        R10:如果是热火队,且为3号且为后卫,则球星为韦德。

        R11:如果是骑士队,且为23号且为前锋,则球星为詹姆斯。

    正向推导过程

      从已知事实出发,通过规则库求得结论,或者成为数据驱动方式,推理过程为:

            规则集中的规则前件与事实库中的事件进行匹配,得到符合要求的规则集,将规则集的后件替换到新的事实集作为一条新的事实集,重复这个过程,知道达到最终目标。

    实验结果及分析

      比如:西部第八    12号      中锋。则系统推理过程如下:

              事实集为 西部第八 12号 中锋。

              先从规则库中匹配R1,事实集变为 火箭队 12号 中锋。

              再次匹配规则集R8,获得球星霍华德。

    程序运行效果及关键代码

      人工智能-球星产生式系统实验报告_规则集

      人工智能-球星产生式系统实验报告_规则库_02

      人工智能-球星产生式系统实验报告_产生式规则_03

     

    /**
    * 初始化规则库
    * 每条规则为一个数组
    * 数组最后一个元素为结果,其余元素为条件
    **/
    ArrayList mRule1 = new ArrayList() { "西部第八", "火箭队" };
    ArrayList mRule2 = new ArrayList() { "西部第三", "雷霆队" };
    ArrayList mRule3 = new ArrayList() { "东部第一", "骑士队" };
    ArrayList mRule4 = new ArrayList() { "东部第四", "热火队" };
    ArrayList mRule5 = new ArrayList() { "西部第一", "勇士队" };
    ArrayList mRule6 = new ArrayList() { "雷霆队", "35号", "前锋", "杜兰特" };
    ArrayList mRule7 = new ArrayList() { "火箭队", "13号", "后卫", "哈登" };
    ArrayList mRule8 = new ArrayList() { "火箭队", "12号", "中锋", "霍华德" };
    ArrayList mRule9 = new ArrayList() { "勇士队", "30号", "后卫", "库里" };
    ArrayList mRule10 = new ArrayList() { "热火队", "3号", "后卫", "韦德" };
    ArrayList mRule11 = new ArrayList() { "骑士队", "23号", "前锋", "詹姆斯" };

     

    for (int i = 0; i <= mR.Count - 2; i++)
    {
    bool t = ((IList)userChoose).Contains(mR[i]);
    if (t)
    {
    zhong.Add(mR[i]);
    ruleStr = ruleStr + "evidence('" + mR[i].ToString() + "')";
    }
    if (t && i == mR.Count - 2)
    {
    for (int j = 0; j < zhong.Count; j++)
    {
    userChoose.Remove(zhong[j]);
    }
    userChoose.Add(mR[mR.Count - 1]);
    if (mR[mR.Count - 1].ToString() == "火箭队" || mR[mR.Count - 1].ToString() == "雷霆队" || mR[mR.Count - 1].ToString() == "骑士队" || mR[mR.Count - 1].ToString() == "热火队" || mR[mR.Count - 1].ToString() == "勇士队")
    {
    ruleStr = "itIs('" + mR[mR.Count - 1].ToString() + "'):-" + ruleStr;
    }
    else
    {
    ruleStr = "starIs(" + mR[mR.Count - 1].ToString() + "):-" + ruleStr;
    }
    zhong.Clear();
    ruleStrs = ruleStrs +"\n"+ ruleStr ;
    }
    if (!t)
    {
    zhong.Clear();
    ruleStr = "";
    break;
    }
    }

    实验总结

           本系统的规则库是静态的,不能很好的进行增删改操作,这使得在规则的情况下不能及时改变,但是该系统已经能基本满足,对输入的事实给出相应的回答,判断是那个球星。理解了生产式系统结构原理与实际应用。能够掌握生产式规则表示及规则库组件的实现方法。熟悉和掌握了生产式系统的运行机制,掌握了基于规则推理的基本方法。

    【版权声明】本博文著作权归作者所有,任何形式的转载都请联系作者获取授权并注明出处!

    【重要说明】本文为本人的学习记录,论点和观点仅代表个人而不代表当时技术的真理,目的是自我学习和有幸成为可以向他人分享的经验,因此有错误会虚心接受改正,但不代表此刻博文无误!

    【Gitee地址】秦浩铖:​​https://gitee.com/wjw1014​​


    上一篇:人工智能 - 球星产生式系统
    下一篇:没有了
    网友评论