人工智能实验报告

课 程 实 验 报 告

学年学期           20152016年第一学期               

课程名称            人工智能原理与技术                           

实验名称           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

图片2

1.7   实验总结

出现的问题:对于每个谓词的格式没有看清,老把下划线忘掉,还以为程序不对。

解决方案:仔细阅读程序,名字和格式都了解过后再验证。

心得:Prolog是一门语言,需要较长的时间才能掌握,如今只是验证,可以凭借对谓词的英文意思看懂程序。


课 程 实 验 报 告

学年学期         20152016年第一学期                         

课程名称            人图搜索问题求解                                     

实验名称          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).

图片3

2.7   实验总结

实验中出现的问题:这一次的程序较难,只能通过结果验证其正确性。

解决方案:直接看那个迷宫,得出答案,跟程序运行结果对比即可。

心得:路径问题求解的搜索结果及分析:

找到的是最短路径,其间可能经历了歧路。多了分析不了。

状态图搜索和与或图搜索的特点:

两者都是通过搜索实现问题求解。其搜索策略都分为盲目搜索和启发式搜索两类。

状态图是用“状态”和“算符”来表示问题的一种方法。其中,“状态”用以描述问题求解过程中不同时刻的状况;“算符”表示对状态的操作,算符的每一次使用就使问题从一种状态转变为另一种状态。当到达目标状态时,由初始状态到目标状态所用算符的序列就是问题的一个解。

与或图则是通过将复杂问题通过分解(与节点)、等价变化(或节点)的方式化简看是否能构成解树来判断问题是否可解。

课 程 实 验 报 告

学年学期          20152016年第一学期                         

课程名称          人工智能原理与技术                           

实验名称         小型专家系统(原型)设计                          

实 验 室                                                        

专业年级              电气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).

图片4

3.7   实验总结

出现的问题:这个专家系统范围较小,稍微查一种别的动物,就可能得不到结果。

解决方案:先选中一种已有的动物,再回答程序提出的问题。

心得:知识是实现人工智能的重要内容,尤其是专家系统的实现,需要一定的形式。

相关推荐