人工智能实验报告(华北电力大学科技学院)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五、求解的问题与程序 爱因斯坦超级思想: member(X,[X|Tail]). member(X,[Head|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,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]). next(B,A,[A,B,C,D,E]). next(C,B,[A,B,C,D,E]). next(D,C,[A,B,C,D,E]). next(E,D,[A,B,C,D,E]). middle(X,[_,_,X,_,_]). first(A,[A|X]). solve(X,TT,TTT):-
第 页共 页
华北电力大学科技学院实验报告
member(X,[X|T]). member(X,[_|T]):-member(X,T). member_stack(Element,Stack):-member(Element,Stack). go(Start,Goal):-empty_stack(Empty_been_stack),stack(Start, Empty_been_stack, Been_stack),path(Start, Goal, Been_stack). test:-go(state(w,w,w,w), state(e,e,e,e)).
第 页共 页
华北电力大学科技学院实验报告
yan(Z10,'Lucky Strike'), %乌克兰人(ukrainian)喜欢喝茶(tea)。 member(Z11,X), nation(Z11,ukrainian), drink(Z11,tea), %日本人(japanese)抽 parliaments 牌的烟。 member(Z12,X), nation(Z12,japanese), yan(Z12,parliaments), %抽 kools 牌的香烟的人与养马(horse)的人是邻居。 member(Z13,X), pet(Z13,horse), next(Z14,Z13,X), yan(Z14,kools), %喜欢喝咖啡(coffee)的人住在绿(green)房子里。 member(Z15,X), color(Z15,green), drink(Z15,coffee), %绿(green)房子在象牙白(ivory)房子的右边(图中的右边)。 member(Z16,X), color(Z16,ivory), next(Z17,Z16,X), %这里我们没有使用右边的条件,而是假设它们是邻居,所以最后 的答案有两个。 color(Z17,green), %这一点请读者自己修改,当然还需要编写一个判断右边的谓词。 %中间那个房子里的人喜欢喝牛奶(milk)。 middle(Z18,X), drink(Z18,milk), %以上是所有的条件,下面开始回答我们的问题。 %找出宠物为 zebra 的房间。 member(TT,X), pet(TT,zebra), %找出喝水的房间。 member(TTT,X), drink(TTT,water). 农夫过河问题:
第 页共 页
华北电力大学科技学院实验报告
move(state(X,X,G,C),state(Y,Y,G,C)):-opp(X,Y),not(unsafe(state(Y,Y,G,C))),wr itelist(['try famer takes wolf', Y, Y, G, C]). move(state(X,W,X,C),state(Y,W,Y,C)):-opp(X,Y),not(unsafe(state(Y,W,Y,C))),wr itelist(['try famer takes goat', Y, W, Y, C]). move(state(X,W,G,X),state(Y,W,G,Y)):-opp(X,Y),not(unsafe(state(Y,W,G,Y))),wr itelist(['try famer takes cabage', Y, W, G, Y]). move(state(X,W,G,C),state(Y,W,G,C)):-opp(X,Y),not(unsafe(state(Y,W,G,C))),wr itelist(['try famer takes himself', Y, W, G, C]). move(state(F,W,G,C),state(F,W,G,C)):-writelist(['BACKTRACK FROM',F,W,G,C])/*,fail*/.
华北电力大学科技学院
实验报告
| |
实验名称 PROLOG 语言编程练习及图搜索问题求解
课程名称 人工智能及应用
| |
专业班级:软件 12k1
学生姓名:马云峰
学 号:121909020116
成 绩:
指导教师:刘丽
实验日期:2015.5.14
华北电力大学科技学院实验报告
一、实验目的及要求 1. 熟悉 PROLOG 的运行环境,进行 prolog 的基本编程练习。 了解 PROLOG 语言中常量、变量的表示方法。PROLOG 的简单程序结构,掌握分析问 题、询问解释技巧;进行事实库、规则库的编写,并在此基础上进行简单的询问。 具体实验课上相关内容,练习例 1 到例 6 的内容。 2. 图搜索问题求解。 任选以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问 题、八皇后问题、过河问题等,选两个。 要求实验报告中包括:程序及其注释和说明、console 表单中的程序运行结果。 二、所用仪器、设备 PC 机和 trinc prolog 编译软件 三、实验原理 PROLOG 语言是一种以逻辑推理为基础的逻辑型程序设计语言,是一种陈述性语言而 不是过程性语言。PROLOG 语言能够自动实现模式匹配和回溯、具备递归技术,而且语法 简明,可以简化复杂问题求解。
opp(e,w). opp(w,e).
writelist([]). %writelist([]):-nl. writelist([H|T]):-write(H),nl,writelist(T).
reverse_writelist([]). %reverse_writelist([[H|T]]):-reverse_writelist(T),write(H),nl. reverse_writelist([H|T]):-reverse_writelist(T),write(H),nl. empty_stack([]). stack(Top,Stack,[Top|Stack]). reverse_print_stack(Stack):-empty_stack(Stack). reverse_print_stack(Stack):-stack(E,Rest,Stack),reverse_print_stack(Rest),wr ite(E),nl.
第 页共 页
华北电力大学科技学院实验报告 绿(green)房子在象牙白(ivory)房子的右边(图中的右边) 中间那个房子里的人喜欢喝牛奶(milk) 根据以上条件,你能告诉我哪个房子里的人养斑马(zebra),哪个房子里的人喜欢喝 水(water)吗?或者你能把所有的东西都对号入座吗? 农夫过河问题; 一个农夫带着一只羊,一条狼和一颗白菜想从河的东岸到西岸去。 河上仅有一条船。假设他每次只能带一只羊,或者一条狼,或者一颗白菜过河,并且 当人不在场时,狼和羊,或羊和白菜不能单独在一起。求出他带一只羊,一条狼和一颗 白菜过河的所有办法。 四、实验方法与步骤 1、启动 Windows 2000 以上版本操作环境。 2、启动 PROLOG 集成开发环境。 3、选择 Files/New/Text Edit 项可以进行源程序编辑。
第 页共 页
华北电力大学科技学院实验报告
%首先把 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)的房子里 西班牙人(spaniard)养了一条狗(dog) 挪威人(norwegian)住在左边的第一个房子里 黄房子(yellow)里的人喜欢抽 kools 牌的香烟 抽 chesterfields 牌香烟的人与养狐狸(fox)的人是邻居 挪威人(norwegian)住在蓝色(blue)的房子旁边 抽 winston 牌香烟的人养了一只蜗牛(Snails) 抽 Lucky Strike 牌香烟的人喜欢喝桔子汁(orange juice) 乌克兰人(ukrainian)喜欢喝茶(tea) 日本人(japanese)抽 parliaments 牌的烟 抽 kools 牌的香烟的人与养马(horse)的人是邻居 喜欢喝咖啡(coffee)的人住在绿(green)房子里
%英国人(englishman)住在红色(red)的房子里。 member(Z1,X), %首先从 X 列表中选择一个房间 Z1, color(Z1,red), %Z1 的颜色是 red。 nation(Z1,englishman), %Z1 里住的人是 englishman。 下同。 %西班牙人(spaniard)养了一条狗(dog)。 member(Z2,X), pet(Z2,dog), nation(Z2,spaniard), %挪威人(norwegian)住在左边的第一个房子里。 first(Z3,X), nation(Z3,norwegian), %黄房子(yellow)里的人喜欢抽 kools 牌的香烟。 member(Z4,X), yan(Z4,kools), color(Z4,yellow), %抽 chesterfields 牌香烟的人与养狐狸(fox)的人是邻居。 member(Z5,X), pet(Z5,fox), next(Z6,Z5,X), %用 next(Z5,Z6,X)也一样。 yan(Z6,chesterfields), %挪威人(norwegian)住在蓝色(blue)的房子旁边。 member(Z7,X), color(Z7,blue), next(Z8,Z7,X), nation(Z8,norwegian), %抽 winston 牌香烟的人养了一只蜗牛(Snails)。 member(Z9,X), yan(Z9,winston), pet(Z9,snails), %抽 Lucky Strike 牌香烟的人喜欢喝桔子汁(orange juice)。 member(Z10,X), drink(Z10,'orange juice'),
stack(Next_state, Been_stack, New_been_stack),path(Next_state, Goal, New_been_stack).
unsafe(st源自文库te(X,Y,Y,C)):-opp(X,Y). unsafe(state(X,W,Y,Y)):-opp(X,Y).
4、编辑结束之后,选择 Compile 项编译程序,并分析程序是否有语法或逻辑错误。
第 页共 页
华北电力大学科技学院实验报告
5、在主窗口的询问栏写入问题,选择 Prove 求取问题答案。
第 页共 页
华北电力大学科技学院实验报告
6、退出,选择 Files/Exit 项,可以退出 PROLOG 编辑编译环境,返回到 Windows 环境。
path(Goal,Goal,Been_stack):-write('Solution Path IS'),nl,reverse_print_stack(Been_stack). path(State,Goal,Been_stack):-move(State, Next_state),not(member_stack(Next_state, Been_stack)),
相关文档
最新文档