课 程 实 验 报 告
学年学期 2015—2016年第一学期
课程名称 人工智能原理与技术
实验名称 PROLOG语言编程练习
实 验 室 无
专业年级 电气134
学生姓名 赵倩
学生学号 2013011989
提交时间 2015.12.28
成 绩
任课教师 樊强
水利与建筑工程学院
第一章 PROLOG语言编程练习
1.1 实验目的
加深学生对逻辑程序运行机理的理解,使学生掌握PROLOG语言的特点、熟悉其编程环境,同时为后面的人工智能程序设计做好准备。
(1)熟悉PROLOG语言编程环境的使用;
(2)了解PROLOG语言中常量、变量的表示方法;
(3)了解利用PROLOG进行事实库、规则库的编写方法;
1.2 实验环境
计算机,Turbo PROLOG教学软件。
1.3 预习要求
实验前应阅读实验指导书,了解实验目的、预习PROLOG语言的相关知识。
1.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 Configuration项,保存修改。
(4)选择Files项,打开下拉菜单,选择New file项,进入源程序输入和编辑,或选择Load项,选择要打开的示例程序,再选择Edit项,可以进行编辑源程序。
(5)编辑之后,可以选择Run项,执行程序,可以在Dialog窗口进行询问,即外部目标的执行,查看程序运行结果,分析程序之功能。
(6)仿前例,可以选择其他程序并运行,分析程序功能。
(7)退出,选择Quit项,可以退出Turbo Prolog程序,返回到Windows XP环境。
1.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).
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).
实现同或
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).
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 实验总结
出现的问题:对于每个谓词的格式没有看清,老把下划线忘掉,还以为程序不对。
解决方案:仔细阅读程序,名字和格式都了解过后再验证。
心得:Prolog是一门语言,需要较长的时间才能掌握,如今只是验证,可以凭借对谓词的英文意思看懂程序。
课 程 实 验 报 告
学年学期 2015—2016年第一学期
课程名称 人图搜索问题求解
实验名称 PROLOG语言编程练习
实 验 室 无
专业年级 电气134
学生姓名 赵倩
学生学号 2013011989
提交时间 2015.12.28
成 绩
任课教师 樊强
水利与建筑工程学院
第二章 图搜索问题求解
2.1 实验目的
加深学生对图搜索技术的理解,使学生掌握图搜索基本编程方法,并能利用图搜索技术解决一些应用问题。
(1)掌握Turbo prolog软件编程方法;
(2) 熟悉状态图搜索的基本算法;
(3)掌握图搜索问题求解中的问题表示、节点表示、close表和open表的构造。
2.2 实验环境
计算机,Turbo PROLOG教学软件。
2.3 预习要求
(1)预习教材第四章有关状态图问题求解的内容,熟悉状态图求解的过程和方法;
(2)了解Turbo PROLOG程序设计的基本知识。
2.4 实验内容
走迷宫是人们熟悉的一种游戏, 如图2-1就是一个迷宫。如果我们把该迷宫的每一个格子以及入口和出口都作为节点, 把通道作为边, 则该迷宫可以由一个有向图表示。 那么, 走迷宫其实就是从该有向图的初始节点(入口)出发, 寻找目标节点(出口)的问题, 或者是寻找通向目标节点(出口)的路径的问题。
用状态图搜索或与或图搜索方法,求出迷宫图中路径。图中S0为入口,Sg为出口。
图2-1 迷宫图
2.5 实验方法和步骤
(1)启动prolog编辑环境;
(2)用状态图搜索思想编辑路径求解问题的源程序;
(3)运行程序,分析结果;
(4)用与或图搜索思想编辑路径求解问题的源程序;
(5)运行程序,分析结果。
2.6 示例程序
下面是一个通用的状态图搜索程序。对于求解的具体问题,只需将其状态图的程序表示并入该程序即可。
/*状态图搜索通用程序*/
DOMAINS
state=symbol
DATABASE-mydatabase
open(state,integer)
closed(integer,state,integer)
res(state)
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.
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,write("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),!,fail.
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.
resulting(_):-!.
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.7 实验总结
实验中出现的问题:这一次的程序较难,只能通过结果验证其正确性。
解决方案:直接看那个迷宫,得出答案,跟程序运行结果对比即可。
心得:路径问题求解的搜索结果及分析:
找到的是最短路径,其间可能经历了歧路。多了分析不了。
状态图搜索和与或图搜索的特点:
两者都是通过搜索实现问题求解。其搜索策略都分为盲目搜索和启发式搜索两类。
状态图是用“状态”和“算符”来表示问题的一种方法。其中,“状态”用以描述问题求解过程中不同时刻的状况;“算符”表示对状态的操作,算符的每一次使用就使问题从一种状态转变为另一种状态。当到达目标状态时,由初始状态到目标状态所用算符的序列就是问题的一个解。
与或图则是通过将复杂问题通过分解(与节点)、等价变化(或节点)的方式化简看是否能构成解树来判断问题是否可解。
课 程 实 验 报 告
学年学期 2015—2016年第一学期
课程名称 人工智能原理与技术
实验名称 小型专家系统(原型)设计
实 验 室 无
专业年级 电气134
姓 名 赵倩
学生学号 2013011989
提交时间 2015.12.28
成 绩
任课教师 樊强
水利与建筑工程学院
第三章 小型专家系统(原型)设计
3.1 实验目的
加深学生对专家系统原理的理解,使学生初步掌握专家系统的设计和实现方法。
3.2 实验环境
计算机,Turbo PROLOG教学软件或VC++等
3.3 预习要求
(1)了解专家系统设计与实现的一般方法;
(2)熟悉和掌握产生式系统的运行机制、产生式规则的程序语言实现。
3.4 实验原理
产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。在产生式系统中,论域的知识分为两部分:用事实表示静态知识;用产生式规则表示推理过程和行为。
3.5 实验内容
综合利用人工智能的产生式系统、图搜索算法以及专家系统的框架,建造一个小型动物分类专家系统,要求系统具有知识库、推理机和动态数据库三部分。编程语言不限。
3.6 示例程序
考虑到本实验有一定难度,下面给出一个示例程序,以供参考。
例 小型动物分类专家系统
/* 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("\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)),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\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(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(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 实验总结
出现的问题:这个专家系统范围较小,稍微查一种别的动物,就可能得不到结果。
解决方案:先选中一种已有的动物,再回答程序提出的问题。
心得:知识是实现人工智能的重要内容,尤其是专家系统的实现,需要一定的形式。
人工智能九宫格重移搜索成员赵春杰20xx210665羊森20xx210653黄鑫20xx210周成兵20xx210664王素娟20…
人工智能课程实验指导书实验内容实验一产生式系统实验实验二移动机器人的路径规划与行为决策实验实验三梵塔问题实验实验四A算法实验实验五…
华北电力大学实验报告实验名称课程名称人工智能及应用专业班级学生姓名号成绩指导教师李继荣实验日期20xx5学华北电力大学实验报告华北…
人工智能第二次实验报告一实验题目遗传算法的设计与实现二实验目的通过人工智能课程的学习熟悉遗传算法的简单应用三实验内容用遗传算法求解…
人工智能技术实验报告实验名称人工智能实验1姓名班级指导教师完成时间20xx04301读程序指出运行结果domainsssymbol…
人工智能导论上机实验指导书基于人工智能的状态空间搜索策略研究八数码问题求解一实验软件TC20或VC60编程语言或其它编程语言二实验…
人工智能九宫格重移搜索成员赵春杰20xx210665羊森20xx210653黄鑫20xx210周成兵20xx210664王素娟20…
人工智能课程实验指导书实验内容实验一产生式系统实验实验二移动机器人的路径规划与行为决策实验实验三梵塔问题实验实验四A算法实验实验五…
华北电力大学实验报告实验名称课程名称人工智能及应用专业班级学生姓名号成绩指导教师李继荣实验日期20xx5学华北电力大学实验报告华北…
人工智能第二次实验报告一实验题目遗传算法的设计与实现二实验目的通过人工智能课程的学习熟悉遗传算法的简单应用三实验内容用遗传算法求解…