人工智能实验指导书.doc_第1页
人工智能实验指导书.doc_第2页
人工智能实验指导书.doc_第3页
人工智能实验指导书.doc_第4页
人工智能实验指导书.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人工智能实验指导书 人工智能实验指导书计算机科学与技术系1 第 页人工智能实验指导书目 录实验一 Turbo Prolog系统认识实验(2学时)2实验二 求N!及Fibonacci序列问题实验(3学时)5实验三 梵塔问题实验(3学时)6实验四 装错信封问题(4学时)9实验五 小型专家系统设计与实现(4学时)12实验一 Turbo Prolog系统认识实验(2学时)一、实验目的1、了解PROLOG解释器;2、了解PROLOG语言中常量、变量的表示方法;3、了解利用PROLOG进行事实库、规则库的编写方法;4、了解利用PROLOG中的谓词asserta和retract进行数据管理。二、实验要求1、熟悉Prolog运行环境,包括硬件与软件环境;2、学习示例程序,分析其功能;3、写出Example 1、Example 11、Example 15示例程序的功能;4、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问;5、练习利用PROLOG中的谓词asserta和retract进行数据管理。三、实验设备网络计算机,Turbo prolog教学软件。四、实验内容及步骤一)实验内容:1、熟悉Turbo prolog的运行环境,包括所用的机器的硬件与软件环境。2、学习使用Turbo prolog,包括进入Prolog主程序、编辑源程序、修改环境目录、退出等基本操作。3、学习Turbo prolog的简单程序结构,掌握分析问题、询问解释技巧。4、了解PROLOG语言中常量、变量的表示方法;5、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问;6、利用PROLOG中的谓词asserta和retract进行数据管理。二)实验步骤:1、启动Windows操作环境。2、 打开目录,执行prolog应用程序,启动Turbo prolog,并按空格键(SPACE)集成开发环境。3、选择Setup项,打开下拉菜单,选择Directories项,将工作目录进行修改,按Esc键退出,选择Save Configuration项,保存修改。4、选择Files项,打开下拉菜单,选择Load项,选择要打开的示例程序,选择Example 1示例程序,再选择Edit项,可以进行编辑源程序。5、编辑之后,可以选择Run项,执行程序,可以在Dialog窗口进行询问,即外部目标的执行,并分析程序之功能。6、仿前例,运行Example 11、Example 15,分析程序功能。7、退出,选择Quit项,可以退出Turbo Prolog程序,返回到Windows环境。五、源程序Example 1:domains person, activity = symbolpredicates likes(person,activity)clauses likes(ellen,tennis). likes(john,football). likes(tom,baseball). likes(eric,swimming). likes(mark,tennis). likes(bill,X) if likes(tom,X).Example 11: domains namelist = name* name = symbolpredicates member(name,namelist).clauses member(Name,Name|_). member(Name,_|Tail) if member(Name,Tail).Example 15: domains name = symbolpredicates father(name,name) everybodyclauses father(leonard,katherine). father(carl,jason). father(carl,marilyn). everybody if father(X,Y), write(X, is ,Y,s fathern) and fail.- 17 -实验二 求N!及Fibonacci序列问题实验(3学时)一、实验目的掌握Turbo prolog软件编程使用方法;掌握Prolog程序的各域段含义;初步学习分析、运用递归方法解决问题。二、实验设备网络计算机,Turbo prolog教学软件。三、实验内容及步骤一)Fibonacci序列问题描述:数字的Fibonacci序列是个正整数序列,序列头两个数均为1,其余数为其前两个数相加得到,该序列排列如下:1,1,2,3,5,8,13,21,34,55Fibonacci序列通式为:F1=1F2=1Fn=Fn-1+Fn-2二)实验内容:1、进一步熟悉Turbo prolog的运行环境,程序调试的方法;2、初步掌握递归原理,了解问题递归的详细过程。3、理解递归停止条件对整个递归过程的作用。4、写出求N!及Fibonacci序列问题的Prolog程序。三)实验步骤:1、启动prolog编辑环境,编辑求N!及Fibonacci序列源程序;2、运行程序,分析结果;3、尝试修改程序达到同样的目的。实验三 梵塔问题实验(3学时)一、实验目的1、掌握PROLOG编制递归程序的方法:边界条件与递归部分的设计;2、掌握Prolog程序的各域段含义;3、学会分析、运用递归方法解决问题。二、实验要求1、分析汉诺塔问题,找出问题本身存在的递归性,编制程序;2、显示汉诺塔问题中圆盘的移动次序;3、归纳出圆盘数目与移动步骤之间的数学关系;4、分析递归问题的实质。三、实验设备网络计算机,Turbo prolog教学软件。四、实验内容及步骤一)问题描述: 如上图,目的是把左边的所有盘子移到右边的杆子上。一次只能移动一个盘子,你可以使用中间的杆子作为临时存放盘子的地方。在移动的过程中,小盘子必须放在大盘子之上。二)分析问题:如果盘子只有两三个,是很容易解决的。但是随着盘子数目的增加,问题就变得非常难解了。 事实上,已经通过数学证明过了,最少的移动次数是2,n为盘子的数目。最早提出这个问题的人设定的盘子数目为64,这就是说需要2=18446744073709551615次移动,假设计算机每秒钟能够计算10,000,000(一千万)次,那也需要58494年,所以你千万不要试图使用此程序来解较大的数。让我们来看看如何用递归来解决这个问题:如果只有一个盘子,直接移过去就行了,这是递归的边界条件。如果要移动N个盘子,就要分三步走:1、把N-1个盘子移动到中间的杆子上(把右边的杆子作为临时存放盘子的位置)。 2、把最后一个盘子直接移到右边的杆子上。 3、最后把中间杆子上的盘子移到右边的杆子上(把左边的杆子作为临时存放盘子的位置)。 上面第一、三步用到了递归。我们看到,通过递归把N个盘子的问题变成了两个N-1个盘子的问题。如此下去,最后就变成了2个一个盘子的问题了,这也就是说问题被解决了。三)实验内容:1、分析汉诺塔问题,找出问题本身存在的递归性。2、分析递归原理,熟悉问题递归的详细过程。3、编写求梵塔问题的Prolog程序。4、显示汉诺塔问题中圆盘的移动次序。5、更改圆盘数量,了解问题解决的递归过程。四)实验步骤:1、启动prolog编辑环境,编辑hanoi源程序;2、运行程序,分析结果;3、重复比较圆盘数目,根据其求解过程得到圆盘数量与步骤数目之间的规律。归纳并理解问题递归的实质。 五、源程序hanoi(N):-move(N,left,middle,right).move(1,A,_,C):-inform(A,C),!.move(N,A,B,C):-N1 is N-1,move(N1,A,C,B),inform(A,C),move(N1,B,A,C).inform(Loc1, Loc2):-nl,write(Move a disk from -Loc1- to -Loc2).主程序为hanoi,它的参数为盘子的数目。它调用递归谓词move来完成任务。三个杆子的名字分别为left、middle、right。 第一个move子句是边界情况,即只有一个盘子时,直接调用inform显示移动盘子的方法。后面使用cut,是因为:如果只有一个盘子,就是边界条件,无需再对第二条子句进行匹配了。 第二个move子句为递归调用,首先把盘子数目减少一个,再递归调用move,把N-1个盘子从A杆通过C杆移到B杆,再把A杆上的最后一个盘子直接从A杆移到C杆上,最后再递归调用move,把B杆上的N-1个盘子通过A杆移到C杆上。这里的杆子都是使用变量来代表的,A、B、C杆可以是left、middle、right中的任何一个,这是在移动的过程中决定的。 inform,把移动过程通过write谓词写出,由于write只能有一个参数,所以使用“-”操作符相连。实验四 装错信封问题(4学时)一、实验目的1、进一步掌握PROLOG编制递归程序的方法;2、理解谓词delete、permutation、some_element_right在程序中的作用。二、实验要求1、分析该问题的实质以及其中存在的递归作用;2、利用列表数据结构编写出装错信封问题的程序;3、联系前面的全排列问题理解列表数据结构的作用。三、实验设备网络计算机,Turbo prolog教学软件。四、实验内容及步骤一)问题描述:糊涂先生给他的五个朋友写信,他写了五封信,但是当他的朋友收到信后,都告诉他:“你的信寄错了”。那么请你计算一下:出现这种情况的概率有多少?(假设糊涂先生是随机地往信封里装信),你能不能把所有的情况都列出来呢?二)分析问题及编写程序:我们先来分析一下问题。往五个不同的信封里装五封不同的信,一共有5!=120种装法,这实际上是5封信的全排列。由于所有的信都装错了,所以一号信不在一号信封里,二号信不在二号信封里,.,如果用列表1,2,3,4,5表示所有的信都装对了的情况(1在第一位,2在第二位,.)。那么5,4,3,2,1就是一种装错了的情况。 先熟悉一下几个谓词: % delete(A,B,C), B为列表,A为B中的某个元素,C为把B中的元素A除去后的列表。 delete(A,A|X,X). delete(A,B|X,B|Y) :- delete(A,X,Y). % permutation(A,B), 列表A为列表B的全排列之一时,成功。 permutation(,). permutation(A|X,Y) :- delete(A,Y,Y1), permutation(X,Y1). 我们使用“选择并校验”的方法。使用谓词permutation可以生成所有的排列情况,所以下面的任务就是编写校验部分。先来看some_element_right谓词: % some_element_right(A,B) 如果列表A与B中存在位置相同的元素则成功。 some_element_right(A|X,A|Y). some_element_right(A|X,B|Y):-some_element_right(X,Y).我们来看看它的功能:?- some_element_right(3,2,1,1,2,3).yes?- some_element_right(3,2,1,2,1,3).no第一个询问失成功,因为元素2在两个列表中的位置相同;第二个询问失败,因为找不到位置相同的元素。最后我们来编写主程序:letter(X,Y):-permutation(X,Y),not(some_element_right(X,Y).not谓词表示否定,所以上面的第二各自目标的意思就是:列表X与Y没有位置相同的元素。三)实验内容:1、分析该问题的实质以及其中存在的递归作用;2、利用列表数据结构编写出装错信封问题的程序;3、联系全排列问题理解列表数据结构的作用。四)实验步骤1、启动prolog编辑环境,编辑装错信封问题源程序;2、运行程序,分析结果;并算出其概率;3、理解列表数据结构的作用。结果一共44种情况,所以它的概率就是:44/120=0.367,看样子我们的糊涂先生不太走运。实验五 小型专家系统设计与实现(4学时)专家系统涉及人工智能导论课程的大部分内容,而且实践性和应用性都很强。因此,本课程将专家系统设计与实现作为一个上机实验项目。该实验是一个设计性实验,它对加深课程内容的理解和掌握,培养学生运用所学知识开发智能系统的能力有重要意义。一、实验目的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)若某动物是哺乳动物且吃肉,则它是食肉动物。 (7)若某动物是哺乳动物且有蹄,则它是有蹄动物。 (8)若某动物是有蹄动物且反刍食物,则它是偶蹄动物。 (9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。 (10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。 (11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是长颈鹿。 (12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。 (13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。 (14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。 (15)若某动物是鸟且善飞且不怕风浪,则它是海燕。老虎黄褐色有黑色条纹食肉动物哺乳动物有毛发有奶吃肉有爪有犬齿目盯前方金钱豹有黑色斑点长颈鹿有蹄动物有蹄长腿长脖子有暗斑点下面是该规则集所形成的(部分)推理网络: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. nn), 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(nnPlease press the space bar to Exit), readchar(_)./* Knowledge Base */ animal_is(cheetah):- it_is(carnivore), positive(has, tawny_color), positive(has, black_spots). 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, la

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论