《人工智能实验指导书.doc》由会员分享,可在线阅读,更多相关《人工智能实验指导书.doc(18页珍藏版)》请在金锄头文库上搜索。
1、人工智能实验指导书 人工智能实验指导书计算机科学与技术系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、
2、熟悉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、学习Tur
3、bo prolog的简单程序结构,掌握分析问题、询问解释技巧。4、了解PROLOG语言中常量、变量的表示方法;5、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问;6、利用PROLOG中的谓词asserta和retract进行数据管理。二)实验步骤:1、启动Windows操作环境。2、 打开目录,执行prolog应用程序,启动Turbo prolog,并按空格键(SPACE)集成开发环境。3、选择Setup项,打开下拉菜单,选择Directories项,将工作目录进行修改,按Esc键退出,选择Save Configuration项,保存修改。4、选择Files项,打开下拉菜
4、单,选择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
5、). 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 = sy
6、mbolpredicates 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.- 11 -实验二 求N!及Fibonacci序列问题实验(3学时)一、实验目的掌握Turbo prolog软件编程使用方法;掌握Prolog程序的各域段含义;初步学习分析、运用递归方法解决问题。二、实验设备网络计算机,Turbo prol
7、og教学软件。三、实验内容及步骤一)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序列
8、源程序;2、运行程序,分析结果;3、尝试修改程序达到同样的目的。实验三 梵塔问题实验(3学时)一、实验目的1、掌握PROLOG编制递归程序的方法:边界条件与递归部分的设计;2、掌握Prolog程序的各域段含义;3、学会分析、运用递归方法解决问题。二、实验要求1、分析汉诺塔问题,找出问题本身存在的递归性,编制程序;2、显示汉诺塔问题中圆盘的移动次序;3、归纳出圆盘数目与移动步骤之间的数学关系;4、分析递归问题的实质。三、实验设备网络计算机,Turbo prolog教学软件。四、实验内容及步骤一)问题描述: 如上图,目的是把左边的所有盘子移到右边的杆子上。一次只能移动一个盘子,你可以使用中间的杆子
9、作为临时存放盘子的地方。在移动的过程中,小盘子必须放在大盘子之上。二)分析问题:如果盘子只有两三个,是很容易解决的。但是随着盘子数目的增加,问题就变得非常难解了。 事实上,已经通过数学证明过了,最少的移动次数是2,n为盘子的数目。最早提出这个问题的人设定的盘子数目为64,这就是说需要2=18446744073709551615次移动,假设计算机每秒钟能够计算10,000,000(一千万)次,那也需要58494年,所以你千万不要试图使用此程序来解较大的数。让我们来看看如何用递归来解决这个问题:如果只有一个盘子,直接移过去就行了,这是递归的边界条件。如果要移动N个盘子,就要分三步走:1、把N-1个
10、盘子移动到中间的杆子上(把右边的杆子作为临时存放盘子的位置)。 2、把最后一个盘子直接移到右边的杆子上。 3、最后把中间杆子上的盘子移到右边的杆子上(把左边的杆子作为临时存放盘子的位置)。 上面第一、三步用到了递归。我们看到,通过递归把N个盘子的问题变成了两个N-1个盘子的问题。如此下去,最后就变成了2个一个盘子的问题了,这也就是说问题被解决了。三)实验内容:1、分析汉诺塔问题,找出问题本身存在的递归性。2、分析递归原理,熟悉问题递归的详细过程。3、编写求梵塔问题的Prolog程序。4、显示汉诺塔问题中圆盘的移动次序。5、更改圆盘数量,了解问题解决的递归过程。四)实验步骤:1、启动prolog
11、编辑环境,编辑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,它的参数为盘子的数目。它调
12、用递归谓词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中的任何一个,这是在移动的过
13、程中决定的。 inform,把移动过程通过write谓词写出,由于write只能有一个参数,所以使用“-”操作符相连。实验四 装错信封问题(4学时)一、实验目的1、进一步掌握PROLOG编制递归程序的方法;2、理解谓词delete、permutation、some_element_right在程序中的作用。二、实验要求1、分析该问题的实质以及其中存在的递归作用;2、利用列表数据结构编写出装错信封问题的程序;3、联系前面的全排列问题理解列表数据结构的作用。三、实验设备网络计算机,Turbo prolog教学软件。四、实验内容及步骤一)问题描述:糊涂先生给他的五个朋友写信,他写了五封信,但是当他的
14、朋友收到信后,都告诉他:“你的信寄错了”。那么请你计算一下:出现这种情况的概率有多少?(假设糊涂先生是随机地往信封里装信),你能不能把所有的情况都列出来呢?二)分析问题及编写程序:我们先来分析一下问题。往五个不同的信封里装五封不同的信,一共有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) :-