logo资料库

人工智能试验报告之动物识别系统.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
人工智能实验报告 ----动物识别系统
产生式系统实现动物识别系统 一、实验目的 熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法。 运用产生系统运行机制实现动物识别系统,进一步了解和掌握产生式系统。 二、实验原理 产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本 概念就是产生式规则或产生式条件和操作对。在产生式系统中,论域的知识分为 两部分:用事实表示静态知识;用产生式规则表示推理过程和行为。 三、实验条件 硬件:PC 机。 实现语言:java 四、实验内容 建造动物识别系统(包括规则库和事实库),然后进行推理,即可以自己输 入任何的规则和事实,并基于这种规则和事实进行推理。 本系统采用正向推理规则实现动物识别系统。正向推理又称为试试驱动推 理、其一般策略是:先提供一批实事(数据)到总的数据库中。系统利用这些事 实与规则的前提相匹配,出发匹配成功的规则,把其结论作为新的事实添加到总 数据库中。继续上述过程,用更新过的总数据库的所有事实再与规则库中的另一 条规则匹配,用其结论再次修改总数据库的内容,直到没有课匹配的新规则,不 在有新的事实加到总数据库中为止。 已知 规则 1 P1 P2 规则 2 P3 规则 3 推出 P4 正向推理过程
五、具体设计 1、正向推理流程图 开始 初始化事实库 从规则中取 出第一条 规则 将规则的前 提部分与 事实库匹配 条件匹配 是 将规则的结论部分作为新事 实加入到综合数据库的初始 事实集中 是 否 是 是否存在下 一条规则 否 输出结果
2、相关数据结构 //用来放置规则的条件和结论的类 public class Rule { String result; ArrayList cause; //结论为字符串类型 //条件被放置在列表类中 public Rule(ArrayList cause, String result) { this.result = result; this.cause = cause; } } //该类实现了从 Rule.txt 文件中读取规则 public class ProduceRule { private ArrayList resultList; private ArrayList conditList; private List sumList; Scanner s; public ProduceRule() { resultList = new ArrayList(); 列表用于放置规则的结论部分 conditList = new ArrayList(); 列表用于放置规则的条件部分 sumList = new ArrayList(); 列表用来放置 resultList 和 conditList } 3、初始的事实库 IF 该动物有毛发 THEN 该动物是哺乳动物 //该 //该 //该 THEN 该动物是哺乳动物 IF 该动物有奶 IF 该动物有羽毛 THEN 该动物是鸟 IF 该动物会飞 IF 该动物会吃肉 THEN 该动物是食肉动物 IF 该动物有犬齿 AND 有爪 AND 眼盯前方 AND 会下蛋 THEN 该动物是鸟 THEN 该动物是 食肉动物 IF 该动物是哺乳动物 AND 有蹄 THEN 该动物是有蹄类动物 IF 该动物是哺乳动物 AND 是嚼反刍动物 THEN 该动物是有蹄类动物 IF 该动物是哺乳动物 AND 该动物是食肉动物 AND 是黄褐色 AND 身上有暗 斑点 THEN 该动物是金钱豹 IF 该动物是哺乳动物 AND 该动物是食肉动物 AND 是黄褐色 AND 身上有黑 色条纹 THEN 该动物是虎 IF 该动物是有蹄类动物 AND 有长脖子 AND 有长腿 AND 身上有暗斑点 THEN 该动物是长颈鹿 IF 该动物是有蹄类动物 AND 身上有黑色条纹 THEN 该动物是斑马 IF 该动物是鸟 AND 有长脖子 AND 有长腿 AND 不会飞 AND 有黑白二色
THEN 该动物是鸵鸟 IF 该动物是鸟 AND 会游泳 AND 不会飞 AND 有黑白二色 THEN 该动物是 企鹅 IF 该动物是鸟 AND 善飞 THEN 该动物是海燕 4 实验的相关结果 (1)输入该动物有羽毛,可得该动物是哺乳动物
(2)该动物是哺乳动物 该动物是食肉动物 是黄褐色 身上有黑色条纹,可 以退出该动物是虎。
(3)输入动物是食肉动物,黄褐色,身上有暗斑点,则提示输入更多有效 信息。 六、相关代码 *该类实现了推理过程*/ public class Thinker { private ArrayList userDemandList = new ArrayList(); private ArrayList infCause; private ArrayList infResult; private Rule rule; // 用户希望得到结果,是下面其中的某个动物 String[] str = new String[] { "该动物是虎", "该动物是金钱豹", "
该动物是长颈鹿", "该动物是企鹅", "该动物是鸵鸟", "该动物是斑马", "该动物是信天翁" }; List strList; public Thinker(ArrayList userDemandList) { this.userDemandList = userDemandList; strList = Arrays.asList(str); infCause = new ArrayList(); infResult = new ArrayList(); } /*该方法通过比较用户输入和规则列表中条件部分,判定用户输入是否包含 了某条规则的条件部分, * 若不是,就比较下条规则的条件,不停地循环,直至最后一条规则. * 若是,判定该条规则的结论是否为最终结论,若是,则返回结论!否则,判 断该条规则的结论是否应放置在用户输入列表中. * */ public String findCause(ArrayList rulesList) { /*判定用户输入是否为空,以及是否矛盾*/ if (userDemandList != null && isContradict(userDemandList)) { for (int i = 0; i < rulesList.size(); i++) { List causeList = new ArrayList( rulesList.get(i).cause.size()); for (String tempString : rulesList.get(i).cause) { causeList.add(tempString.trim()); } String result = new String(rulesList.get(i).result.trim()); if (userDemandList.containsAll(causeList)) if (strList.contains(result)) { return result; } else { if (!userDemandList.contains(result)) { userDemandList.add(result); if (!isContradict(userDemandList)) return null; i = 0; } else continue; } } }
分享到:
收藏