PROLOG语言编程练习及图搜索问题求解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二:传教士与野人问题
//从左岸到右岸船上的人数
move(1,0).
第 页共 页
华北电力大学科技学院百度文库验报告
move(0,1). move(0,2). move(2,0). move(1,1). //判断当前状态是否合法 legal((X,Y,_)):-legal1(X), legal1(Y). legal1((X,Y)):- X=:=0,Y>=0,!. legal1((X,Y)):- Y=:=0,X>=0,!. legal1((X,Y)):- X>=Y,X>=0,Y>=0. //根据(X,Y,0),Move,求出 Statu1 update((X,Y,0),Move,Statu1):(A,B)=X,//左岸的状态给变量 X (C,D)=Y,//右岸的状态给变量 Y (E,F)=Move,//移动的人与传教士的个数 C1 is C+E, D1 is D+F, A1 is A-E, B1 is B-F, Statu1=((A1,B1),(C1,D1),1).//求出右岸的状态
野人数),船的位置)。 (2) 定义目标状态。这里是:((0,0),(3,3),1) (3) 描述可能的动作。船上所能够载人的状态就是可能的操作。用谓词 move 表
第 页共 页
华北电力大学科技学院实验报告 示。 (4) 判断合法状态 (5)深度优先搜索
五、求解的问题与程序 实验一:字谜问题 //定义 word 规则 word(abalone,a,b,a,l,o,n,e). word(abandon,a,b,a,n,d,o,n). word(enhance,e,n,h,a,n,c,e). word(anagram,a,n,a,g,r,a,m). word(connect,c,o,n,n,e,c,t). word(elegant,e,l,e,g,a,n,t). crosswd(V1,V2,V3,H1,H2,H3):-//定义 crosswd 规则
L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1), 0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1),
第 页共 页
华北电力大学科技学院实验报告
((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 1), (3, 2), 0), (0, 0), (3, 3), 1]
SOLUTION: L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1),
第 页共 页
华北电力大学科技学院实验报告
word(V1,_,A,_,B,_,C,_),//行与列交叉的设为变量 word(V2,_,D,_,E,_,F,_), word(V3,_,G,_,H,_,I,_), word(H1,_,A,_,D,_,G,_), word(H2,_,B,_,E,_,H,_), word(H3,_,C,_,F,_,I,_).
update((X,Y,1),Move,Statu1):(A,B)=X,
第 页共 页
华北电力大学科技学院实验报告
(C,D)=Y, (E,F)=Move, C1 is C-E, D1 is D-F, A1 is A+E, B1 is B+F, Statu1=((A1,B1),(C1,D1),0).//求出左岸的状态 //调用 connect 规则,求出 Statu1,并对其进行判断是否合法 connect(Statu,Statu1):move(X,Y), update(Statu,(X,Y),Statu1), legal(Statu1).
* 封面左侧印痕处装订
华北电力大学科技学院实验报告
一、实验目的及要求
1. 熟悉 PROLOG 的运行环境,进行 prolog 的基本编程练习。 了解 PROLOG 语言中常量、变量的表示方法。PROLOG 的简单程序结构,掌握分析问 题、询问解释技巧;进行事实库、规则库的编写,并在此基础上进行简单的询问。 具体实验课上相关内容,练习例 1 到例 6 的内容。 2. 图搜索问题求解。 任选以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问 题、八皇后问题、过河问题等,选两个。 要求实验报告中包括:程序及其注释和说明、console 表单中的程序运行结果。
第 页共 页
华北电力大学科技学院实验报告
对字谜问题,初步了解规则与递归的使用方法;对于传教士与野人问题, 稍有难度,就是对许多小的规则一起调用的方法,最后涉及到深度优先的算 法,与老师和同学进行讨论,并一步步算出结果,加深深度优先算法,提高 了思维能力,并继续努力!
七、所附实验输出的结果或数据 实验一: SOLUTION:
((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 2), (3, 1), 0), (0, 0), (3, 3), 1]
(3, 2), 0), (0, 0), (3, 3), 1] SOLUTION:
L=[((3, 3), (0, 0), 0), ((3, 1), (0, 2), 1), ((3, 2), (0, 1), 0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1),
华北电力大学科技学院
实验报告
| |
实验名称 PROLOG 语言编程练习及图搜索问题求解
课程名称 人工智能及应用
| |
专业班级:
学生姓名:
学 号:
成 绩:
指导教师:
实验日期:
(实验报告如打印,纸张用 A4,左装订;页边距:上下 2.5cm,左 2.9cm, 右 2.1cm;字体:宋体小四号,1.25 倍行距。) 验证性、综合性实验报告应含的主要内容:
SOLUTION: L=[((3, 3), (0, 0), 0), ((3, 1), (0, 2), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1), ((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 2), (3, 1), 0), (0, 0), (3, 3), 1]
SOLUTION: L=[((3, 3), (0, 0), 0), ((3, 1), (0, 2), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1), ((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((0, 2), (3, 1), 0), (0, 0), (3, 3), 1]
SOLUTION: L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1), ((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((0, 2), (3, 1), 0), (0, 0), (3, 3), 1]
L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1), 0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1),
((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((0, 2), (3, 1), 0), ((0, 0), (3, 3), 1), ((0, 1),
member(X,[X|Tail]). member(X,[Head|Tail]):-member(X,Tail). //深度优先算法 findroad(X,X,L,L). findroad(X,Y,L,L1):connect(X,Z),not(member(Z,L)), findroad(Z,Y,[Z|L],L1). 六、讨论与结论 根据本次实验收获很大,又了解一门新的编程语言,与平时用的不一样, 是面向逻辑的,通过老师上课和课下的实验,又加深对其的了解。
二、所用仪器、设备
PC 机和 trinc prolog 编译软件
三、实验原理
PROLOG 语言是一种以逻辑推理为基础的逻辑型程序设计语言,是一种陈述性语言而 不是过程性语言。PROLOG 语言能够自动实现模式匹配和回溯、具备递归技术,而且语法 简明,可以简化复杂问题求解。
四、实验方法与步骤
1,先搭配实验环境:PC 机和 trinc prolog 编译软件 2,写好程序进行编译 3,用“?-”来检测程序结果 4,实验一 (1) 定义 word 规则 (2) 定义 crossword (3) 定义行列重复的设为变量 (4) 递归算法查找结果 5,实验二 (1)设计该问题的状态。例如:((左岸牧师数,左岸野人数),(右岸牧师数,右岸
一、实验目的及要求 二、所用仪器、设备 三、实验原理 四、实验方法与步骤 五、实验结果与数据处理 六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问 题等进行分析和讨论,对实验的进一步想法或改进意见) 七、所附实验输出的结果或数据 设计性实验报告应含的主要内容: 一、设计要求 二、选择的方案 三、所用仪器、设备 四、实验方法与步骤 五、实验结果与数据处理 六、结论(依据“设计要求”) 七、所附实验输出的结果或数据
SOLUTION: L=[((3, 3), (0, 0), 0), ((3, 1), (0, 2), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1), ((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 1), (3, 2), 0), (0, 0), (3, 3), 1]
((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((0, 2), (3, 1), 0), ((0, 0), (3, 3), 1),
((0, 1), (3, 2), 0), (0, 0), (3, 3), 1] SOLUTION:
//从左岸到右岸船上的人数
move(1,0).
第 页共 页
华北电力大学科技学院百度文库验报告
move(0,1). move(0,2). move(2,0). move(1,1). //判断当前状态是否合法 legal((X,Y,_)):-legal1(X), legal1(Y). legal1((X,Y)):- X=:=0,Y>=0,!. legal1((X,Y)):- Y=:=0,X>=0,!. legal1((X,Y)):- X>=Y,X>=0,Y>=0. //根据(X,Y,0),Move,求出 Statu1 update((X,Y,0),Move,Statu1):(A,B)=X,//左岸的状态给变量 X (C,D)=Y,//右岸的状态给变量 Y (E,F)=Move,//移动的人与传教士的个数 C1 is C+E, D1 is D+F, A1 is A-E, B1 is B-F, Statu1=((A1,B1),(C1,D1),1).//求出右岸的状态
野人数),船的位置)。 (2) 定义目标状态。这里是:((0,0),(3,3),1) (3) 描述可能的动作。船上所能够载人的状态就是可能的操作。用谓词 move 表
第 页共 页
华北电力大学科技学院实验报告 示。 (4) 判断合法状态 (5)深度优先搜索
五、求解的问题与程序 实验一:字谜问题 //定义 word 规则 word(abalone,a,b,a,l,o,n,e). word(abandon,a,b,a,n,d,o,n). word(enhance,e,n,h,a,n,c,e). word(anagram,a,n,a,g,r,a,m). word(connect,c,o,n,n,e,c,t). word(elegant,e,l,e,g,a,n,t). crosswd(V1,V2,V3,H1,H2,H3):-//定义 crosswd 规则
L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1), 0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1),
第 页共 页
华北电力大学科技学院实验报告
((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 1), (3, 2), 0), (0, 0), (3, 3), 1]
SOLUTION: L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1),
第 页共 页
华北电力大学科技学院实验报告
word(V1,_,A,_,B,_,C,_),//行与列交叉的设为变量 word(V2,_,D,_,E,_,F,_), word(V3,_,G,_,H,_,I,_), word(H1,_,A,_,D,_,G,_), word(H2,_,B,_,E,_,H,_), word(H3,_,C,_,F,_,I,_).
update((X,Y,1),Move,Statu1):(A,B)=X,
第 页共 页
华北电力大学科技学院实验报告
(C,D)=Y, (E,F)=Move, C1 is C-E, D1 is D-F, A1 is A+E, B1 is B+F, Statu1=((A1,B1),(C1,D1),0).//求出左岸的状态 //调用 connect 规则,求出 Statu1,并对其进行判断是否合法 connect(Statu,Statu1):move(X,Y), update(Statu,(X,Y),Statu1), legal(Statu1).
* 封面左侧印痕处装订
华北电力大学科技学院实验报告
一、实验目的及要求
1. 熟悉 PROLOG 的运行环境,进行 prolog 的基本编程练习。 了解 PROLOG 语言中常量、变量的表示方法。PROLOG 的简单程序结构,掌握分析问 题、询问解释技巧;进行事实库、规则库的编写,并在此基础上进行简单的询问。 具体实验课上相关内容,练习例 1 到例 6 的内容。 2. 图搜索问题求解。 任选以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问 题、八皇后问题、过河问题等,选两个。 要求实验报告中包括:程序及其注释和说明、console 表单中的程序运行结果。
第 页共 页
华北电力大学科技学院实验报告
对字谜问题,初步了解规则与递归的使用方法;对于传教士与野人问题, 稍有难度,就是对许多小的规则一起调用的方法,最后涉及到深度优先的算 法,与老师和同学进行讨论,并一步步算出结果,加深深度优先算法,提高 了思维能力,并继续努力!
七、所附实验输出的结果或数据 实验一: SOLUTION:
((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 2), (3, 1), 0), (0, 0), (3, 3), 1]
(3, 2), 0), (0, 0), (3, 3), 1] SOLUTION:
L=[((3, 3), (0, 0), 0), ((3, 1), (0, 2), 1), ((3, 2), (0, 1), 0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1),
华北电力大学科技学院
实验报告
| |
实验名称 PROLOG 语言编程练习及图搜索问题求解
课程名称 人工智能及应用
| |
专业班级:
学生姓名:
学 号:
成 绩:
指导教师:
实验日期:
(实验报告如打印,纸张用 A4,左装订;页边距:上下 2.5cm,左 2.9cm, 右 2.1cm;字体:宋体小四号,1.25 倍行距。) 验证性、综合性实验报告应含的主要内容:
SOLUTION: L=[((3, 3), (0, 0), 0), ((3, 1), (0, 2), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1), ((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 2), (3, 1), 0), (0, 0), (3, 3), 1]
SOLUTION: L=[((3, 3), (0, 0), 0), ((3, 1), (0, 2), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1), ((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((0, 2), (3, 1), 0), (0, 0), (3, 3), 1]
SOLUTION: L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1), ((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((0, 2), (3, 1), 0), (0, 0), (3, 3), 1]
L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1), 0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1),
((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((0, 2), (3, 1), 0), ((0, 0), (3, 3), 1), ((0, 1),
member(X,[X|Tail]). member(X,[Head|Tail]):-member(X,Tail). //深度优先算法 findroad(X,X,L,L). findroad(X,Y,L,L1):connect(X,Z),not(member(Z,L)), findroad(Z,Y,[Z|L],L1). 六、讨论与结论 根据本次实验收获很大,又了解一门新的编程语言,与平时用的不一样, 是面向逻辑的,通过老师上课和课下的实验,又加深对其的了解。
二、所用仪器、设备
PC 机和 trinc prolog 编译软件
三、实验原理
PROLOG 语言是一种以逻辑推理为基础的逻辑型程序设计语言,是一种陈述性语言而 不是过程性语言。PROLOG 语言能够自动实现模式匹配和回溯、具备递归技术,而且语法 简明,可以简化复杂问题求解。
四、实验方法与步骤
1,先搭配实验环境:PC 机和 trinc prolog 编译软件 2,写好程序进行编译 3,用“?-”来检测程序结果 4,实验一 (1) 定义 word 规则 (2) 定义 crossword (3) 定义行列重复的设为变量 (4) 递归算法查找结果 5,实验二 (1)设计该问题的状态。例如:((左岸牧师数,左岸野人数),(右岸牧师数,右岸
一、实验目的及要求 二、所用仪器、设备 三、实验原理 四、实验方法与步骤 五、实验结果与数据处理 六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问 题等进行分析和讨论,对实验的进一步想法或改进意见) 七、所附实验输出的结果或数据 设计性实验报告应含的主要内容: 一、设计要求 二、选择的方案 三、所用仪器、设备 四、实验方法与步骤 五、实验结果与数据处理 六、结论(依据“设计要求”) 七、所附实验输出的结果或数据
SOLUTION: L=[((3, 3), (0, 0), 0), ((3, 1), (0, 2), 1), ((3, 2), (0, 1),
0), ((3, 0), (0, 3), 1), ((3, 1), (0, 2), 0), ((1, 1), (2, 2), 1), ((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 1), (3, 2), 0), (0, 0), (3, 3), 1]
((2, 2), (1, 1), 0), ((0, 2), (3, 1), 1), ((0, 3), (3, 0), 0), ((0, 1), (3, 2), 1), ((0, 2), (3, 1), 0), ((0, 0), (3, 3), 1),
((0, 1), (3, 2), 0), (0, 0), (3, 3), 1] SOLUTION: