人工智能实验报告 华北电力大学 刘丽

上传人:第*** 文档编号:57500411 上传时间:2018-10-22 格式:PDF 页数:10 大小:232.68KB
返回 下载 相关 举报
人工智能实验报告 华北电力大学 刘丽_第1页
第1页 / 共10页
人工智能实验报告 华北电力大学 刘丽_第2页
第2页 / 共10页
人工智能实验报告 华北电力大学 刘丽_第3页
第3页 / 共10页
人工智能实验报告 华北电力大学 刘丽_第4页
第4页 / 共10页
人工智能实验报告 华北电力大学 刘丽_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《人工智能实验报告 华北电力大学 刘丽》由会员分享,可在线阅读,更多相关《人工智能实验报告 华北电力大学 刘丽(10页珍藏版)》请在金锄头文库上搜索。

1、华北电力大学科技学院 实实验验报报告告|实验名称实验名称PROLOGPROLOG 语言编程练习及图搜索问题求解语言编程练习及图搜索问题求解课程名称课程名称人工智能及应用人工智能及应用|专业班级:计算机 09k1学生姓名:学号:成绩:指导教师:实验日期:(实验报告如打印,纸张用 A4,左装订;页边距:上下 2.5cm,左 2.9cm,右 2.1cm;字体:宋体小四号,1.25 倍行距。 )验证性、综合性验证性、综合性实验报告应含的主要内容:实验报告应含的主要内容:一、实验目的及要求二、所用仪器、设备三、实验原理四、实验方法与步骤五、实验结果与数据处理六、讨论与结论(对实验现象、实验故障及处理方法

2、、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)七、所附实验输出的结果或数据设计性实验报告应含的主要内容:设计性实验报告应含的主要内容:一、设计要求二、选择的方案三、所用仪器、设备四、实验方法与步骤五、实验结果与数据处理六、结论(依据“设计要求” )七、所附实验输出的结果或数据* 封面左侧印痕处装订华 北 电 力 大 学 科 技 学 院 实 验 报 告第页 共页一、实验目的及要求一、实验目的及要求1. 熟悉 PROLOG 的运行环境,进行 prolog 的基本编程练习。了解 PROLOG 语言中常量、变量的表示方法。PROLOG 的简单程序结构,掌握分析问题、询问解释技巧;进

3、行事实库、规则库的编写,并在此基础上进行简单的询问。具体实验课上相关内容,练习例 1 到例 6 的内容。2. 图搜索问题求解。任选以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问题、八皇后问题、过河问题等,选两个。要求实验报告中包括:程序及其注释和说明、console 表单中的程序运行结果。二、所用仪器、设备二、所用仪器、设备PC 机和 trinc prolog 编译软件三、实验原理三、实验原理PROLOG 语言是一种以逻辑推理为基础的逻辑型程序设计语言,是一种陈述性语言而不是过程性语言。PROLOG 语言能够自动实现模式匹配和回溯、具备递归技术,而且语法简明,可以简化复杂

4、问题求解。四、实验方法与步骤四、实验方法与步骤熟悉环境 Trinc-Prolog,用来编译各个逻辑新非常强的问题,从中选择汉诺塔和过 河问题进行解决。 在 PROLOG 中,常用的结构形式有: (1)函子(分量 1,分量 2,分量 n) (2)表:Prolog 语言中最常用的数据结构,由一些有序分量组成,长度可任意 含 有 3 个 分 量 a , b , c 的 表 可 写 成 a , b , c , 如 用 函 数 的 方 式 可 写 成 (a (b (c ) ) ) 。其中符号“ ”是表的函子 (3)表达式 PROLOG 语言提供了各种运算,如算术、比较运算等 运算可以是中缀形式,简明直观

5、,符合人们的习惯 算术表达式 X+Y-Z 中, “+” 、 “-”便是运算符,该表达式如用函数结构形式来表示就 是-(+(XY)Z) 表示对象间的因果关系、蕴含关系或对应关系 格式: head :- body head 是谓词的定义部分,与事实一样,也包括谓词名和谓词的参数说明 :- 连接符,一般可以读作如果 body 一个或多个目标,与查询相同 bird(X):-annimal(X),has(X,feather). grandfather(X,Y):-father(X,Z),father(Z,Y).华 北 电 力 大 学 科 技 学 院 实 验 报 告第页 共页规则中的谓词也可以无参数: r

6、un:-start ,step1(X),step2(X),end. Prolog 的查询工作靠模式匹配完成 查询的模板叫做目标(goal) 如果有某个事实与目标匹配,那么查询成功,解释器会回显yes. 如果没有匹配的事实,查询失败,解释器回显no. Prolog 的模式匹配工作叫做联合(unification),以下三个条件是使联合成功的必 要条件 目标谓词名与数据库中的某个谓词名相同 这两个谓词的参数数目相同 所有的参数也相同 在查询目标中还可以使用 Prolog 的变量 这种变量和其他语言中的不同,叫它逻辑变量更合适 变量可以代替目标中的一些参数 变量给联合操作带来了新的意义。以前联合操作

7、只有在谓词名和参数都相同时才能 成功。但是引入了变量之后,变量可以和任何的条目匹配 当联合成功之后,变量的值将和它所匹配的条目的值相同。这叫做变量的绑定 (binding)。当带变量的目标成功的和数据库中的事实匹配之后,Prolog 将返回变量绑 定的值 当 Prolog 试图与某一个目标匹配时,例如:location/2,它就在数据库中搜寻所有 用 location/2 定义的子句,当找到一条与目标匹配时,它就为这条子句作上记号。当用 户需要更多的答案时,它就从那条作了记号的子句开始向下查询 我们来看一个例子: 用户询问:location(X,kitchen). Prolog 找到数据库中的

8、第一条 location/2 子句,并与目标比较 用户输入回车,Prolog 开始寻找其他的答案 首先它必须释放(unbinds)变量 X。然后从上一次成功的位置的下一条子句开始继 续搜索。这个过程叫做回溯(backtracking) 在本例中就是第三条子句 子句#3location(flashlight, desk). 匹配失败,直到第六条子句时匹配又成功 Prolog 的目标有四个端口用来控制运行的流程 调用(call) 退出(exit) 重试(redo) 失败(fail) 一开始使用 Call 端口进入目标,如果匹配成功就到了 exit 端口,如果失败就到了 fail 端口,如果用户输入

9、回车,则又从 redo 端口进入目标华 北 电 力 大 学 科 技 学 院 实 验 报 告第页 共页每个端口的功能如下:call 开始使用目标搜寻子句exit 目标匹配成功,在成功的子句上作记号,并绑定变量redo 试图重新满足目标,首先释放变量,并从上次的记号开始搜索fail 表示再找不到更多的满足目标的子句了:- ?- location(X, kitchen).用 start step 观察程序第一次执行,与第一个事实匹配,输出,回车换行,number=1,不匹配,引起回溯与第二个事实匹配,输出,回车换行,number=2,不匹配,引起回溯与第三个事实匹配,输出,回车换行,number=3

10、,匹配,最后一个语句成功,程序段结束?-print2.(观察结果)表是有若干元素的有序序列,表中元素也可以为表表最大的特点是长度不固定,在程序运行中可以动态的变化PROLOG 中采用一对方括号 把表元素括起来,每个元素间用逗号或空格分开谓词 append 是递归定义的华 北 电 力 大 学 科 技 学 院 实 验 报 告第页 共页在 Prolog 中,当某个谓词的目标中包含了此谓词本身时,Prolog 将进行递归调用递归技术在表处理中特别有用,几乎所有的表处理程序都用到递归,但在一般程序中,使用递归要谨慎,或尽量不用,因为递归很容易导致堆栈溢出到目前为止,我们都一直在使用 Prolog 内建的

11、回溯功能。使用此功能可以方便地写出结构紧凑的谓词来并不是所有的回溯都是必须的, 这时我们需要能够人工地控制回溯过程Prolog 提供了完成此功能的谓词,叫做 cut,使用符号!来表示Cut 能够有效地剔除一些多余的搜索。如果在 cut 处产生回溯,它会自动地失败,而不去进行其它的选择若将“! ”插在子句体内作为一个子目标,它总是立即成功2.若“! ”位于子句体的最后,则它就阻止对它所在字句的头谓词的所有子句的回溯访问,而让回溯跳过该头谓词,去访问前一个子目标3.若“! ”位于其他位置,则当其后发生回溯且回溯到“! ”处时,就在此失败,并且“! ”还使它所在子句的头谓词整个失败cut 不符合纯逻

12、辑学,是出于实用的考虑,过多地使用 cut 将降低程序的易读性和易维护性。它就像是其它语言中的 goto 语句当能够确信在谓词中的某一点只有一个答案,或者没有答案时,使用cut 可以提高程序的效率, 另外, 如果在某种情况下想让某个谓词强制失败,而不让它去寻找更多的答案时,使用 cut 也是个不错的选择五、求解的问题与程序五、求解的问题与程序华 北 电 力 大 学 科 技 学 院 实 验 报 告第页 共页如果要移动 N 个盘子,就要分三步走:把 N-1 个盘子移动到中间的杆子上 (把中间的杆子作为临时存放盘子的位置)把最后一个盘子直接移到右边的杆子上最后把中间杆子上的盘子移到右边的杆子上 (把

13、左边的杆子作为临时存放盘子的位置)对于汉诺塔问题,实现的代码如下:对于汉诺塔问题,实现的代码如下: 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(4).后得出 Move a disk from - left

14、-to - middle Move a disk from - left -to - right Move a disk from - middle -to - right Move a disk from - left -to - middle Move a disk from - right -to - left Move a disk from - right -to - middle Move a disk from - left -to - middle Move a disk from - left -to - right Move a disk from - middle -to

15、 - right Move a disk from - middle -to - left Move a disk from - right -to - left Move a disk from - middle -to - right Move a disk from - left -to - middle Move a disk from - left -to - right Move a disk from - middle -to right对于过河问题实现的代码如下:对于过河问题实现的代码如下: move(1,0). %表示船上有一位牧师,没有野人。 move(0,1). move

16、(0,2). move(2,0). move(1,1).%判断移动后两岸状态是否合法华 北 电 力 大 学 科 技 学 院 实 验 报 告第页 共页legal(X,Y,_):- %X 为左岸状态,Y 为右岸状态。_取 0 或 1,0 代表左岸,1 代表右岸 legal1(X), %分别判断两岸的状态是否合法。 legal1(Y).legal1(X,Y):- X=:=0,Y=0,!. %牧师人数为 0,野人的人数大于 0,合法。 legal1(X,Y):- Y=:=0,X=0,!. %野人人数为 0,牧师的人数大于 0,合法。 legal1(X,Y):- X=Y,X=0,Y=0. %牧师数大于或等于野人数,且都大于 0,合法。 %update 谓词能够完成把合理的移动作用的某个状态上,从而到达新的状态。 update(X,Y,0),Move,Statu1):- %船在左岸时 (A,B)=X, (C,D)=Y, (E,F)=Move, C1 is C+E, D1 is D+F, A1 is A-E, B

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号