人工智能导论课程实验指导书廉师友编计算机工程实验室2007年3月1目录1.小型专家系统设计与实现………………………………………………………..22专家系统涉及人工智能导论课程的大部分内容,而且实践性和应用性都很强。因此,本课程将专家系统设计与实现作为一个上机实验项目。该实验是一个设计性实验,它对加深课程内容的理解和掌握,培养学生运用所学知识开发智能系统的能力有重要意义。一、实验名称小型专家系统设计与实现二、实验目的1.加深理解专家系统的结构原理与实际应用。2.初步掌握知识获取的基本方法。3.掌握产生式规则知识表示方法及其编程实现方法。4.初步掌握知识库的组建方法。5.加深理解推理机的算法原理并初步掌握其编程实现方法。三、实验内容运用所学知识,设计并编程实现一个小型专家系统(如分类、诊断、预测等类型)。四、基本要求1.具体应用领域自选,具体系统名称自定;但所做系统绝对不能雷同。2.用产生式规则作为知识表示,用产生系统实现该专家系统。3.可用PROLOG语言编程并参考下面示例程序;但也可用其他语言另行编程。4.所实现的专家系统必须上机运行演示;程序运行时,应有人机对话过程。5.系统完成后,要提交实验报告。五、实验步骤具体工作及步骤为:1.选题。2.系统分析。3.知识获取与知识表示选择/设计。4.知识库组建。5.推理机选择/编制。6.系统调试与测试:可先运行一两个简单的PROLOG程序,以熟悉语言环境;接着运行示例程序;然后编辑、调试、测试自己的系统程序。7.撰写实验报告。3六、系统示例考虑到本实验有一定难度,下面给出一个“小型动物分类专家系统”示例,以供参考。1.动物分类规则集(1)若某动物有奶,则它是哺乳动物。(2)若某动物有毛发,则它是哺乳动物。(3)若某动物有羽毛,则它是鸟。(4)若某动物会飞且生蛋,则它是鸟。(5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。(6)若某动物是哺乳动物且吃肉,则它是食肉动物。(7)若某动物是哺乳动物且有蹄,则它是有蹄动物。(8)若某动物是有蹄动物且反刍食物,则它是偶蹄动物。(9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。(10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。(11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是长颈鹿。(12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。(13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。(14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。(15)若某动物是鸟且善飞且不怕风浪,则它是海燕。下面是该规则集所形成的(部分)推理网络:老虎黄褐色有黑色条纹食肉动物哺乳动物有毛发有奶吃肉有爪有犬齿目盯前方金钱豹有黑色斑点长颈鹿有蹄动物有蹄长腿长脖子有暗斑点42.源程序databasexpositive(symbol,symbol)xnegative(symbol,symbol)predicatesrunpositive(symbol,symbol)negative(symbol,symbol)clear_factsremember(symbol,symbol,symbol)ask(symbol,symbol)goalrun.clausesrun:-animal_is(X),!,write(\nYouranimalmaybea(n),X),nl,nl,clear_facts.run:-write(\nUnabletodeterminewhat),write(youranimalis.\n\n),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\nPleasepressthespacebartoExit),readchar(_).animal_is(cheetah):-it_is(carnivore),positive(has,tawny_color),positive(has,black_spots).5animal_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),6positive(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.系统运行演示过程7(1)输入的初始事实或数据:(2)系统运行时产生的推理树(网):(3)输出的结果:5.源程序清单——————————————————————————————————