资源描述:
《prolog人工智能实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、华北电力大学科技学院实验报告卖验名称PROLOG语言编程练习及图搜索问题求解学生姓名:成绩:实验日期:课程名称专业班级:学号:指导教师:刘丽(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm,右2.1cm;字体:宋体小四号,1.25倍行距。)验证性、综合性实验报告应含的主要内容:一、实验目的及要求二、所用仪器、设备三、实验原理四、实验方法与步骤五、实验结果与数据处理六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)七、所附实验输出的结果或数据设计性实验报告应含的
2、主要内容:一、设计要求二、选择的方案三、所用仪器、设备四、实验方法与步骤五、实验结果与数据处理六、结论(依据“设计要求”)七、所附实验输出的结果或数据*封面左侧印痕处装订一、实验目的及要求1.熟悉PROLOG的运行环境,进行PROLOG的基木编程练习。了解PROLOG语言中常量、变量的表示方法。PROLOG的简单程序结构,掌握分析问题、询问解释技巧;进行事实库、规则库的编写,并在此基础上进行简单的询问。具体实验课上相关内容,练习exeimplel到exeimple6的内容。2.图搜索问题求解。任选以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉
3、诺塔问题(三选一)、八数码问题、八皇后问题、农夫过河问题、传教士与野人问题(四选一),共选两个。要求实验报告中包括:1.通过PROLOG的基本编程练习,说明实验的方法和步骤。2.针对图搜索要求,说明求解的问题与程序、程序分析、注释、运行结果等,在讨论与结论部分说明实验收获、难点重点讨论等。3.双面打印。二、所用仪器、设备PC机和trineprolog编译软件三、实验原理PROLOG语言是一种以逻辑推理为基础的逻辑型程序设计语言,是一种陈述性语言而不是过程性语言。PROLOG语言能够自动实现模式匹配和回溯、具备递归技术,而且语法简明,可以简化复杂问
4、题求解。爱因斯坦的超级问题:有五个房子,每个房子的颜色不同,里而分别住着不同国家的人,每个人都有自己养的不同的宠物,喜欢喝不同的饮料,抽不同牌子的烟。现在已知以下的一些信息:英国人(englishman)住在红色(red)的房子里西班牙人(Spaniard)养了一条狗(dog)挪威人(norwegian)住在左边的第一个房子里黄房子(yellow)里的人段欢抽kools牌的香烟抽chesterfields牌香烟的人与养狐狸(fox)的人是邻居挪威人(norwegian)住在蓝色(blue)的房子旁边抽winston牌香烟的人养了一只蜗牛(Sna订
5、s)抽LuckyStrike牌香烟的人喜欢喝桔子汁(orangejuice)乌克兰人(Ukrainian)欢喝茶(tea)日本人(japanese)抽pariiaments牌的烟抽kools牌的香烟的人与养马(horse)的人是邻居喜欢喝咖啡(coffee)的人住在绿(green)房子里绿(green)房子在彖牙白(ivory)房子的右边(图中的右边)屮间那个房子里的人段欢喝牛奶(milk)根据以上条件,你能告诉我哪个房子里的人养斑马(zebra),哪个房子里的人喜欢喝水(water)吗?或者你能把所有的东西都对号入座吗?传教士与野人问题:有N个
6、传教士和N个野人来到河边准备渡河,河岸有一条船,每次至多可k人乘渡。问传教士为了安全起见,应如何规划摆渡方案,使得任何时刻,在河的两岸以及船上的野人数目总是不超过传教士的数目。即求解传教士和野人从左岸全部摆渡到右岸的过程中,任何吋刻满足M(传教士数)MC(野人数)和M+CWk的摆渡方案。四、实验方法与步骤1、启动Windows2000以上版本操作环境。2、启动PROLOG集成开发环境。3、选择F订es/New/TextEdit项可以进行源程序编辑。4、编辑结束Z后,选择Comp订e项编译程序,并分析程序是否有语法或逻辑错误。5、在主窗口的询问栏写
7、入问题,选择Prove求取问题答案。6、退出,选择Files/Exit项,可以退出PROLOG编辑编译环境,返冋到Windows环境。五、求解的问题与程序爱因斯坦的超级问题:实现的代码如下member(X,[X
8、Tail]).member(X,[Head
9、Tail]):-member(X,Tail).color(h(C,N,P,Y,D),C).nation(h(C,N,P,Y,D),N).pet(h(C,N,P,Y,D),P).yan(h(C,N,P,Y,D),Y).drink(h(C,N,P,Y,D),D).next(A,B,[A,B,C,D,
10、E]).next(B,C,[A,B,C,D,E]).next(C,D,[A,B,C,D,E]).next(D,E,[A,B,C,D,E]