ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:447.84KB ,
资源ID:28947155      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28947155.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(人工智能蔡自兴实验2事实表示.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

人工智能蔡自兴实验2事实表示.docx

1、人工智能蔡自兴实验2事实表示实验2 Prolog程序事实表示Visual Prolog是面向对象的、严格类型化的和模式检验的程序设计语言。在编写Visual Prolog程序时,必须掌握这些内容,但是在这里将集中在编写代码这个核心问题上,也就是说,编写这些代码时暂时不考虑类、类型和模式。为此,将使用包含在Visual Prolog 6 中的PIE例子。PIE是一个经典的Prolog解释器,通过它,可以学会和实现Prolog程序,而不必关心类、类型等方面的知识。这里的内容是基于使用Build6004或者是以后的Visual Prolog 6版本,否则,PIE应用程序将不会象现在描述的这样工作。这

2、个编译号可以在VDE的About对话框中找到。1 Horn子句逻辑Visual Prolog 和其它Prolog用语都是基于Horn子句逻辑的。Horn子句逻辑是对事物及其相互关系进行推理的形式系统。在自然语言中,可以有这样样的一个陈述句:John是Bill的父亲。这里涉及两个实体,John和Bill,以及他们之间的关系,即一个是另一个的父亲.在Horn子句逻辑中,可以这样形式化地表述上面的陈述句:father(“Bill”,”John”).上面的father是带两个参量的一个谓词或关系,它表示第2个人是第1个人的父亲。注意:此处已经选择了第2个人是第1个人的父亲,也可以选择另外的方式,变量的

3、顺序形式化设计者的选择,然而一旦选定了,就必须保持一致,在这里的表述中,父亲始终是第2个人。已经选择用人名来代表人,因为在现实世界中,许多人有相同的名字,所以这一方法不一定有效。但在这里,用这一简单的形式化表示。有了上面的形式化方法,可以表示任何人之间的任何类型的家庭关系,但是,为了让这些表述更为有趣,制定下面的规则。X是Z的祖父,如果X是Y的父亲且Y是Z的父亲其中X,Y,Z指人。在Horn子句逻辑中,可以这样表述grandFathe(Person,GrandFathe):- father(Person,Father),father(Father,GrandFather).已经选择使用了比X,

4、Y,Z更容易理解的变量名。另外,还引入了一个谓词来描述祖父关系。再次选择了祖父作为第二个变量,像这样的保持一致是明智的,不同谓词的变量可以遵循相同的规则,当解读这些规则时,可以将:-解释为“如果(if)”,将隔开关系的逗号解释为“与(and)”.像“John是Bill的父亲”这样的陈述称为事实,而“X是Z的祖父,如果X是Y的父亲且Y是Z的父亲“称为规则。可以用事实和规则来形成定理,一个定理是事实和规则的集合,下面陈述一个小定理:father(“Bill”,”John”). fathaer(“Pam”Bill”). grandFather(Person,GrandFather):- father

5、(Person,Father), father(Father,GrandFather). 这个定理的作用是回答这样的一些问题:John是Sue的父亲吗? 谁是Pam的父亲? John是Pam的祖父吗? 这些问题称为目标(goal),它们可以这样形式化表示:?- father(“Sue”,”John”). ?-father(“Pam”,X). ?- grandfather(“Pam”,”John”). 这些问题被称为目标子句(goal clause)或简称为目标。事实(facts),规则(rules)及目标合起来称为Horn子句,因此得名为Horn子句逻辑。某些目标,如第一个和最后一个目标,可以

6、简单地用“是”或“不是”来回答,其他目标,如第2个目标,需要寻找一个解,例如,X=“Bill”.一个目标可以有多个解,例如:?- father(X,Y).E有两个解:X=“Bill”,Y=”John”.X=“Pam”,Y=”Bill”.一个Prolog程序是一个定理和目标的集合。当程序开始时,它试图使用定理为目标找到一个解。探索PrologProlog在英语中的意思就是Programming in LOGic(逻辑编程)。它是建立在逻辑学的理论基础之上的, 最初是运用于自然语言的研究领域。然而现在它被广泛的应用在人工智能的研究中,它可以用来建造专家系统、自然语言理解、智能知识库等。同时它对一些

7、通常的应用程序的编写也很有帮助。使用它能够比其他的语言更快速地开发程序,因为它的编程方法更象是使用逻辑的语言来描述程序。从纯理论的角度来讲,Prolog是一种令人陶醉的编程语言,但是在这本书中还是着重介绍他的实际使用方法。逻辑编程什么叫逻辑编程?也许你还没有一个整体的印象,还是让我们首先来研究一个简单的例子吧。运用经典的逻辑理论,我们可以说“所有的人(person)都属于人类(moral)”,如果用Prolog的语言来说就是“对于所有的X,只要X是一个人,它就属于人类。”moral(X):-person(X) . 同样,我们还可以加入一些简单的事实,比如:苏格拉底(socrates)是一个人。

8、person(socrates).有了这两条逻辑声明,Prolog就可以判断苏格拉底是不是属于人类。在Prolog的Listener中键入如下的命令:?-mortal(socrates). (此句中的?-是Listener的提示符,本句表示询问苏格拉底是不是属于人类。)Linstener将给出答案:yes我们还可以询问,“谁属于人类?”?-mortal(X).我们会得到如下的答案:X= socrates这个简单的例子显示了Prolog的一些强大的功能。它能让程序代码更简洁、更容易编写。在多数情况下Prolog的程序员不需要关心程序的运行流程,这些都由Prolog自动地完成了。当然,一个完整的程

9、序不能只包括逻辑运算部分,还必须拥有输入输出,乃至用户界面部分。很遗憾,Prolog在这些方面做得不好,或者说很差。不过它还是提供了一些基本的方法的。下面是上述的程序一个完整的例子。% This is the syntax for comments. % MORTAL - The first illustrative Prolog program mortal(X) :- person(X).person(socrates).person(plato).person(aristotle).mortal_report:-write(Known mortals are:),nl, mortal(X

10、), write(X),nl,fail. 把这个程序调入Listener中,运行mortal_report.。?- mortal_report. Known mortals are:socratesplatoaristotleno 以上程序中的一些函数以后还会详细的介绍的。最后的那个no表示没有其他的人了。进入下一章从下一章起,就开始正式介绍Prolog的编程方法了。我将用一个实例来介绍Prolog,这是一个文字的冒险游戏,你所扮演的角色是一个三岁的小女孩,你想睡觉了,可是没有毛毯(nani)你就不能安心的睡觉。所以你必须在那个大房子中找到你的毛毯,这就是你的任务。这个游戏能够显示出一些Pro

11、log的独到之处,不过Prolog的功能远不止编个简单的游戏,所以文中还将介绍一些其他的小程序。事实 (facts) 注:斜粗体字表示Prolog的专有名词事实(facts)是prolog中最简单的谓词(predicate)。它和关系数据库中的记录十分相似。在下一章中我们会把事实作为数据库来搜索。谓词: Prolog语言的基本组成元素,可以是一段程序、一个数据类型或者是一种关系。它由谓词名和参数组成。两个名称相同而参数的数目不同的谓词是不同的谓词。事实的语法结构如下:pred(arg1, arg2, . argN).其中pred为谓词的名称。arg1,.为参数,共有N个。.是所有的Prolog

12、子句的结束符。没有参数的谓词形式如下:pred.参数可以是以下四种之一:整数(integer)绝对值小于某一个数的正数或负数。原子(atom)由小写字母开头的字符串。变量(variable)由大写字母或下划线(_)开头。结构(structure)在以后的章节介绍。 不同的Prolog还增加了一些其他的数据类型,例如浮点数和字符串等。Prolog字符集包括: 大写字母,A-Z;小写字母,a-z;数字,0-9;+-/,.:.?#$等。原子通常是字母和数字组成,开头的字符必须是小写字母。例如:hello twoWordsTogether x14 为了方便阅读,可以使用下划线把单词分开。例如:a_lo

13、ng_atom_name z_23 下面的是不合法的原子, no-embedded-hyphens 123nodigitsatbeginning _nounderscorefirst Nocapsfirst 使用单引号扩起来的字符集都是合法的原子。例如:this-hyphen-is-okUpperCaseembedded blanks下面的由符号组成的也是合法的原子:-+变量和原子相似, 但是开头字符四大写字母或是下划线。例如:X Input_List_4th_argumentZ56 有了这些基本的知识,我们就可以开始编写事实了。事实通常用来储存程序所需的数据。例如,某次商业买卖中的顾客数据。

14、customer/3。(/3表示customer有三个参数)customer(John Jones, boston, good_credit). customer(Sally Smith, chicago, good_credit).必须使用单引号把顾客名引起来,因为它们是由大写字母开头的,并且中间有空格。再看一个例子,视窗系统使用事实储存不同的窗口信息。在这个例子中参数有窗口名称和窗口的位置坐标。window(main, 2, 2, 20, 72). window(errors, 15, 40, 20, 78). 某个医疗专家系统可能有如下的疾病数据库。disease(plague, inf

15、ectious). 疾病(瘟疫,有传染性)Prolog的解释器提供了动态储存事实和规则的方法,并且也提供了访问它们的方法。数据库的更新是通过运行consult或reconsult命令。我们也可以直接在解释器中输入谓词,但是这些谓词不会被储存到硬盘上。寻找Nani下面我们正式开始“寻找Nani”游戏的编写。我们从定义基本的事实开始,这些事实是本游戏的基本的数据库。它们包括: 房间和它们的联系 物体和它们的位置 物体的属性 玩家在游戏开始时的位置 图2.1 “寻找Nani”游戏的的房间格局首先我们使用room/1谓词定义房间,一共有五条子句,它们都是事实,如图2.1。room(kitchen).

16、room(office). room(hall). room(dining room). room(cellar). 我们使用具有两个参数的谓词来定义物体的位置。第一个参数代表物体的名称,第二个参数表示物体的位置。开始时,我们加入如下的物体。location(desk, office).location(apple, kitchen).location(flashlight, desk).location(washing machine, cellar). location(nani, washing machine).location(broccoli, kitchen). location

17、(crackers, kitchen).location(computer, office).注意:我们定义的那些符号,例如:kitchen、desk等对于我们是有意义的,可是它们对于Prolog是没有任何意义的,完全可以使用任何符号来表示房间的名称。谓词location/2的意思是“第一个参数所代表的物体位于第二个参数所代表的物体中”。Prolog能够区别location(sink, kitchen)和location(kitchen, sink)。因此,参数的顺序是我们定义事实时需要考虑的一个重要问题。 下面我们来表达房间的联系。使用door/2来表示两个房间有门相连,这里遇到了一个小小的

18、困难:door(office, hall).我们想要表达的意思是,office和hall之间有一个门。可是由于Prolog能够区分door(office, hall)和door(hall, office), 所以如果我们想要表达一种双向的联系,就必须把每种联系都定义一遍。 door(office, hall). door(hall, office). 参数的顺序对定义物体的位置有帮助,可是在定义房间的联系时却带来了麻烦。我们不得不把每个房门都定义两次!在这一章里,只定义单向的门,以后会很好地解决此问题的。door(office, hall). door(kitchen, office).doo

19、r(hall, dining room). door(kitchen, cellar).door(dining room, kitchen).下面定义某些物体的属性,edible(apple). edible(crackers). tastes_yucky(broccoli). 最后,定义手电筒(由于是晚上,玩家必须想找到手电筒,并打开它才能到那些关了灯的房间)的状态和玩家的初始位置。turned_off(flashlight).here(kitchen).好了,到此你应该学会了如何使用Prolog的事实来表达数据了。用事实表达完成以下描述作业1 作业2比如一群年轻人正在恋爱,每个人都有自己心中所追求的对象:张学友爱王菲张学友爱周慧敏王菲爱谢廷峰周慧敏爱张学友谢廷峰爱王菲谢廷峰爱周慧敏刘德华爱周慧敏.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1