PROLOG语言编程练习及图搜索问题求解

合集下载

图搜索问题求解(二)

图搜索问题求解(二)
1
0
1
1
1
1
0
0
1
1
1
0
0
0
1
0
1
1
1
0
0
0
0
0
0
[实现提示]
可使用回溯方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;
否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的
通路都探索到而未能到达出口,则所设定的迷宫没有通路。
二实验过程记录:
1、打开Eclipse,新建一个public Position文件,输入如下函数代码:
pos =stack.pop();
newPos.push(pos);
}
}
/*
*图形化输出路径
* */
String resault[][]=newString[row+1][col+1];
for(intk=0;k<row;++k){
for(intt=0;t<col;++t){
resault[k][t]=(maze[k][t])+"";
p[i - 1][j] =true;
stack.push(newPosition(i - 1, j));
i--;
}else{
stack.pop();
if(stack.empty()){
break;
}
i =stack.peek().row;
j =stack.peek().col;
}
}
Stack<Position> newPos =newStack<Position>();

Prolog语言(耐心看完-你就入门了)剖析

Prolog语言(耐心看完-你就入门了)剖析
2024/8/13
Prolog的求解过程:
第一步:问题 uncle(a,U) 与事实逐个匹配, 不成功
2024/8/13
father(a, b). father(c, d). brother(a, c).
uncle(a,U) uncle(X, Y) :- brother(X, Z) , father(Z, Y). 第二步:与规则头(左部)匹配,即寻找合一者, 有 {a/X, U/Y} 转化为两个子问题:brother(a, Z)和father(Z, U)
人工智能
Artificial Intelligence (AI)
2024/8/13
Prolog 语言简介 Prolog语言是一种以一阶谓词为基础的逻辑性语 言(Programming in Logic)
2024/8/13
Prolog语言的特点 Prolog语言的基本内容 简单的例子
2024/8/13
例: P([the, cat, sat, down]).
?- P([ X | Y ]). 答案:X=the, Y=[cat, sat, down]
?-P([ X , Y | Z ]). 答案:X=the, Y=cat,Z=[sat, down]
2024/8/13
4 Prolog程序的结构
Prolog的程序分为两部分: 前提部分:所有事实和规则 问题部分:目标子句序列
2024/8/13
Prolog的求解过程
likes(m, f). likes(m, w). likes(j, w). likes(j, s).
现在有两个问题:likes(m, X) 和 likes(j, X))
第一步:第一个问题 likes(m, X) 去与事实匹配 (置换与合一),按顺序得到 {f/X}

Prolog实验报告-科技学院

Prolog实验报告-科技学院
inform(Loc1, Loc2):-nl,
write('Move a disk from '-Loc1-' to '-Loc2).
2、传教士与野人问题
源程序:
%船上所能够载人的状态就是可能的操作
move(1,0). %表示船上有一位牧师,没有野人。
move(0,1).
move(0,2).
move(2,0).
五、求解的问题与程序
1、汉诺塔问题
源程序:
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).
2>、把最后一个盘子直接移到右边的杆子上
3>、最后把中间杆子上的盘子移到右边的杆子上(把左边的杆子作为临时存放盘子的位置)
2、传教士与野人问题
假设开始时传教士、野人和船都在右岸 用数组(a,b,c)分别表示右岸传教士个数、右岸野人个数、船的位置 则可分为三种情况讨论: A、n>m/2。此种情况下 先把所有的野人度过去 每次返回一个野人 当出现(m,0,0)情况时 返回m-n个野人(若m==n,返回1个野人)。然后渡n个传教士 此时野人==传教士 然后返回一个野人和传教士 再开始最大限度的渡传教士 每次返回一个野人,最终直到a==b==c==0B、n<=3&&n<=m/2 || n==1显然此时无解C、n>=4&&n<=m/2此时只能每次传n/2个传教士和野人,每次返返回一个野人和传教士,直到最终结果。

用于人工智能的Prolog语言

用于人工智能的Prolog语言
(7)如果有多个回答都满足目标,那么Prolog 将尽可能多地回答。
在示例程序中,添加有关性别的信息: Predicates
parent(symbol)
clauses parent(pam,bo
b). parent(tom,bo
b).
male(tom). male(bob). male( jim).
(3)关系的对象可以是常量 (如:tom,ann) ,也可以是变量(如:X,Y)。
(4)向系统提出问题,可由一个或多个目标组成。
(5)一个Prolog 程序由一些子句(clauses)组成。每个子句用句号结束。
(6)对一个问题的回答是肯定的或者是否定的,取决于相应的目标是否满足。 在肯定回答的情况下,说相应的目标是可满足的,而且这个目标成功了。 否则,说目标不可满足,目标失败了。
parent(Z,X), parent(Z,Y), female(X).
sister(X,pat).
改进的sister规则:
predicates
parent(symbol,symbol)
sister(symbol,symbol)
female(symbol)
male(symbol)
different(symbol,sym
R("zhsan").
4.2 家庭关系程序示例
下图是一个表示家庭关系的实例:
用Prolog 语句表示为:
Pam
Tom
).
Bob
Liz
).
Ann
Pat
Jim
parent(pam,bob
parent(tom,bob
parent(tom,liz). parent(bob,ann). parent(bob,pat).

第六章 PROLOG语言习题解答

第六章 PROLOG语言习题解答

第六章PROLOG语言6.3答:(1)目标不成功(2)目标不成功(3)目标成功,x,y,z被例化为x1,y1,z1(4)目标不成功(5)目标不成功6.4答:poglog规则Is_mother(x):_mother(x,y)Is_father(x):_father(x,y)Is_son(x):_father(y,x),male(x)Grandpa(x,y):_father(x,y1),father(y1,y)Sibling(x,y):_diff(x,y),mother(z1,x),mother(z1,y),father(z2,x), father(z2,y),parent(x,y)6.5答:(1)family1.cl文件头:/*****************************************************************************Copyright (c) Sabu Francis Associates******************************************************************************/ class family1open corepredicatesclassInfo : core::classInfo.% @short Class information predicate.% @detail This predicate represents information predicate of this class.% @endpredicatesrun : core::runnable.end class family1(2)family1.pack文件头:/*****************************************************************************Copyright (c) Sabu Francis Associates******************************************************************************/ #include @"family1.ph"% privately used packages#include @"pfc\filesystem\filesystem.ph"#include @"pfc\application\exe\exe.ph"#include @"pfc\console\console.ph"#include @"pfc\exception\exception.ph"% private interfaces% private classes% implementations#include @"family1.pro"(3)family1.ph文件头:/*****************************************************************************Copyright (c) Sabu Francis Associates******************************************************************************/ #requires @"family1.pack"% publicly used packages#include @"pfc\core.ph"% exported interfaces% exported classes#include @"family1.cl"(4) family1.prj6文件头:/*****************************************************************************Copyright (c) Sabu Francis Associates******************************************************************************/ implement family1open coreconstantsclassName = "family1".classV ersion = "$JustDate: $$Revision: $".clausesclassInfo(className, classVersion).domainsgender = female(); male().class facts - familyDBperson : (string Name, gender Gender).parent : (string Person, string Parent).class predicatesfather : (string Person, string Father) nondeterm anyflow.clausesfather(Person, Father) :-parent(Person, Father),person(Father, male()).class predicatesgrandFather : (string Person, string GrandFather) nondeterm (o,o).clausesgrandFather(Person, GrandFather) :-parent(Persoicates)文件尾:reconsult : (string FileName).clausesreconsult(FileName) :-retractFactDB(familyDB),file::consult(FileName, familyDB).clausesrun():-console::init(),stdIO::write("Load data\n"),reconsult("..\\fa.txt"),stdIO::write("\nfather test\n"),father(X, Y),stdIO::writef("% is the father of %\n", Y, X),fail.run():-stdIO::write("\ngrandFather test\n"),grandFather(X, Y),stdIO::writef("% is the grandfather of %\n", Y, X),fail.run():-stdIO::write("\nancestor of Pam test\n"),X = "Pam",ancestor(X, Y),stdIO::writef("% is the ancestor of %\n", Y, X),fail.run():-stdIO::write("End of test\n").end implement family1goalmainExe::run(family1::run).(5)family1.pro补充习题:1.编写一Prolog程序使得你能和计算机“交谈”(Conversations with a computer)。

prolog实验报告

prolog实验报告

华北电力大学实验报告||实验名称PROLOG语言编程练习及图搜索问题求解课程名称人工智能及应用专业班级:学生姓名:学号:成绩:指导教师:实验日期:2014年5月(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm, 右2.1cm;字体:宋体小四号,1.25倍行距。

)验证性、综合性实验报告应含的主要内容:一、实验目的及要求二、所用仪器、设备三、实验原理四、实验方法与步骤五、实验结果与数据处理六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)七、所附实验输出的结果或数据设计性实验报告应含的主要内容:一、设计要求二、选择的方案三、所用仪器、设备四、实验方法与步骤五、实验结果与数据处理六、结论(依据“设计要求”)七、所附实验输出的结果或数据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),write(E),nl.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)).六、讨论与结论Prlolg的求解过程就是一个不断通过规则进行匹配,最后匹配到事实后回溯得出解的过程。

图搜索问题求解

图搜索问题求解

图搜索问题求解实验⼆图搜索问题求解⼀、实验⽬的加深学⽣对图搜索技术的理解,使学⽣掌握图搜索基本编程⽅法,并能利⽤图搜索技术解决⼀些应⽤问题。

1. 掌握Turbo prolog软件编程⽅法;2. 熟悉状态图搜索的基本算法;3.掌握图搜索问题求解中的问题表⽰、节点表⽰、close表和open表的构造。

⼆、实验环境计算机,Turbo PROLOG教学软件三、预习要求1.预习教材第四章有关状态图问题求解的内容,熟悉状态图求解的过程和⽅法;2.了解Turbo PROLOG程序设计的基本知识。

四、实验内容以求交通图中两地之间的路径和最短路径问题为例,分别⽤状态图搜索和代价树搜索,进⾏问题求解。

问题描述如下:G 为⼀有向图, 其每条边都有⼀个⾮负的权数。

对于图中任意两点间的路径, 定义⼀个路径长度, 其值为该路径所包含的各条边的权数之和。

两点间的路径⼀般不⽌⼀条。

对于给定的任意出发点s和到达点t,⾸先找到所有的从s⾄t的路径,然后从中找出长度最短的路径。

左图是某⼀城市的交通⽹络。

边的⽅向表⽰允许的通⾏⽅向。

边旁的权数表⽰该边的长度。

要求找出点 v1 ⾄ v5 的所有路径,并找出最短路径。

五、实验⽅法和步骤1. 启动prolog编辑环境;2. ⽤图搜索搜索思想编辑路径求解问题的源程序;2. 运⾏程序,分析结果;3. ⽤代价树搜索思想编辑最短路径求解问题的源程序;4.运⾏程序,分析结果。

六、⽰例程序以教材例4.1迷宫图的路径搜索为例,给出迷宫问题的求解程序。

DOMAINSstate=symbolDATABASE-mydatabaseopen(state,integer)closed(integer,state,integer)res(state)open1(state,integer)min(state,integer)mark(state)fail_PREDICATESsolveroad(state,state)search(state,state)resultsearchingstep4(integer,state)step56(integer,state)equal(state,state)repeatresulting(integer)rule(state,state)GOALsolve.CLAUSESsolve:-search(s0,sg),result.search(Begin,End):-retractall(_,mydatabase),assert(closed(0,Begin,0)),assert(open(Begin,0)),assert(mark(End)),repeat,searching,!.result:-not(fail_),retract(closed(0,_,0)),closed(M,_,_),resulting(M),!.result:-beep,write("sorry don't find aroad!"). searching:-open(State,Pointer),retract(open(State,Pointer)),closed(No,_,_),No2=No+1,asserta(closed(No2,State,Pointer)),!,step4(No2,State).searching:-assert(fail_).step4(_,State):-mark(End),equal(State,End).step4(No,State):-step56(No,State),!,fail.step56(No,StateX):-rule(StateX,StateY),not(open(StateY,_)),not(closed(_,StateY,_)),assertz(open(StateY,No)),fail.step56(_,_):-!.equal(X,X).repeat.repeat:-repeat.resulting(N):-closed(N,X,M),asserta(res(X)),resulting(M).resulting(_):-res(X),write(X),nl,fail.resulting(_):-!.rule(X,Y):-road(X,Y).road(s0,s4).road(s4,s1).road(s1,s4).road(s1,s2).road(s2,s1).road(s2,s3).road(s3,s2).road(s4,s7).road(s7,s4).road(s4,s5).road(s5,s4).road(s5,s6).road(s6,s5).road(s5,s8).road(s8,s5).road(s8,s9).road(s9,s8).road(s2,s5).road(s5,s2).road(s9,sg).七、实验报告要求1. 实验报告应简单明了,语⾔通顺,结果正确,程序规范。

逻辑型程序设计语言PROLOG详细教程

逻辑型程序设计语言PROLOG详细教程

逻辑型程序设计语言PROLOG教程2.3. 1逻辑型程序设计语言PROLOGPROLOG的语句PROLOG语言只有三种语句,分别称为事实、规则和问题。

1.事实(fact)格式: <谓词名>(<项表>).功能一般表示对象的性质或关系。

其中谓词名是以小写英文字母打头的字母、数字、下划线等组成的字符串,项表是以逗号隔开的项序列。

例如:student(john).like( mary ,music).表示“约翰是学生”和“玛丽喜欢音乐”。

2. 规则(rule)格式:<谓词名>(<项表>):-<谓词名>(<项表>){,<谓词名>(<项表>)}.功能: 一般表示对象间的因果关系、蕴含关系或对应关系。

其中“:-”号表示“if”(也可以直接写为if),其左部的谓词是规则的结论(亦称为头),右部的谓词是规则的前提(亦称为体),{}表示零次或多次重复,逗号表示and(逻辑与),即规则的形式是一个逻辑蕴含式。

例如:bird(X):-animal(X),has(X,feather).grandfather(X,Y):-father(X,Z),father(Z,Y).第一条规则表示“如果X是动物,并且X有羽毛,则X是鸟”;第二条规则就表示“X是Y的祖父,如果存在Z,X是Z的父亲并且Z又是Y的父亲”。

3.问题(question)格式: -<谓词名>(<项表>){,<谓词名>(<项表>)}.功能表示用户的询问,它就是程序运行的目标。

例如:-student(john).-like(mary,X).2.3. 2 PROLOG程序PROLOG程序一般由一组事实、规则和问题组成。

问题是程序执行的起点,称为程序的目标。

例如下面就是一个PROLOG程序。

likes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane ,smith).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,sports),likes(X,music).-friend(john,Y).可以看出,这个程序中有四条事实、两条规则和一个问题。

逻辑型程序设计语言PROLOG

逻辑型程序设计语言PROLOG

AT(JOHN, SCHOOL)
:-AT(FIDO, x)
:-AT(JOHN, x) □ x=?
第2章 人工智能程序设计语言
逻辑型语言
逻辑型程序设计语言起源于 PROLOG(PROgramminginLOGic的缩写)。PROLOG语 言首先由法国马塞大学的Colmerauer和它的研究小组于 1972年研制成功,后来在欧洲得到进一步发展。特别 是1981年日本宣布要以PROLOG作为他们正在研制的 新一代计算机——智能计算机的核心语言,更使 PROLOG举世瞩目,迅速风靡世界。
第2章 人工智能程序设计语言
应用归结原理求取问题答案
归结原理除了能用于对已知结果的证明外,还能用于对未
知结果的求解,即能求出问题的答案来。请看下例。 例3.23 已知:
(1)如果x和y是同班同学,则x的老师也是y的老师。
(2)王先生是小李的老师。 (3)小李和小张是同班同学。 问:小张的老师是谁?
第2章 人工智能程序设计语言
第2章 人工智能程序设计语言
可以看出,归结到这一步,求证的目标谓词已被消去, 即求证已成功,但还留下了谓词 ANS(Wang) 。由于该 谓词中原先的变元与目标谓词T(u,Zhang)中的一致,所 以,其中的 Wang 也就是变元 u 的值。这样,我们就求 得了小张的老师也是王老师。
第2章 人工智能程序设计语言
• 子目标之间的关系? • 子目标与其他子句合一的过程和意义。
– 子目标与事实合一:消去该子目标(已证明)。 – 子目标与过程合一:用过程右边的文字代替该子目标(还需 证明过程右边的条件)。
第2章 人工智能程序设计语言
• 例:~AT(JOHN, x)VAT(FIDO,x) AT(JOHN, SCHOOL) ~AT(FIDO,x) AT(FIDO,x):-AT(JOHN,x)

VisualProlog实验(DOCX页)

VisualProlog实验(DOCX页)

实验一Visual Prolog运行环境实验(1学时)一、实验目的1、了解PROLOG解释器;2、掌握PROLOG语言中常量、变量的表示方法;3、掌握利用PROLOG进行事实库、规则库的编写方法。

二、实验要求1、熟悉Visual Prolog运行环境,包括硬件与软件环境;2、学习示例程序,分析其功能;3、写出Example 1、Example 2、Example 3示例程序的功能;4、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问。

三、实验设备计算机,Visual prolog教学软件。

四、实验内容及步骤(一)实验内容:1、熟悉Visual prolog的运行环境,包括所用的机器的硬件与软件环境;2、学习使用Visual prolog,包括进入Prolog主程序、编辑源程序、修改环境目录、退出等基本操作;3、学习Visual prolog的简单程序结构,掌握分析问题、询问解释技巧;4、了解PROLOG语言中常量、变量的表示方法;5、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问。

(二)实验步骤:1、启动Windows 2000操作环境;2、安装Visual Prolog集成开发环境;3、双击桌面图标或者找到Visual Prolog可执行文件所在目录双击图标,启动Visual prolog集成开发环境;4、打开Project菜单,选择New Project菜单项,将工作目录修改为你要保存到的文件夹,例如,c:\11,给出工程文件名;5、打开Option菜单,选择Project菜单项打开下拉菜单,选择Compiler Options项,按下图中显示进行设置;6、从工程界面中选择“new”按钮或者从file菜单中选择“new”菜单项,弹出一个界面,将所有的复选框都去掉,进入Visual Prolog的程序编辑界面;7、将下面的Example 1编辑到编辑界面里面,Project菜单里面的Test goal菜单项或者直接点击菜单栏中的Test Goal按钮执行程序。

图搜索与问题求解(八数码)

图搜索与问题求解(八数码)

图搜索与问题求解实验报告一实验题目图搜索与问题求解二实验目的1熟悉和掌握启发式搜索/A*搜索的定义、估价函数和算法过程;2 理解和掌握搜索过程,能够用选定的编程语言求解八数码问题,理解求解流程和搜索顺序;3 比较并分析图搜索策略的实质,通过实验理解启发式搜索/A*搜索的意义。

三实验要求1以九宫问题/八数码问题为例,以某种启发式搜索/A*搜索策略编程演示其搜索过程;2 定义启发式函数,能正确求解出从初始状态到目标状态的移动路线;3 对不可达状态能进行正确识别;4对所采用的启发式函数做出性能分析。

四数据结构typedef struct Qnode{ //队列的节点类型定义long a; //将8数码转化为长整型后入队列int dnum; //与目标状态数码不同的位置的个数Qnode *next;}*QueuePtr;typedef struct{QueuePtr front; //队头指针QueuePtr rear; //队尾指针}LinkQueue; //链式队列五实验算法1 说明有解和无解如何判定;int NiXu(int a[][3]) //求出所给状态的逆序数{i nt i,j,k=0,sum=0;i nt b[8];f or(i=0;i<3;i++)for(j=0;j<3;j++)if(a[i][j]) //空格用0代替,逆序不计空格b[k++]=a[i][j];for(i=1;i<8;i++)for(j=0;j<i;j++)if(b[i]<b[j])sum++;return sum;}if(NiXu(start)%2 != NiXu(end)%2)printf("无法到达!\n");e lse{printf("广度优先搜索如下:\n\n");search();}2 说明启发式函数如何设定;int h(long x){i nt sum=0;i nt b[3][3];u_trans(x,b);f or (int i=0;i<3;i++)for (int j=0;j<3;j++)if (end[i][j]!=b[i][j])sum++;r eturn sum;}3说明实验中采用的搜索算法。

程序语言prolog_实验报告

程序语言prolog_实验报告
图 1 编写、解释程序结果
(2)打开 SWI-Prolog,单击打开选项,选择刚才生成的程序解释 文件“家谱.pl”运行。
图 2 运行文件“家谱.pl” (3)检验程序。根据程序已知相互关系和给定关系规则,通过询 问语句检测程序的正确性。首先,分别输入并执行如下语句: grandfather(X,c). ——问 c 的(外)祖父是谁。 grandmother(Y,c). ——问 c 的(外)祖母是谁。 daughter(a1,Z). ——问 a1 的女儿是谁。 如图 3 所示,程序回答结果如下: X = a1. Y = a2. Z = b2.
就是对递归功能运用。 (四)Prolog 没有特定的运行顺序,顺序由电脑决定。比如问题
2 中,选择 a 到 g 的路径,如果不使用关键字“fail”,当执行语句 “path(a,g,L),write(L). ”时,并不能决定程序给出哪条路径。由于 程序员不能决定程序运行顺序,所以 Prolog 没有其它语言的 if、when、 case、fo 控制流程语句。
father(b1,c). mother(a2,b2). mother(b2,c). grandfather(X,Y):-father(X,Z),father(Z,Y). grandfather(X,Y):-father(X,Z),mother(Z,Y). grandmother(X,Y):-mother(X,Z),father(Z,Y). grandmother(X,Y):-mother(X,Z),mother(Z,Y). daughter(X,Y):-father(X,Y),female(Y). 执行解释后保存为 Prolog 文件“家谱.pl”。
问题 1:假设有这样一个家庭成员示意图:
a1

人工智能作业题解答

人工智能作业题解答

人工智能作业题解答第三章图搜索与问题求解1、何为状态图和与或图?图搜索与问题求解有什么关系?解:按连接同一节点的各边间的逻辑关系划分,图可以分为状态图和与或图两大类。

其中状态图是描述问题的有向图。

在状态图中寻找目标或路径的基本方法就是搜索。

2、综述图搜索的方式和策略。

解:图搜索的方式有:树式搜索,线式搜索。

其策略是:盲目搜索,对树式和不回溯的线式是穷举方式,对回溯的线式是随机碰撞式。

启发式搜索,利用“启发性信息”引导的搜索。

3、什么是问题的解?什么是最优解?解:能够解决问题的方法或具体做法成为这个问题的解。

其中最好的解决方法成为最优解。

4、什么是与或树?什么是可解节点?什么是解树?解:与或树:一棵树中的弧线表示所连树枝为“与”关系,不带弧线的树枝为或关系。

这棵树中既有与关系又有或关系,因此被称为与或树。

可解节点:解树实际上是由可解节点形成的一棵子树,这棵子树的根为初始节点,叶为终止节点,且这棵子树一定是与树。

解树:满足下列条件的节点为可解节点。

①终止节点是可解节点;②一个与节点可解,当且仅当其子节点全都可解;③一个或节点可解,只要其子节点至少有一个可解。

5、设有三只琴键开关一字排开,初始状态为“关、开、关”,问连接三次后是否会出现“开、开、开”或“关、关、关”的状态?要求每次必须按下一个开关,而且只能按一个开关。

请画出状态空间图。

注:琴键开关有这样的特点,若第一次按下时它为“开”,则第二次按下时它就变成了“关”。

解:设0为关,1为开6、有一农夫带一只狼、一只羊和一筐菜欲从河的左岸乘船到右岸,但受下列条件限制:1)船太小,农夫每次只能带一样东西过河。

2)如果没农夫看管,则狼要吃羊,羊要吃菜。

请设计一个过桥方案,使得农夫、狼、羊、菜都不受损失地过河。

画出相应状态空间图。

提示:(1)用四元组(农夫、狼、羊、菜)表示状态,其中每个元素都可为0或1,用0表示在左岸,用1表示在右岸。

(2)把每次过河的一次安排作为一个算符,每次过河都必须有农夫,因为只有他可以划船。

用Prolog求解传教士和野人问题

用Prolog求解传教士和野人问题

用Prolog求解传教士和野人问题实验七用Prolog求解传教士和野人问题 1、实验目的复习经典谓词演算中的归结原理,掌握人工智能程序设计语言Prolog,理解通过搜索求解问题实现人工智能的思想。

2、实验原理谓词演算中的消解法,3、实验内容设有3个传教士和3个野人同在河的左岸,他们都要到对岸去;河里只有一条船,他们都会划船,但每次渡船至多只能乘两人;如果在任何一边河岸上,野人的数量超过传教士,野人就要吃掉传教士,问怎样才能用船将3个传教士和3个野人从左岸都渡到右岸,又不会发生传教士被吃的事件呢,通过Prolog程序,给出乘船过河的动作序列。

4、实验步骤(1) 设计该问题的状态。

例如:((左岸牧师数,左岸野人数),(右岸牧师数,右岸野人数),船的位置)。

(2) 定义目标状态。

这里是:((0,0),(3,3),1)3) 描述可能的动作。

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

用谓词(move表示。

(4) 判断合法状态(5) 深度优先搜索三个传教士和三个野人的示例程序如下: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.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,B1 is B-F,Statu1=((A1,B1),(C1,D1),1). 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(Statu,Statu1):- move(X,Y),update(Statu,(X,Y),Statu1), legal(Statu1).findroad(X,X,L,L):-write(L). findroad(X,Y,L,L1):-connect(X,Z),not(member(Z,L)),findroad(Z,Y,[Z|L],L1).传教士和野人问题有三个牧师和三个野人过河,只有一条能装下两个人的船,在河的任何一方或者船上,如果野人的人数大于牧师的人数,那么牧师就会有危险。

第6章 PROLOG语言

第6章 PROLOG语言
6.1 PROLOG语言概述
到目前为止,PROLOG语言是两种主要的人工智能程序设 计语言之一(另一个是LISP)。本章对PROLOG语言做 一描述,并讨论几个例子,使大家了解PROLOG语言及 其特点,并能编写简单的PROLOG程序。
2020/7/27
2
第6章 PROLOG语言
6.1.1 PROLOG语言的发展 PROLOG(Programming in Logic)语言是一种以逻辑
注意1:prolog是不允许使用除了基本字符以外字符的, 上面的句子必须写成love(zhangxueyou,wanfei).,电脑 才能够真正的理解。
注意2:最末尾的“.”一定不能掉,它表示一个句子结束。
注意3:上面词汇对于电脑来说并没有真正的含义,所以 我们完全可以用 ai(zxy,wf).来表达这个关系 。
表的一般形式是[x1,x2,…,xn]表的分量可以是原子, 结构也可以是表。
其中xi(i=1,2,…,n)为PROLOG的项,一般要求同一个表 的元素必须属于同一领域。不含任何元素的表称为空 表,记为[ ]。
2020/7/27
18
第6章 PROLOG语言
例如下面就是一些合法的表。 [1,2,3] [apple,orange,banana,grape,cane] ["PROLOG","MAENS","PROGRAMMING","in logic"] [[a,b],[c,d],[e]] []
(3)表达式
PROLOG提供了五种最基本的算术运算:加、减、乘、除和取模,相 应运算符号为+、-、*、/、mod。这五种运算的顺序为:*、/、 mod优先于+、-。同级从左到右按顺序运算,括号优先。算术表达

实验一

实验一

实验一 PROLOG语言编程练习一.实验目的1、熟悉PROLOG语言编程环境的使用;2、了解PROLOG语言中常量、变量的表示方法;3、了解利用PROLOG进行事实库、规则库的编写方法;二.实验环境计算机,Turbo PROLOG教学软件。

三.实验内容及结果1、启动Windows XP操作环境。

2、打开文件目录,执行prolog应用程序,启动Turbo prolog,并按空格键(SPACE)进入集成开发环境。

3、选择Setup项,打开下拉菜单,选择Directories项,进行工作目录修改,按Esc键退出,选择Save Configuration项,保存修改。

4、选择Files项,打开下拉菜单,选择New file项,进入源程序输入和编辑,或选择Load项,选择要打开的示例程序,再选择Edit项,可以进行编辑源程序。

5、编辑之后,可以选择Run项,执行程序,可以在Dialog窗口进行询问,即外部目标的执行,查看程序运行结果,分析程序之功能。

6、仿前例,可以选择其他程序并运行,分析程序功能。

7、退出,选择Quit项,可以退出Turbo Prolog程序,返回到Windows XP环境。

A一个描述亲属关系的PROLOG程序源代码:domainsname=symbolsex=stringage=integerpredicatesperson(name,sex,age)father(name,name)mother(name,name)elder_brother(name,name)elder_sister(name,name)grandmother(name,name)grandfather(name,name)goalelder_brother(X1,son1),write("son1's elder_brother is ",X1,"\n"),elder_sister(X2,son1),write("son1's elder_sister is ",X2,"\n"),grandmother(Y,son1),write("son1's grandmother is ",Y,"\n"),grandfather(Z,son1),write("son1's grandfather is ",Z,"\n").clausesperson(son1,"male",11).person(son2,"male",14).person(daughter,"female",13).person(f,"male",40).person(m,"female",38).person(gm,"female",65).person(gf,"male",70).father(f,son1).father(f,son2).father(f,daughter).father(gf,f).mother(m,son1).mother(m,son2).mother(m,daughter).mother(gm,f).elder_brother(X1,son1):-father(f,X1),mother(m,X1),person(son1,"male",A0), person(X1,"male",A1),A1>A0.elder_sister(X2,son1):-father(f,X2),mother(m,X2),person(son1,"male",A0), person(X2,"female",A2),A2>A0.grandmother(Y1,Y2):-father(Y3,Y2),mother(Y1,Y3).grandfather(Z1,Z2):-father(Z3,Z2),father(Z1,Z3)描述亲属关系的PROLOG程序实验结果截图B修改教材2.2节例2.9的程序,使其能输出图中所有路径(path)domainsname=symbolsex=stringage=integerpredicatesclausesroad(a,b).road(a,c).road(b,d).road(c,d).road(d,e).road(b,e).path(X,Y):-road(X,Y).path(X,Y):-road(X,Z),path(Z,Y).四.实验中出现问题及解决方法实验中虽然出现点儿问题,但是在老师和同学的帮助下还是搞定了五.实验总结。

实验1 Visual Prolog入门(1)

实验1 Visual Prolog入门(1)

Visual Prolog语言简介Prolog语言是人工智能与专家系统领域最著名的逻辑程序设计语言。

Visual Prolog 意指可视化逻辑程序设计语言,是基于Prolog语言的可视化集成开发环境,是Prolog开发中心(PDC)最新推出的基于Windows环境的智能化编程工具,其语言特性符合相应的国际标准ISO/IEC 13211-1:1995。

目前,Visual Prolog在美国、西欧、日本、加拿大、澳大利亚等发达国家和地区十分流行,是国际上研究和开发智能化应用的主流工具之一。

预计短时期内,在国际上已经十分流行的最新版本的可视化逻辑程序设计语言Visual Prolog将会在我国广泛流行开来,并将迅速成为我国研究和开发智能化应用的最重要的工具。

Visual Prolog具有模式匹配、递归、回溯、对象机制、事实数据库和谓词库等强大功能。

它包含构建大型应用程序所需要的一切特性:图形开发环境、编译器、连接器和调试器,支持模块化和面向对象程序设计,支持系统级编程、文件操作、字符串处理、位级运算、算术与逻辑运算,以及与其它编程语言的接口。

Visual Prolog包含一个大型库,捆绑了范围广阔的API函数:包括Windows GUI函数族、ODBC/OCI数据库函数族和Internet函数族(socket、ftp、http、cgi等)。

这个开发环境全部使用Visual Prolog语言写成,而且包含对话框、菜单、工具栏等若干编码专家和图形编辑器。

Visual Prolog支持Windows 3.x/95/98/Me/NT/2000/XP、OS/2和文本方式下的DOS、Linux和SCO UNIX。

Visual Prolog非常适合于专家系统、规划和其它AI相关问题的求解,是智能程序设计语言中具有代表性且应用较多的一种语言。

由于这种语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
((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), 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]
华北电力大学科技学院
实验报告
| |
实验名称 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, 1), (3, 2), 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),
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).
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),
第 页共 页
华北电力大学科技学院实验报告
对字谜问题,初步了解规则与递归的使用方法;对于传教士与野人问题, 稍有难度,就是对许多小的规则一起调用的方法,最后涉及到深度优先的算 法,与老师和同学进行讨论,并一步步算出结果,加深深度优先算法,提高 了思维能力,并继续努力!
七、所附实验输出的结果或数据 实验一: 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), ((1, 1), (2, 2), 0), ((0, 0), (3, 3), 1), ((0, 1), (3, 2), 0), (0, 0), (3, 3), 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,_).
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]
一、实验目的及要求 二、所用仪器、设备 三、实验原理 四、实验方法与步骤 五、实验结果与数据处理 六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问 题等进行分析和讨论,对实验的进一步想法或改进意见) 七、所附实验输出的结果或数据 设计性实验报告应含的主要内容: 一、设计要求 二、选择的方案 三、所用仪器、设备 四、实验方法与步骤 五、实验结果与数据处理 六、结论(依据“设计要求”) 七、所附实验输出的结果或数据
野人数),船的位置)。 (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 规则
二、所用仪器、设备
PC 机和 trinc prolog 编译软件
三、实验原理
PROLOG 语言是一种以逻辑推理为基础的逻辑型程序设计语言,是一种陈述性语言而 不是过程性语言。PROLOG 语言能够自动实现模式匹配和回溯、具备递归技术,而且语法 简明,可以简化复杂问题求解。
四、实验方法与步骤
1,先搭配实验环境:PC 机和 trinc prolog 编译软件 2,写好程序进行编译 3,用“?-”来检测程序结果 4,实验一 (1) 定义 word 规则 (2) 定义 crossword (3) 定义行列重复的设为变量 (4) 递归算法查找结果 5,实验二 (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). 六、讨论与结论 根据本次实验收获很大,又了解一门新的编程语言,与平时用的不一样, 是面向逻辑的,通过老师上课和课下的实验,又加深对其的了解。
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]
((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:
SOLUTION: L=[((3, 3), (0, 0), 0), ((2, 2), (1, 1), 1), ((3, 2), (0, 1),
相关文档
最新文档