人工智能导论课程实验指导书 廉师友编 计算机工程实验室 2007年3月
人工智能导论课程实验指导书 廉师友编 计算机工程实验室 2007 年 3 月
目录 1.小型专家系统设计与实现
1 目 录 1. 小型专家系统设计与实现………………………………………………………..2
专家系统涉及人工智能导论课程的大部分内容,而且实践性和应用性都很 强。因此,本课程将专家系统设计与实现作为一个上机实验项目。该实验是一个 设计性实验,它对加深课程内容的理解和掌握,培养学生运用所学知识开发智能 系统的能力有重要意义。 、实验名称 小型专家系统设计与实现 二、实验目的 加深理解专家系统的结构原理与实际应用。 2.初步掌握知识获取的基本方法。 3.掌握产生式规则知识表示方法及其编程实现方法。 4.初步掌握知识库的组建方法 5.加深理解推理机的算法原理并初步掌握其编程实现方法。 三、实验内容 运用所学知识,设计并编程实现一个小型专家系统(如分类、诊断、预测等 类型)。 四、基本要求 具体应用领域自选,具体系统名称自定;但所做系统绝对不能雷同。 2.用产生式规则作为知识表示,用产生系统实现该专家系统。 3.可用 PROLOG语言编程并参考下面示例程序;但也可用其他语言另行编 程。 4.所实现的专家系统必须上机运行演示;程序运行时,应有人机对话过程 5.系统完成后,要提交实验报告。 五、实验步骤 具体工作及步骤为: 1.选题。 2.系统分析。 3.知识获取与知识表示选择/设计 4.知识库组建。 5.推理机选择/编制。 6.系统调试与测试:可先运行一两个简单的 PROLOG程序,以熟悉语言环 境;接着运行示例程序;然后编辑、调试、测试自己的系统程序 7.撰写实验报告
2 专家系统涉及人工智能导论课程的大部分内容,而且实践性和应用性都很 强。因此,本课程将专家系统设计与实现作为一个上机实验项目。该实验是一个 设计性实验,它对加深课程内容的理解和掌握,培养学生运用所学知识开发智能 系统的能力有重要意义。 一、实验名称 小型专家系统设计与实现 二、实验目的 1. 加深理解专家系统的结构原理与实际应用。 2. 初步掌握知识获取的基本方法。 3. 掌握产生式规则知识表示方法及其编程实现方法。 4. 初步掌握知识库的组建方法。 5. 加深理解推理机的算法原理并初步掌握其编程实现方法。 三、实验内容 运用所学知识,设计并编程实现一个小型专家系统(如分类、诊断、预测等 类型)。 四、基本要求 1. 具体应用领域自选,具体系统名称自定;但所做系统绝对不能雷同。 2. 用产生式规则作为知识表示,用产生系统实现该专家系统。 3. 可用 PROLOG 语言编程并参考下面示例程序;但也可用其他语言另行编 程。 4. 所实现的专家系统必须上机运行演示;程序运行时,应有人机对话过程。 5. 系统完成后,要提交实验报告。 五、实验步骤 具体工作及步骤为: 1. 选题。 2. 系统分析。 3. 知识获取与知识表示选择/设计。 4. 知识库组建。 5. 推理机选择/编制。 6. 系统调试与测试:可先运行一两个简单的 PROLOG 程序,以熟悉语言环 境;接着运行示例程序;然后编辑、调试、测试自己的系统程序。 7. 撰写实验报告
六、系统示例 考虑到本实验有一定难度,下面给出一个“小型动物分类专家系统”示例, 以供参考。 1.动物分类规则集 (1)若某动物有奶,则它是哺乳动物。 (2)若某动物有毛发,则它是哺乳动物。 (3)若某动物有羽毛,则它是鸟 (4)若某动物会飞且生蛋,则它是鸟 (5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。 (6)若某动物是哺乳动物且吃肉,则它是食肉动物。 (⑦)若某动物是哺乳动物且有蹄,则它是有蹄动物。 (8)若某动物是有蹄动物且反刍食物,则它是偶蹄动物。 (9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎 (10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹 (11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是 长颈鹿。 (12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。 (13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。 (14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。 (15)若某动物是鸟且善飞且不怕风浪,则它是海燕 下面是该规则集所形成的(部分)推理网络: 老虎 金钱豹 长颈鹿 有黑色条纹 食肉动物 有黑色斑点 有蹄动物 哺乳动物 有蹄 有爪)(有犬齿入(日町前方)(有奶)(有毛发)(吃肉)(长腿)(长脖子)(有暗斑点
3 六、系统示例 考虑到本实验有一定难度,下面给出一个“小型动物分类专家系统”示例, 以供参考。 1. 动物分类规则集 (1)若某动物有奶,则它是哺乳动物。 (2)若某动物有毛发,则它是哺乳动物。 (3)若某动物有羽毛,则它是鸟。 (4)若某动物会飞且生蛋,则它是鸟。 (5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。 (6)若某动物是哺乳动物且吃肉,则它是食肉动物。 (7)若某动物是哺乳动物且有蹄,则它是有蹄动物。 (8)若某动物是有蹄动物且反刍食物,则它是偶蹄动物。 (9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。 (10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。 (11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是 长颈鹿。 (12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。 (13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。 (14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。 (15)若某动物是鸟且善飞且不怕风浪,则它是海燕。 下面是该规则集所形成的(部分)推理网络: 老虎 有黑色条纹 黄褐色 食肉动物 哺乳动物 有爪 有犬齿 目盯前方 有奶 有毛发 吃肉 金钱豹 有黑色斑点 长颈鹿 有蹄动物 有蹄 长腿 长脖子 有暗斑点
2.源程序 An Animal Classifying Expert System database xpositive(symbol, symbol) xnegative(symbol, symbol run animal is(symbol) positive(symbol, symbol negative (symbol, symbol) remember(symbol, symbol, symbol) ask(symbol, symbol) run run animal is(X),! write("\nYour animal may be a(n), X) nl, nl, clear facts write(\nUnable to determine what") write( your animal is. \n\n), clear facts. (X,Y) positive(X, Y): -not(xnegative(X, y)), ask(X, y) negative (X, Y): -xnegative(X, y) negative(X, Y): -not(xpositive(X, Y)), ask(X, Y) write(x, it Y,\n") readIn(Reply) remember(X, Y, Reply) remember(X, Y, y): -asserta(xpositive(, Y)) remember(X, Y, n): -assertaxnegative(X, Y)), fail. clear facts: -retract(xpositive(, )),fail clear facts: -retract(xnegative()),fail clear facts: -write(\n\nPlease press the space bar to Exit") Knowledge Base animal is(cheetah) it is(ca positive (has, tawny color) positive (has, black spots)
4 2. 源程序 /* An Animal Classifying Expert System */ database xpositive(symbol,symbol) xnegative(symbol,symbol) predicates run animal_is(symbol) it_is(symbol) positive(symbol, symbol) negative(symbol, symbol) clear_facts remember(symbol, symbol, symbol) ask(symbol, symbol) goal run. clauses run:- animal_is(X),!, write("\nYour animal may be a(n) ", X), nl, nl, clear_facts. run:- write("\nUnable to determine what"), write("your animal is. \n\n"), clear_facts. positive(X, Y):-xpositive(X, Y),!. positive(X, Y):-not(xnegative(X, Y)), ask(X, Y). negative(X, Y):-xnegative(X,Y), !. negative(X, Y):-not(xpositive(X, Y)), ask(X, Y). ask(X, Y):- write(X, " it ", Y, "\n"), readln(Reply), remember(X, Y, Reply). remember(X, Y, y):-asserta(xpositive(X, Y)). remember(X, Y, n):-asserta(xnegative(X, Y)), fail. clear_facts:-retract(xpositive(_, _)), fail. clear_facts:-retract(xnegative(_, _)), fail. clear_facts:-write("\n\nPlease press the space bar to Exit"), readchar(_). /* Knowledge Base */ animal_is(cheetah):- it_is(carnivore), positive(has, tawny_color), positive(has, black_spots)
mal is(tiger) positive(has, tawny colo positive(has, black stripes) animal is(giraffe is(ungulate) positive(has, long neck positive(has, long legs) positive (has, dark spots animal is(zebra) (ungulate) ive(has, black stripes) animal is(ostrich) it is(bird) negative(does, fly positive(has, long neck) positive(has, long legs positive(has, black and white color animal is(penguin) t is(bird) negative(does, fly) positive(does, swim) positive(has, black and white color animal is(albatros t is(bird) itive(does, fly well) t is(mammal) positive(has, hair) positive(does, give milk) it is (bird) positive(has, feathers it is (bird) positive(does, lay eggs positive( does, eat meat (carnivore) positive(has, pointed teeth) positive(has, claws positive(has, forward eyes) it is(ungulate): it is(mammal)
5 animal_is(tiger):- it_is(carnivore), positive(has, tawny_color), positive(has, black_stripes). animal_is(giraffe):- it_is(ungulate), positive(has, long_neck), positive(has, long_legs), positive(has, dark_spots). animal_is(zebra):- it_is(ungulate), positive(has, black_stripes). animal_is(ostrich):- it_is(bird), negative(does, fly), positive(has, long_neck), positive(has, long_legs), positive(has, black_and_white_color). animal_is(penguin):- it_is(bird), negative(does, fly), positive(does, swim), positive(has, black_and_white_color). animal_is(albatross):- it_is(bird), positive(does, fly_well). it_is(mammal):- positive(has, hair). it_is(mammal):- positive(does, give_milk). it_is(bird):- positive(has, feathers). it_is(bird):- positive(does, fly), positive(does, lay_eggs). it_is(carnivore):- positive(does, eat_meat). it_is(carnivore):- it_is(mammal), positive(has, pointed_teeth), positive(has, claws), positive(has,forward_eyes). it_is(ungulate):- it_is(mammal)
positive(has, hooves) it is(mammal) positive(does, chew cud) 需要说明的是,严格来讲,该专家系统程序中并无显式的推理机,而是利用 了PROL0G语言本身的推理机制实现推理的。这就是说,用PROL0G编写专家系统 程序,可以省去推理机部分。如果用其他语言编程,推理机则是必不可少的。当 然,用PROL0G编写专家系统程序,也可以不用它自身的推理机作为所实现的专 家系统的推理机,而用户自己重新编写一个显式的推理机,这可根据问题和需要 而定。如果要重新编写推理机,一般说来,规则就要用 PROLOG的事实来实现。 知识库就要用 PROLOG的动态数据库来实现。 当然,以上实习也可用C或C+编程,但工作量要大得多 、实验报告 实验报告用学校统一的实验报告纸书写,表头严格按其要求填写,其中“实 验名称”后填:小型专家系统设计与实现。下面是实验报告的基本内容和书写格 式 、实验目的 加深对专家系统的理解,初步掌握专家系统的设计与实现方法。 二、实验内容 运用所学知识,设计并编程实现一个小型专家系统 实验步骤 1.选题 2.系统分析。 3.知识获取与知识表示选择/设计。 4.知识库组建。 5.推理机选择/编制 6.系统调试与测试 四、实验结果 1.系统名称 〈所做系统的名称 2.系统概述 (包括所做系统的背景和主要功能等。) 3.产生式规则集文本 4.系统运行演示过程
6 positive(has, hooves). it_is(ungulate):- it_is(mammal), positive(does, chew_cud). 需要说明的是,严格来讲,该专家系统程序中并无显式的推理机,而是利用 了 PROLOG 语言本身的推理机制实现推理的。这就是说,用 PROLOG 编写专家系统 程序,可以省去推理机部分。如果用其他语言编程,推理机则是必不可少的。当 然,用 PROLOG 编写专家系统程序,也可以不用它自身的推理机作为所实现的专 家系统的推理机,而用户自己重新编写一个显式的推理机,这可根据问题和需要 而定。如果要重新编写推理机,一般说来,规则就要用 PROLOG 的事实来实现。 知识库就要用 PROLOG 的动态数据库来实现。 当然,以上实习也可用 C 或 C++编程,但工作量要大得多。 七、实验报告 实验报告用学校统一的实验报告纸书写,表头严格按其要求填写,其中“实 验名称”后填:小型专家系统设计与实现。下面是实验报告的基本内容和书写格 式。 —————————————————————————————————— 一、实验目的 加深对专家系统的理解,初步掌握专家系统的设计与实现方法。 二、实验内容 运用所学知识,设计并编程实现一个小型专家系统。 三、实验步骤 1. 选题。 2. 系统分析。 3. 知识获取与知识表示选择/设计。 4. 知识库组建。 5. 推理机选择/编制。 6. 系统调试与测试。 四、实验结果 1. 系统名称 〈所做系统的名称〉 2. 系统概述 (包括所做系统的背景和主要功能等。) 3. 产生式规则集文本 4. 系统运行演示过程
(1)输入的初始事实或数据: (2)系统运行时产生的推理树(网) (3)输出的结果 5.源程序清单
7 (1) 输入的初始事实或数据: (2) 系统运行时产生的推理树(网): (3) 输出的结果: 5. 源程序清单 ——————————————————————————————————