人工智能实验报告.docx

上传人:b****2 文档编号:11752175 上传时间:2023-06-02 格式:DOCX 页数:11 大小:220.03KB
下载 相关 举报
人工智能实验报告.docx_第1页
第1页 / 共11页
人工智能实验报告.docx_第2页
第2页 / 共11页
人工智能实验报告.docx_第3页
第3页 / 共11页
人工智能实验报告.docx_第4页
第4页 / 共11页
人工智能实验报告.docx_第5页
第5页 / 共11页
人工智能实验报告.docx_第6页
第6页 / 共11页
人工智能实验报告.docx_第7页
第7页 / 共11页
人工智能实验报告.docx_第8页
第8页 / 共11页
人工智能实验报告.docx_第9页
第9页 / 共11页
人工智能实验报告.docx_第10页
第10页 / 共11页
人工智能实验报告.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

人工智能实验报告.docx

《人工智能实验报告.docx》由会员分享,可在线阅读,更多相关《人工智能实验报告.docx(11页珍藏版)》请在冰点文库上搜索。

人工智能实验报告.docx

人工智能实验报告

 

华北电力大学科技学院

实验报告

 

实验名称PROLOG语言编程练习及图搜索问题求解

课程名称人工智能及应用

 

专业班级:

软件12K2学生姓名:

学号:

成绩:

指导教师:

刘丽实验日期:

2015.5

 

一、实验目的及要求

实验目的:

1.熟悉PROLOG的运行环境,进行PROLOG的根本编程练习。

了解PROLOG语言中常量、变量的表示方法。

PROLOG的简单程序结构,掌握分析问题、询问解释技巧;进行事实库、规那么库的编写,并在此根底上进行简单的询问。

具体实验课上相关内容,练习example1到example6的内容。

2.图搜索问题求解。

实验要求:

1.爱因斯坦的超级问题

有五个房子,每个房子的颜色不同,里面分别住着不同国家的人,每个人都有自己养的不同的宠物,喜欢喝不同的饮料,抽不同牌子的烟。

现在以下的一些信息:

a)英国人〔englishman〕住在红色〔red〕的房子里

b)西班牙人〔spaniard〕养了一条狗〔dog〕

c)挪威人〔norwegian〕住在左边的第一个房子里

d)黄房子〔yellow〕里的人喜欢抽kools牌的香烟

e)抽chesterfields牌香烟的人与养狐狸〔fox〕的人是邻居

f)挪威人〔norwegian〕住在蓝色〔blue〕的房子旁边

g)抽winston牌香烟的人养了一只蜗牛〔Snails〕

h)抽LuckyStrike牌香烟的人喜欢喝桔子汁〔orangejuice〕

i)乌克兰人〔ukrainian〕喜欢喝茶〔tea〕

j)日本人〔japanese〕抽parliaments牌的烟

k)抽kools牌的香烟的人与养马〔horse〕的人是邻居

l)喜欢喝咖啡〔coffee〕的人住在绿〔green〕房子里

m)绿〔green〕房子在象牙白〔ivory〕房子的右边〔图中的右边〕

n)中间那个房子里的人喜欢喝牛奶〔milk〕

o)根据以上条件,你能告诉我哪个房子里的人养斑马〔zebra〕,哪个房子里的人喜欢喝水〔water〕吗?

或者你能把所有的东西都对号入座吗?

2.传教士与野人问题

传教士和食人者问题〔TheMissionariesandCannibalsProblem〕。

在河的左岸有3个传教士、1条船和3个食人者,传教士们想用这条船将所有的成员运过河去,但是受到以下条件的限制:

〔1〕传教士和食人者都会划船,但船一次最多只能装运两个;

〔2〕在任何岸边食人者数目都不得超过传教士,否那么传教士就会遭遇危险:

被食人者攻击甚至被吃掉。

此外,假定食人者会服从任何一种过河安排,试规划出一个确保全部成员平安过河的方案。

二、所用仪器、设备

PC机和trincprolog编译软件

三、实验原理

PROLOG语言是一种以逻辑推理为根底的逻辑型程序设计语言,是一种陈述性语言而不是过程性语言。

PROLOG语言能够自动实现模式匹配和回溯、具备递归技术,而且语法简明,可以简化复杂问题求解。

四、实验方法与步骤

1.翻开trincprolog编译软件

2.新建文本并(Flie→New→TextEdit)

3.根据实验要求在新建的文本中输入程序代码

4.保存(Save)并编译(Compile)

5.在trincprolog下输入问题显示(Prove)实验要求的结果

五、求解的问题与程序

1.爱因斯坦的超级问题

代码:

member(X,[X|Tail]).

member(X,[Head|Tail]):

-member(X,Tail).%X是表Tail的成员

%定义房间各种属性的谓词

color(h(C,N,P,Y,D),C).%h(C,N,P,Y,D)的color是C

nation(h(C,N,P,Y,D),N).%h(C,N,P,Y,D)的nation是N

pet(h(C,N,P,Y,D),P).%h(C,N,P,Y,D)的pet是P

yan(h(C,N,P,Y,D),Y).%h(C,N,P,Y,D)的yan是Y

drink(h(C,N,P,Y,D),D).%h(C,N,P,Y,D)的drink的是D

%定义邻居关系的谓词next

next(A,B,[A,B,C,D,E]).

next(B,A,[A,B,C,D,E]).%A和B在表中是相邻关系

next(B,C,[A,B,C,D,E]).

next(C,B,[A,B,C,D,E]).%B和C在表中是相邻关系next(C,D,[A,B,C,D,E]).

next(D,C,[A,B,C,D,E]).%C和D在表中是相邻关系next(D,E,[A,B,C,D,E]).

next(E,D,[A,B,C,D,E]).%D和E在表中是相邻关系

%定义房子位置的谓词

middle(X,[_,_,X,_,_]).%X在表中的中间位置

first(A,[A|X]).%A是表X的表头

%定义房子右边的关系谓词right

right(A,B,[A,B,C,D,E]).%表中B在A的右边

right(B,C,[A,B,C,D,E]).%表中C在B的右边

right(C,D,[A,B,C,D,E]).%表中D在C的右边

right(D,E,[A,B,C,D,E]).%表中E在D的右边

solve(X,TT,TTT):

-

%把X绑定为房间列表,此时的房间的属性还不能确定,所以都使用变量代表。

X=[h(C1,N1,P1,Y1,D1),h(C2,N2,P2,Y2,D2),h(C3,N3,P3,Y3,D3),h(C4,N4,P4,Y4,D4),h(C5,N5,P5,Y5,D5)],

%英国人〔englishman〕住在红色〔red〕的房子里。

member(Z1,X),%从X列表中选择一个房间Z1

color(Z1,red),%Z1的颜色是red

nation(Z1,englishman),%Z1里住的人是englishman

%西班牙人〔spaniard〕养了一条狗〔dog〕。

member(Z2,X),%从X列表中选择一个房间Z2

pet(Z2,dog),%Z2里养的宠物是dog

nation(Z2,spaniard),%Z2里住的人是spaniard

%挪威人〔norwegian〕住在左边的第一个房子里。

first(Z3,X),%X列表中第一个房间Z3

nation(Z3,norwegian),%Z3里住的人是norwegian

%黄房子〔yellow〕里的人喜欢抽kools牌的香烟。

member(Z4,X),%从X列表中选择一个房间Z4

yan(Z4,kools),%Z4里抽的烟是kools

color(Z4,yellow),%Z4的颜色是yellow

%抽chesterfields牌香烟的人与养狐狸〔fox〕的人是邻居。

member(Z5,X),%从X列表中选择一个房间Z5

pet(Z5,fox),%Z5里养的宠物是fox

next(Z6,Z5,X),%Z5的邻居是Z6

yan(Z6,chesterfields),%Z6里抽的烟是chesterfields

%挪威人〔norwegian〕住在蓝色〔blue〕的房子旁边。

member(Z7,X),%从X列表中选择一个房间Z7

color(Z7,blue),%Z7的颜色是blue

next(Z8,Z7,X),%Z7的邻居是Z8

nation(Z8,norwegian),%Z8里住的人是norwegian

%抽winston牌香烟的人养了一只蜗牛〔Snails〕。

member(Z9,X),%从X列表中选择一个房间Z9

yan(Z9,winston),%Z9里抽的烟是winston

pet(Z9,snails),%Z9里养的宠物是snails

%抽LuckyStrike牌香烟的人喜欢喝桔子汁〔orangejuice〕。

member(Z10,X),%从X列表中选择一个房间Z10

drink(Z10,'orangejuice'),%Z10里喝的饮料是orangejuice

yan(Z10,'LuckyStrike'),%Z10里抽的烟是LuckyStrike

%乌克兰人〔ukrainian〕喜欢喝茶〔tea〕。

member(Z11,X),%从X列表中选择一个房间Z11

nation(Z11,ukrainian),%Z11里住的人是ukrainian

drink(Z11,tea),%Z11里喝的饮料是tea

%日本人〔japanese〕抽parliaments牌的烟。

member(Z12,X),%从X列表中选择一个房间Z12

nation(Z12,japanese),%Z12里住的人是japanese

yan(Z12,parliaments),%Z12里抽的烟是parliaments

%抽kools牌的香烟的人与养马〔horse〕的人是邻居

member(Z13,X),%从X列表中选择一个房间Z13

pet(Z13,horse),%Z13里养的宠物是horse

next(Z14,Z13,X),%Z13的邻居是Z14

yan(Z14,kools),%Z14里抽的烟是kools

%喜欢喝咖啡〔coffee〕的人住在绿〔green〕房子里。

member(Z15,X),%从X列表中选择一个房间Z15

color(Z15,green),%Z15的颜色是green

drink(Z15,coffee),%Z15里喝的饮料是office

%绿〔green〕房子在象牙白〔ivory〕房子的右边〔图中的右边〕

member(Z16,X),%从X列表中选择一个房间Z16

color(Z16,ivory),%Z16的颜色是ivory

right(Z16,Z17,X),%在Z16右边的房子是Z17

color(Z17,green),%Z17的颜色是green

%中间那个房子里的人喜欢喝牛奶〔milk〕。

middle(Z18,X),%从X列表中选择一个房间Z18

drink(Z18,milk),%Z18里喝的饮料是milk

%以上是所以的条件,下面开始答复我们的问题

%找出宠物为zebra的房间。

member(TT,X),%从X列表中选择一个房间TT

pet(TT,zebra),%TT里养的宠物是zebra

%找出喝水的房间。

member(TTT,X),%从X列表中选择一个房间TTT

drink(TTT,water).%TTT里喝的饮料是water

2.传教士与野人问题

代码:

%船上所能够载人的状态就是可能的操作

move(1,0).%表示船上有一位传教士,没有野人

move(0,1).%表示船上没有传教士,有一位野人

move(0,2).%表示船上没有传教士,有两位野人

move(2,0).%表示船上有两位传教士,没有野人

move(1,1).%表示船上有一位传教士,一个野人

%判断两岸的状态是否合法

legal((X,Y,_)):

-%X为左岸,Y为右岸,_取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,%X储存A,B两个数值

(C,D)=Y,%Y储存C,D两个数值

(E,F)=Move,%船上Move储存传教士E,野人F两个数值

C1isC+E,%用C1记录C+E的结果

D1isD+F,%用D1记录D+F的结果

A1isA-E,%用A1记录A-E的结果

B1isB-F,%用B1记录B-F的结果

Statu1=((A1,B1),(C1,D1),1).%船到右岸后左右两岸传教士野人的人数状况

update((X,Y,1),Move,Statu1):

-%船在右岸将要采取的操作。

(A,B)=X,%X改为储存A,B两个数值

(C,D)=Y,%Y改为储存C,D两个数值

(E,F)=Move,%船上Move重新储存传教士E,野人F两个数值

C1isC-E,%C1重新记录C-E的结果

D1isD-F,%D1重新记录D-F的结果

A1isA+E,%A1重新记录A+E的结果

B1isB+F,%B1重新记录B+F的结果

Statu1=((A1,B1),(C1,D1),0).%船到右岸后左右两岸传教士野人的人数状况

%connect谓词得到正确操作船的方案

connect(Statu,Statu1):

-

move(X,Y),%船载传教士X,野人Y

update(Statu,(X,Y),Statu1),%更新两岸传教士野人的人数状况

legal(Statu1).%判断Statu1两岸的状态是否合法

member(X,[X|Tail]).

member(X,[Head|Tail]):

-member(X,Tail).%判断对象X是表的成员

%再使用深度搜索方法就可以找到答案了

findroad(X,X,L,L).%递归的边界条件

findroad(X,Y,L,L1):

-%L为储存的路径表

connect(X,Z),not(member(Z,L)),%当前状态Z不在已经储存的路径表中

findroad(Z,Y,[Z|L],L1).%形成递归

 

六、讨论与结论

1.爱因斯坦的超级问题

用PROLOG语言解决爱因斯坦的超级问题主要是先定义谓词描述事实,再用定义的谓词描述的内容,最后定义所求的谓词求解。

本实验主要是运用表,对的信息与表中的进行匹配得到最后的结果。

2.传教士与野人问题

图搜索问题解决传教士与野人问题,PROLOG语言能够自动实现模式匹配和回溯、具备递归技术。

本实验的重点是定义递归谓词,然后是船的操作谓词,最后还有的是判断传教士是否平安的谓词,在定义完上面所述的谓词后,输入原状态和最后得到岸对面的状态,通过自动匹配,递归等得出可行方案。

七、所附实验输出的结果或数据

1.爱因斯坦超级问题的输出结果(如下列图)

2.传教士与野人问题输出的结果(如下列图)

八、Prolog实验课的问题

程序例子中用到过哪些环境自带的谓词?

1)中运用了比拟谓词>=,输出谓词write(X),否认谓词not(X)

2)example2.txt中没有运用环境自带的谓词

3)example3.txt中运用了输出谓词write(X),nl谓词,接口谓词fail

4)example4.txt中运用了输出谓词write(X)

5)example5.txt中运用了输出谓词write(X),nl谓词,接口谓词fail,截断谓词!

6)Example6.txt中运用了截断谓词!

7)Example7.txt中没有运用环境自带的谓词

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2