实验二 产生式系统推理
一 实验目的
1 熟悉和掌握产生式系统的构成和运行机制;
2 掌握基于规则推理的基本方法和技术,掌握正确的正向推理和逆向推理方法; 3 熟悉在具体问题中如何实现正向推理和逆向推理的求解流程。
二 实验内容
以动物识别系统为例,用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作,开发能进行正确的正向推理或反向推理的推理机。 1 动物分类规则集(Ⅰ)
(1)若某动物有奶,则它是哺乳动物。 (2)若某动物有毛发,则它是哺乳动物。 (3)若某动物有羽毛,则它是鸟。 (4)若某动物会飞且生蛋,则它是鸟。
(5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。 (6)若某动物是哺乳动物且吃肉,则它是食肉动物。 (7)若某动物是哺乳动物且有蹄,则它是有蹄动物。 (8)若某动物是有蹄动物且反刍食物,则它是偶蹄动物。 (9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。 (10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。
(11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是长颈鹿。 (12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。 (13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。 (14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。 (15)若某动物是鸟且善飞且不怕风浪,则它是海燕。 下面是该规则集所形成的(部分)推理网络:
14
老虎 金钱豹 长颈鹿 有黑色条纹 黄褐色 食肉动物 有黑色斑点 有蹄动物 哺乳动物 有蹄 有爪 有犬齿 目盯前方 有奶 有毛发 吃肉 长腿 长脖子 有暗斑点 图7 动物识别系统部分推理网络 2 问题描述
由上述动物识别规则组成规则库,推理机分别采用正向推理算法或反向推理算法,实现 对动物的查询。
如给出初始事实: F1:某动物有毛发 F2:吃肉 F3:黄褐色 F4:有黑色条纹
目标条件为:该动物是什么? 3 规则库扩充
在上述规则集(Ⅰ)基础上增加以下规则集(Ⅱ): (1)兔子:有毛发,有奶,善跳跃,唇裂; (2)猫:有毛发,有奶,善捕鼠,脚有肉垫;
(3)犀牛:有毛发,有奶,鼻子上有角,褐色,皮糙肉后,皮糙肉厚,有蹄; (4)熊猫:有毛发,有奶,黑眼圈,四肢短小; (5)鹦鹉:鸟类,上嘴鹰钩,会模仿人说话; (6)鸭子:鸟类,腿短,嘴扁平,善潜水游泳; (7)鹰:鸟类,上嘴鹰钩,有爪,吃肉;
(8)鸭子:有羽毛,卵生,善游泳,嘴扁平,腿短;
(9)鹅:有羽毛,卵生,善潜水游泳,白色或黑色,颈长,嘴大,腿长,颈部有肉只凸起; (10)鸦:有羽毛,卵生,黑色,嘴大;
(11)鹰:有羽毛,卵生,有爪,吃肉,上嘴鹰钩; (12)鹦鹉:有羽毛,卵生,上嘴鹰钩,能模仿人说话;
(13)青蛙:卵生,生活在水中,生活在陆地,有皮肤呼吸,用肺呼吸,皮肤光滑,吃昆虫,
15
会变色;
(14)蝾螈:卵生,生活在水中,生活在陆地,有皮肤呼吸,用肺呼吸,吃昆虫,皮肤粗糙,四肢扁,背部黑色;
(15)蟾蜍:卵生,生活在水中,生活在陆地,有皮肤呼吸,用肺呼吸,吃昆虫,皮肤粗糙; (16)比目鱼:用鳃呼吸,身体有鳍,生活在海洋中,身体扁平,两眼在头部同侧; (17)鲫鱼:用鳃呼吸,身体有鳍,生活在淡水中,身体扁平,头高尾部窄; (18)蛇:生活在陆地,用肺呼吸,胎生,身体有鳞或甲,身体圆而细长,吃小动物; (19)壁虎:生活在陆地,用肺呼吸,胎生,身体有鳞或甲,有四肢,尾巴细长易断,吃昆虫;
(20)乌龟:生活在陆地,用肺呼吸,胎生,身体有鳞或甲,身体圆而扁,有坚硬的壳; (21)玳瑁:生活在陆地,用肺呼吸,胎生,身体有鳞或甲,壳为黄褐色,皮肤光滑,有黑斑;
(22)鳄鱼:生活在陆地,用肺呼吸,胎生,身体有鳞或甲,有四肢,善游泳,皮硬黑褐色。
要求在动物分类规则集(Ⅰ)的基础上添加上述22条知识,共构成29种动物的知识库系统,对原有动物分类系统进行扩充和修改。
三 实验要求
1 以产生式推理模式为基础,实现小型动物分类系统,推理方法可以采用正向推理或反向推理;
2 要求表示规则的语言必须能体现出规则前提和结论的对应关系,必须能体现出前提和结论中的逻辑关系;
3 要求能对规则库进行动态地增加、删除和修改操作;
4要求用界面显示要查询的初始事实、推理方法、推理中用到的规则和结论。
四 实验背景知识
1 产生式系统
产生式系统是人工智能系统的一种最典型最普遍的结构形式,许多专家系统都是以产生式系统的形式实现的,有的机器学习系统也是用产生式系统实现的。
产生式系统由三部分组成:产生式规则库、推理机和动态数据库,其结构如图所示:
产生式规则库 推理机 动态数据库
图8 产生式系统结构 2 产生式的一般形式 产生式的一般形式为:
16
前件→后件
其中,前件就是前提,后件是结论或动作,前件和后件可以是由逻辑运算符AND、OR、NOT组成的表达式。
产生式规则的语义是:如果前提满足,则可得结论或者执行相应的动作,即后件由前件来触发。所以,前件是规则的执行条件,后件是规则体。 3 产生式规则的程序语言实现
在实践中人们往往把规则的前提部分作成形如: 条件1AND条件2AND…AND条件n 或
条件1OR条件2OR…OR条件m 的形式(其中的条件可以带否定词); 把规则结论部分作成形如
断言1/动作1AND断言2/动作2AND…AND断言k/动作k 或
断言1/动作1OR断言2/动作2OR…OR断言k/动作k 的形式,或者进一步简化成 断言/动作 即仅有一项的形式。
如果推理机不能直接支持上述的谓词或元组表示形式,那么,可用通常的记录、数组、 结构、函数等数据结构来实现规则中的条件和断言,用通常的赋值式、运算式、函数、过程等形式实现规则中的动作。
表示规则的语言在程序执行时必须能体现出规则前提和结论的对应关系,必须能体现出前提和结论中的逻辑关系。例如我们完全可以用一个二元组:
(<前件>,<后件>)
表示一个产生式规则。
五 实验关键技术
1 产生式系统推理算法
产生式系统的推理可分为正向推理和反向推理两种基本方式。 (1)正向推理
步1 将初始事实/数据置入动态数据库;
步2 用动态数据库中的事实/数据,匹配/测试目标条件,若目标条件满足,则推理成功,结束。
步3 用规则库中各规则的前提匹配动态数据库中的事实/数据,将匹配成功的规则组成待用规则集;
步4 若待用规则集为空,则运行失败,退出。
步5 将待用规则集中各规则的结论加入动态数据库,或者执行其动作,转步2;
17
(2)反向推理
步1 将初始事实/数据置入动态数据库,将目标条件置入目标链; 步2 若目标链为空,则推理成功,结束。
步3 取出目标链中第一个目标,用动态数据库中的事实/数据同其匹配,若匹配成功,转步2;
步4 用规则集中的各规则的结论同该目标匹配,若匹配成功,则将第一个匹配成功且未用过的规则的前提作为新的目标,并取代原来的父目标而加入目标链,转步3; 步5 若该目标是初始目标,则推理失败,退出。
步6 将该目标的父目标移回目标链,取代该目标及其兄弟目标,转步3; 2 事实和规则程序代码示例
事实多用数字来表征。
规则集在程序中可用数组来存放,如: bool enfact[factnum]; struct rule { }; rule rules[rulenum]={{{2,-1},24},{{3,-1},24},{{7,-1},23},{{8,9,-1},23}, {{24,0,1,4,-1},22},{{24,5,-1},22},{{24,6,-1},25},{{22,21,20,-1},26}, {{22,21,19,-1},27},{{25,15,16,21,17,-1},28},{{25,18,20,-1},29}, {{23,10,15,16,11,-1},30},{{23,10,12,11,-1},31},{{23,13,14,-1},32}} 规则集也可以记录在 .txt文件中,在程序中读入文件,.txt文件示例如下:
int con[10]; int res;
图9 规则集文件示例
上述示例中的数字代表的是规则中的一些知识,这里只作示例,具体代表内容不详细介绍。
18
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库人工智能实验指导书+作业展示(4)在线全文阅读。
相关推荐: