人工智能复习指导.docx
- 文档编号:30742518
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:9
- 大小:21.34KB
人工智能复习指导.docx
《人工智能复习指导.docx》由会员分享,可在线阅读,更多相关《人工智能复习指导.docx(9页珍藏版)》请在冰豆网上搜索。
人工智能复习指导
人工智能实验指导书
适用专业:
计算机科学与技术
制定人:
应用教研室
目录
实验一熟悉实验环境………………………………………第1页
实验二N!
及Fibonacci序列问题…………………………第4页
实验三梵塔问题……………………………………………第5页
实验四装错信封问题………………………………………第8页
实验一熟悉实验环境(2学时)
一、实验目的
1、了解PROLOG解释器;
2、了解PROLOG语言中常量、变量的表示方法;
3、了解利用PROLOG进行事实库、规则库的编写方法;
二、实验要求
1、熟悉Prolog运行环境,包括硬件与软件环境;
2、学习示例程序,分析其功能;
3、写出Example1、Example11、Example15示例程序的功能;
4、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问;
三、实验设备
网络计算机,Turboprolog教学软件。
四、实验内容及步骤
一)实验内容:
1、熟悉Turboprolog的运行环境,包括所用的机器的硬件与软件环境。
2、学习使用Turboprolog,包括进入Prolog主程序、编辑源程序、修改环境目录、退出等基本操作。
3、学习Turboprolog的简单程序结构,掌握分析问题、询问解释技巧。
4、了解PROLOG语言中常量、变量的表示方法;
5、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问;
二)实验步骤:
1、启动Windows98/2000操作环境。
2、打开目录:
c:
\pre_soft\appsdos\cai\prolog,执行prolog应用程序,启动Turboprolog,并按空格键(SPACE)集成开发环境。
3、选择Setup项,打开下拉菜单,选择Directories项,将工作目录修改为:
c:
\pre_soft\appsdos\cai\prolog,按Esc键退出,选择SaveConfiguration项,保存修改。
4、选择Files项,打开下拉菜单,选择Load项,选择要打开的示例程序,选择Example1示例程序,再选择Edit项,可以进行编辑源程序。
5、编辑之后,可以选择Run项,执行程序,可以在Dialog窗口进行询问,即外部目标的执行,并分析程序之功能。
6、仿前例,运行Example11、Example15,分析程序功能。
7、退出,选择Quit项,可以退出TurboProlog程序,返回到Windows2000环境。
五、源程序
Example1:
domains
person,activity=symbol
predicates
likes(person,activity)
clauses
likes(ellen,tennis).
likes(john,football).
likes(tom,baseball).
likes(eric,swimming).
likes(mark,tennis).
likes(bill,X)iflikes(tom,X).
Example11:
domains
namelist=name*
name=symbol
predicates
member(name,namelist).
clauses
member(Name,[Name|_]).
member(Name,[_|Tail])ifmember(Name,Tail).
Example15:
domains
name=symbol
predicates
father(name,name)
everybody
clauses
father(leonard,katherine).
father(carl,jason).
father(carl,marilyn).
everybodyif
father(X,Y),
write(X,"is",Y,"'sfather\n")andfail.
实验二N!
及Fibonacci序列问题(3学时)
一、实验目的
掌握Turboprolog软件编程使用方法;
掌握Prolog程序的各域段含义;
初步学习分析、运用递归方法解决问题。
二、实验设备
网络计算机,Turboprolog教学软件。
三、实验内容及步骤
一)Fibonacci序列问题描述:
数字的Fibonacci序列是个正整数序列,序列头两个数均为1,其余数为其前两个数相加得到,该序列排列如下:
1,1,2,3,5,8,13,21,34,55……
Fibonacci序列通式为:
F1=1
F2=1
Fn=Fn-1+Fn-2
二)实验内容:
1、进一步熟悉Turboprolog的运行环境,程序调试的方法;
2、初步掌握递归原理,了解问题递归的详细过程。
3、理解递归停止条件对整个递归过程的作用。
4、写出求N!
及Fibonacci序列问题的Prolog程序。
三)实验步骤:
1、启动prolog编辑环境,编辑求N!
及Fibonacci序列源程序;
2、运行程序,分析结果;
3、尝试修改程序达到同样的目的。
实验三梵塔问题(3学时)
一、实验目的
1、掌握PROLOG编制递归程序的方法:
边界条件与递归部分的设计;
2、掌握Prolog程序的各域段含义;
3、学会分析、运用递归方法解决问题。
二、实验要求
1、分析汉诺塔问题,找出问题本身存在的递归性,编制程序;
2、显示汉诺塔问题中圆盘的移动次序;
3、归纳出圆盘数目与移动步骤之间的数学关系;
4、分析递归问题的实质。
三、实验设备
网络计算机,Turboprolog教学软件。
四、实验内容及步骤
一)问题描述:
如上图,目的是把左边的所有盘子移到右边的杆子上。
一次只能移动一个盘子,你可以使用中间的杆子作为临时存放盘子的地方。
在移动的过程中,小盘子必须放在大盘子之上。
二)分析问题:
如果盘子只有两三个,是很容易解决的。
但是随着盘子数目的增加,问题就变得非常难解了。
事实上,已经通过数学证明过了,最少的移动次数是2
,n为盘子的数目。
最早提出这个问题的人设定的盘子数目为64,这就是说需要2
=184********709551615次移动,假设计算机每秒钟能够计算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、重复比较圆盘数目,根据其求解过程得到圆盘数量与步骤数目之间的规律。
归纳并理解问题递归的实质。
实验四装错信封问题(4学时)
一、实验目的
1、进一步掌握PROLOG编制递归程序的方法;
2、理解谓词delete、permutation、some_element_right在程序中的作用。
二、实验要求
1、分析该问题的实质以及其中存在的递归作用;
2、利用列表数据结构编写出装错信封问题的程序;
3、联系前面的全排列问题理解列表数据结构的作用。
三、实验设备
网络计算机,Turboprolog教学软件。
四、实验内容及步骤
一)问题描述:
糊涂先生给他的五个朋友写信,他写了五封信,但是当他的朋友收到信后,都告诉他:
“你的信寄错了”。
那么请你计算一下:
出现这种情况的概率有多少?
(假设糊涂先生是随机地往信封里装信),你能不能把所有的情况都列出来呢?
二)分析问题及编写程序:
我们先来分析一下问题。
往五个不同的信封里装五封不同的信,一共有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,看样子我们的糊涂先生不太走运。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 复习 指导
![提示](https://static.bdocx.com/images/bang_tan.gif)