1、 课 程 实 验 报 告 学年学期 2015—2016年第一学期 课程名称 人工智能原理与技术 实验名称 PROLOG语言编程练习 实 验 室 无 专业年级 电气134
2、 学生姓名 赵倩 学生学号 2013011989 提交时间 2015.12.28 成 绩 任课教师 樊强
3、 水利与建筑工程学院 第一章 PROLOG语言编程练习 1.1 实验目的 加深学生对逻辑程序运行机理的理解,使学生掌握PROLOG语言的特点、熟悉其编程环境,同时为后面的人工智能程序设计做好准备。 (1)熟悉PROLOG语言编程环境的使用; (2)了解PROLOG语言中常量、变量的表示方法; (3)了解利用PROLOG进行事实库、规则库的编写方法; 1.2 实验环境 计算机,Turbo PROLOG教学软件。 1.3 预习要求 实验前应阅读实验指导书,了解实验目的、预习PROLOG语言的相关知识。 1.4 实验
4、内容 (1)学习使用Turbo PROLOG,包括进入PROLOG主程序、编辑源程序、修改环境目录、退出等基本操作。 (2)在Turbo prolog集成环境下调试运行简单的Turbo PROLOG程序,如描述亲属关系的PROLOG程序或其他小型演绎数据库程序等。 1.5 实验方法和步骤 (1)启动Windows XP操作环境。 (2)打开文件目录,执行prolog应用程序,启动Turbo prolog,并按空格键(SPACE)进入集成开发环境。 (3)选择Setup项,打开下拉菜单,选择Directories项,进行工作目录修改,按Esc键退出,选择Save Configur
5、ation项,保存修改。 (4)选择Files项,打开下拉菜单,选择New file项,进入源程序输入和编辑,或选择Load项,选择要打开的示例程序,再选择Edit项,可以进行编辑源程序。 (5)编辑之后,可以选择Run项,执行程序,可以在Dialog窗口进行询问,即外部目标的执行,查看程序运行结果,分析程序之功能。 (6)仿前例,可以选择其他程序并运行,分析程序功能。 (7)退出,选择Quit项,可以退出Turbo Prolog程序,返回到Windows XP环境。 1.6 示例程序 逻辑电路模拟程序。该程序以逻辑运算“与”、“或”、“非”的定义为基本事实,然后在此基
6、础上定义了“异或”运算。那么,利用这些运算就可以对“与”、“或”、“非”和“异或”等逻辑电路进行模拟。事实上,在此基础上也可以对其他任一逻辑门电路进行模拟。 domains d=integer predicates not_(d,d) and_(d,d,d) or_(d,d,d) xor_(d,d,d) clauses not_(1,0). not_(0,1). and_(0,0,0). and_(0,1,0). and_(1,0,0).
7、 and_(1,1,1). or_(0,0,0). or_(0,1,1). or_(1,0,1). or_(1,1,1). xor_(Input1, Input2, Output):- not_(Input1,N1), not_(Input2,N2), and_(Input1,N2,N3), and_(Input2,N1,N4), or_(N3,N4,Output). 实
8、现同或 domains d=integer predicates not_(d,d) and_(d,d,d) or_(d,d,d) th_(d,d,d) clauses not_(1,0). not_(0,1). and_(0,0,0). and_(0,1,0). and_(1,0,0). and_(1,1,1). or_(0,0,0). or_(0,1,1). or_(1,0,1)
9、 or_(1,1,1). th_(Input1, Input2, Output):- not_(Input1,N1), not_(Input2,N2), and_(Input1,Input2,N3), and_(N1,N2,N4), or_(N3,N4,Output). 1.7 实验总结 出现的问题:对于每个谓词的格式没有看清,老把下划线忘掉,还以为程序不对。 解决方案:仔细阅读程序,名字和格式都
10、了解过后再验证。 心得:Prolog是一门语言,需要较长的时间才能掌握,如今只是验证,可以凭借对谓词的英文意思看懂程序。 课 程 实 验 报 告 学年学期 2015—2016年第一学期 课程名称 人图搜索问题求解 实验名称 PROLOG语言编程练习 实 验 室 无
11、 专业年级 电气134 学生姓名 赵倩 学生学号 2013011989 提交时间 2015.12.28 成 绩
12、 任课教师 樊强 水利与建筑工程学院 第二章 图搜索问题求解 2.1 实验目的 加深学生对图搜索技术的理解,使学生掌握图搜索基本编程方法,并能利用图搜索技术解决一些应用问题。 (1)掌握Turbo prolog软件编程方法; (2) 熟悉状态图搜索的基本算法; (3)掌握图搜索问题求解中的问题表示、节点表示、close表和open表的构造。 2.2 实验环境 计算机,Turbo PROLOG教学软件。
13、 2.3 预习要求 (1)预习教材第四章有关状态图问题求解的内容,熟悉状态图求解的过程和方法; (2)了解Turbo PROLOG程序设计的基本知识。 2.4 实验内容 走迷宫是人们熟悉的一种游戏, 如图2-1就是一个迷宫。如果我们把该迷宫的每一个格子以及入口和出口都作为节点, 把通道作为边, 则该迷宫可以由一个有向图表示。 那么, 走迷宫其实就是从该有向图的初始节点(入口)出发, 寻找目标节点(出口)的问题, 或者是寻找通向目标节点(出口)的路径的问题。 用状态图搜索或与或图搜索方法,求出迷宫图中路径。图中S0为入口,Sg为出口。 图2-1 迷宫图 2.5
14、 实验方法和步骤 (1)启动prolog编辑环境; (2)用状态图搜索思想编辑路径求解问题的源程序; (3)运行程序,分析结果; (4)用与或图搜索思想编辑路径求解问题的源程序; (5)运行程序,分析结果。 2.6 示例程序 下面是一个通用的状态图搜索程序。对于求解的具体问题,只需将其状态图的程序表示并入该程序即可。 /*状态图搜索通用程序*/ DOMAINS state=symbol DATABASE-mydatabase open(state,integer) closed(integer,state,integer) res(state
15、) open1(state,integer) min(state,integer) mark(state) fail_ PREDICATES solve road(state,state) search(state,state) result searching step4(integer,state) step56(integer,state) equal(state,state) repeat resulting(integer) rule(state,state) GOAL solve.
16、 CLAUSES solve:-search(s0,sg),result. search(Begin,End):- retractall(_,mydatabase), assert(closed(0,Begin,0)), assert(open(Begin,0)), assert(mark(End)), repeat, searching,!. result:- not(fail_), retract(closed(0,_,0)), closed(M,_,_), resulting(M),!. result:-beep,wri
17、te("sorry don't find a road!"). searching:- open(State,Pointer), retract(open(State,Pointer)), closed(No,_,_),No2=No+1, asserta(closed(No2,State,Pointer)),!,step4(No2,State). searching:-assert(fail_). step4(_,State):-mark(End),equal(State,End). step4(No,State):-step56(No,State),!,fai
18、l. step56(No,StateX):- rule(StateX,StateY), not(open(StateY,_)), not(closed(_,StateY,_)), assertz(open(StateY,No)), fail. step56(_,_):-!. equal(X,X). repeat. repeat:-repeat. resulting(N):-closed(N,X,M),asserta(res(X)),resulting(M). resulting(_):-res(X),write(X),nl,fail. result
19、ing(_):-!. rule(X,Y):-road(X,Y). road(s0,s4).road(s4,s1).road(s1,s4).road(s1,s2).road(s2,s1).road(s2,s3). road(s3,s2).road(s4,s7).road(s7,s4).road(s4,s5).road(s5,s4). road(s5,s6).road(s6,s5). road(s5,s8).road(s8,s5).road(s8,s9).road(s9,s8).road(s2,s5).road(s5,s2). road(s9,sg). 2
20、7 实验总结 实验中出现的问题:这一次的程序较难,只能通过结果验证其正确性。 解决方案:直接看那个迷宫,得出答案,跟程序运行结果对比即可。 心得:路径问题求解的搜索结果及分析: 找到的是最短路径,其间可能经历了歧路。多了分析不了。 状态图搜索和与或图搜索的特点: 两者都是通过搜索实现问题求解。其搜索策略都分为盲目搜索和启发式搜索两类。 状态图是用“状态”和“算符”来表示问题的一种方法。其中,“状态”用以描述问题求解过程中不同时刻的状况;“算符”表示对状态的操作,算符的每一次使用就使问题从一种状态转变为另一种状态。当到达目标状态时,由初始状态到目标状态所用算符的序列就是问题的
21、一个解。 与或图则是通过将复杂问题通过分解(与节点)、等价变化(或节点)的方式化简看是否能构成解树来判断问题是否可解。 课 程 实 验 报 告 学年学期 2015—2016年第一学期 课程名称 人工智能原理与技术 实验名称 小型专家系统(原型)设计 实 验 室 无
22、 专业年级 电气134 姓 名 赵倩 学生学号 2013011989 提交时间 2015.12.28 成 绩 任课教师 樊强
23、 水利与建筑工程学院 第三章 小型专家系统(原型)设计 3.1 实验目的 加深学生对专家系统原理的理解,使学生初步掌握专家系统的设计和实现方法。 3.2 实验环境 计算机,Turbo PROLOG教学软件或VC++等 3.3 预习要求 (1)了解专家系统设计与实现的一般方法; (2)熟悉和掌握产生式系统的运行机制、产生式规则的程序语言实现。 3.4 实验原理 产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。在产生式系统中,论
24、域的知识分为两部分:用事实表示静态知识;用产生式规则表示推理过程和行为。 3.5 实验内容 综合利用人工智能的产生式系统、图搜索算法以及专家系统的框架,建造一个小型动物分类专家系统,要求系统具有知识库、推理机和动态数据库三部分。编程语言不限。 3.6 示例程序 考虑到本实验有一定难度,下面给出一个示例程序,以供参考。 例 小型动物分类专家系统 /* An Animal Classifying Expert System */ database xpositive(symbol,symbol) xnegative(symbol,symbol
25、) 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(
26、n) ",X),nl,nl,clear_facts. run:- write("\Unable 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))
27、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(_,_
28、)),fail. clear_facts:-write("\n\nPlease press the space bar to Exit"),readchar(_). animal_is(cheetah):- it_is(mammal), it_is(carnivore), positive(has,tawny_color), positive(has,black_spots). animal_is(tiger):- it_is(mammal), it_is(
29、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),
30、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),
31、 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(
32、does,fly), positive(does,lay_eggs). it_is(bird):- positive(has,feathers). it_is(carnivore):- positive(does,eat_meat). it_is(carnivore):- positive(has,pointed_teeth), positive(has,claws), positive(has,forward_eyes). it_is(ungulate):- it_is(mammal), positive(has,hooves). it_is(ungulate):- it_is(mammal), positive(does,chew_cud). 3.7 实验总结 出现的问题:这个专家系统范围较小,稍微查一种别的动物,就可能得不到结果。 解决方案:先选中一种已有的动物,再回答程序提出的问题。 心得:知识是实现人工智能的重要内容,尤其是专家系统的实现,需要一定的形式。 11