人工智能报告_第1页
人工智能报告_第2页
人工智能报告_第3页
人工智能报告_第4页
人工智能报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、人工智能课程设计一一简单小程序和家族关系推理系统信息学院1201001193温小龙背景介绍“人工智能”一词最初是在1956年Dartmouth学会上提出的。从那以后,研 究者们发展了众多理论和原理,人工智能的概念也随之扩展。人工智能是一门极 富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工 智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等 等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人 类智能才能完成的复杂工作。Prolog 语言最早由 Aix-Marseille 大学的 Alain Colmerauer 与 Phillipe

2、 Roussel 等人于60年代末研究开发。1972年被公认为是Prolog语言正式诞生的年份,自 1972年以后,分支出多种Prolog的方言。最主要的两种方言为Edinburgh和 Aix-Marseille。最早的Prolog解释器由Roussel建造,而第一个Prolog编译器则 是 David Warren编写的。Prolog 一直在北美和欧洲被广泛使用。日本政府曾经为了建造智能计算机而 用Prolog来开发ICOT第五代计算机系统。在早期的机器智能研究领域,Prolog 曾经是主要的开发工具。80年代Borland开发的Turbo Prolog,进一步普及了 Prolog的使用。1

3、995年确定了 ISO Prolog标准目前比较流行的实现工具包括 SWI-Prolog, Yap 等。课程实验介绍本次课程实验要求使用prolog语言编写一个人工智能方面的应用。2.1 “Hello World”程序的实现本小实验是一个入门的实验,主要实现的功能是在鼠标点击处显示“Hello World”。初始化界面如图2.1.1所示。图2.1.1初始化界面当鼠标点击时,会显示“Hello World字样”,如图2.1.2所示。备 query亘亘甚Hell6,WtrldirHello;WDrld!Hello. World!Hello/Wsrld!Hello, World!司 CancelJ

4、Help图212显示“Hello World”2.2数的阶乘的实现本实验主要实验数的阶乘,即输入一个正整数,然后给出该数的阶乘。初始化界面如 图2.2.1所示。图2.2.1数阶乘的初始化界面输入一个数后,点击“Factorial”按钮就可显示结果,如图2.2.2所示。图2.2.2 5的阶乘的结果显示2.3家族关系推理系统这里我们选择编写一个家族分析系统,在这个系统里我们输入个人的一些简要信息(这 里我们只考虑男女性别)以及家族信息。例如person(judith”,female()表示judith为女性, parent(john”,judith)表示john为judith的父母。我们用一个tx

5、t文件作为该系统的输入, 该文件里保存了我们所需要的家族信息。这里我们给系统设计了三个功能,分别是根据输入 信息找到父子关系,爷孙关系以及输入一个人的姓名找到其祖先。我们的开发环境为visual prolog6。系统设计界面如图2.3.1所示:图2.3.1系统界面其中find菜单下边的三个子菜单为分别对应我们的三个子功能:父子关系推理,爷孙关系推理以及祖先推理。下面我们首先装载入数据,如图2.3.2所示:图2.3.2装载数据成功接着我们根据数据先找父子关系及爷孙关系,结果如图2.3.3所示:图2.3.3父子关系推理结果lessagespam is father of Johngrandfath

6、er lest pam i$ grandfather of johnU图2.3.4爷孙关系推理结果:最后我们在对话框里输入一个名字,用我们的系统推理出其祖先是谁,这里我们输入pam,则推断结果如图2.3.5所示:图2.3.5祖先推理结果系统实现原理简介:由于我们要实现系统的图形界面,因此这里我们将系统分为两个部分,其中一部分负责 根据输入来进行逻辑推理,我们这里暂称为逻辑推理层。下面将是我们逻辑推理层的prolog 代码:class predicatesfather:(string Person,string Father) nondeterm anyflow.clausesfather(Pe

7、rson,Father):-parent(Person,Father),person(Father,male().class predicatesgrandFather:(string Person,string GrandFather) nondeterm anyflow.clausesgrandFather(Person,GrandFather):- parent(Person,Parent), father(Parent,GrandFather).class predicatesancestor:(string Person,string Ancestor) nondeterm anyf

8、low.clausesancestor(Person,Ancestor):-parent(Person,Ancestor).ancestor(Person,Ancestor):-parent(Person,P1),ancestor(P1,Ancestor).接着另一部分为一些GUI图形界面处理代码,这里我们就列出来了,具体可见附录。这里 我们实现的系统由于较为简单,因此在系统实现的时候没有将逻辑推理层和GUI处理分开 来,而是放在一起,这对于开发小型系统较为高效,但对于很复杂的AI系统是万万不能的。总结Prolog是一个很强大的逻辑推理程序,尤其适合于AI人工智能领域。通过这次实践, 对开发A

9、I程序有了更为直观的了解,增强了对人工智能的理解和兴趣。附录1.“Hello Worl程序 的源码Utah State Universityimplement queryinherits formWindowopen core, vpiDomains constantsclassName = query/query.classVersion =.clausesclassInfo(className, classVersion).clausesdisplay(Parent) = Form :- Form = new(Parent), Form:show().clausesnew(Parent):

10、- formWindow:new(Parent), generatedInitialize().class factsmousePoint:pnt := pnt(-1, -1).predicates onMouseDown : drawWindow:mouseDownListener.clausesonMouseDown(_S, Point, _ShiftControlAlt, _Button):- mousePoint := Point, Point= pnt(X, Y), R= rct(X-8, Y-8, X+60, Y+8), invalidate(R).predicatesonPain

11、t : drawWindow:paintResponder.clausesonPaint(_Source, _Rectangle, GDIObject):- if pnt(X, Y)= mousePoint, X0 thenmousePoint := pnt(-1, -1), GDIObject:drawText(pnt(X, Y), Hello, World!, -1) else succeed() end if.% This code is maintained automatically, do not update it manually. 00:04:49-30.7.2007 fac

12、tsok_ctl : button. cancel_ctl : button. help_ctl : button.predicatesgeneratedInitialize :().clausesgeneratedInitialize():- setFont(vpi:fontCreateByName(MS Sans Serif, 8), setText(query), setRect(rct(50,40,186,104), setDecoration(titlebar(closebutton(),maximizebutton(),minimizebutton(), setBorder(siz

13、eBorder(), setState(wsf_ClipSiblings,wsf_ClipChildren), menuSet(noMenu), addShowListener(generatedOnShow), addMouseDownListener(onMouseDown), setPaintResponder(onPaint), ok_ctl := button:newOk(This), ok_ctl:setText(&OK), ok_ctl:setPosition(8, 40), ok_ctl:setSize(30, 12), ok_ctl:setAnchors(control:ri

14、ght,control:bottom), cancel_ctl := button:newCancel(This), cancel_ctl:setText(Cancel), cancel_ctl:setPosition(48, 40), cancel_ctl:setSize(30, 12), cancel_ctl:setAnchors(control:right,control:bottom), help_ctl := button:new(This), help_ctl:setText(&Help), help_ctl:setPosition(88, 40), help_ctl:setSiz

15、e(30, 12), help_ctl:setAnchors(control:right,control:bottom).predicatesgeneratedOnShow: window:showListener. clausesgeneratedOnShow(_,_):- succeed.% end of automatic code end implement query2.数阶乘的源码Utah State Universityimplement queryinherits formWindowopen core, vpiDomains constantsclassName = form

16、container/query.classVersion =.clausesclassInfo(className, classVersion).clausesdisplay(Parent) = Form :- Form = new(Parent), Form:show().clausesnew(Parent):-formWindow:new(Parent), generatedInitialize().predicatesonFactorialClick : button:clickResponder.clausesonFactorialClick(_S) = button:defaultA

17、ction():- fn:calculate(edit_ctl:getText().% This code is maintained automatically, do not update it manually. 01:05:60-3.8.2007 factsok_ctl : button.cancel_ctl : button.help_ctl : button. edit_ctl : editControl. factorial_ctl : button.predicates generatedInitialize :(). clausesgeneratedInitialize():

18、- setFont(vpi:fontCreateByName(MS Sans Serif, 8), setText(query), setRect(rct(50,40,258,140), setDecoration(titlebar(closebutton(),maximizebutton(),minimizebutton(), setBorder(sizeBorder(), setState(wsf_ClipSiblings,wsf_ClipChildren), menuSet(noMenu), addShowListener(generatedOnShow), ok_ctl := butt

19、on:newOk(This), ok_ctl:setText(&OK), ok_ctl:setPosition(16, 72), ok_ctl:setAnchors(control:right,control:bottom), cancel_ctl := button:newCancel(This), cancel_ctl:setText(Cancel), cancel_ctl:setPosition(80, 72), cancel_ctl:setAnchors(control:right,control:bottom), help_ctl := button:new(This), help_

20、ctl:setText(&Help), help_ctl:setPosition(140, 72), help_ctl:setAnchors(control:right,control:bottom), edit_ctl := editControl:new(This), edit_ctl:setText(), edit_ctl:setPosition(8, 10), edit_ctl:setWidth(60), factorial_ctl := button:new(This), factorial_ctl:setText(Factorial), factorial_ctl:setPosit

21、ion(84, 10), factorial_ctl:setClickResponder(onFactorialClick).predicates generatedOnShow: window:showListener. clausesgeneratedOnShow(_,_):- succeed.% end of automatic codeend implement query家族关系推理系统的源码3 “/*Copyright (c) Unregistered“*/implement taskWindowopen core, vpiDomains, resourceIdentifiersc

22、onstantsclassName = TaskWindow/taskWindow.classVersion =.clausesclassInfo(className, classVersion).factsthisWin : vpiDomains:windowHandle := erroneous.domainsgender=female();male().class facts - familyDBperson:(string Name,gender Gender).parent:(string Person,string Parent).class predicatesfather:(s

23、tring Person,string Father) nondeterm anyflow.clausesfather(Person,Father):-parent(Person,Father),person(Father,male().class predicatesgrandFather:(string Person,string GrandFather) nondeterm anyflow.clauses grandFather(Person,GrandFather):-parent(Person,Parent), father(Parent,GrandFather).class pre

24、dicatesancestor:(string Person,string Ancestor) nondeterm anyflow. clausesancestor(Person,Ancestor):-parent(Person,Ancestor).ancestor(Person,Ancestor):-parent(Person,P1),ancestor(P1,Ancestor).class predicatesreconsult:(string FileName).clausesreconsult(FileName):-retractAll(_,familyDB), file:consult

25、(FileName,familyDB).constantsmdiProperty : integer = core:b_true.clausesshow():-vpi:setAttrVal(attr_win_mdi, mdiProperty), vpi:setErrorHandler(vpi:dumpErrorHandler), vpi:init(windowFlags, eventHandler, menu, , title).predicateseventHandler : vpiDomains:ehandler.clauseseventHandler(Win, Event) = Resu

26、lt :-Result = generatedEventHandler(Win, Event).constantsmaxMessageLines : integer = 100.predicatesonCreate : vpiDomains:createHandler.clausesonCreate(_CreationData) = defaultHandling():- _ = vpiMessage:create(maxMessageLines).predicatesonDestroy : vpiDomains:destroyHandler. clausesonDestroy() = def

27、aultHandling():- thisWin := erroneous.predicatesonHelpAbout : vpiDomains:menuItemHandler. clausesonHelpAbout(_MenuTag) = handled(0):- AboutDialog = aboutDialog:new(), AboutDialog:show(thisWin).predicatesonFileExit : vpiDomains:menuItemHandler. clausesonFileExit(_MenuTag) = handled(0):- vpi:winDestro

28、y(thisWin).predicatesonSizeChanged : vpiDomains:sizeHandler. clausesonSizeChanged(_Width, _Height) = defaultHandling():- vpiToolbar:resize(thisWin), vpiMessage:resize(thisWin).predicatesonFileOpen : vpiDomains:menuItemHandler. clausesonFileOpen(_MenuTag)=handled(0):-Filename=vpiCommonDialogs:getFile

29、Name(*.txt”,Familydatafiles(*.txt)”,”*.txt”,”all files”,”*.*”,”load family database”,”.”,_), ! , reconsult(Filename),stdIO:writef(Database % loadedn,Filename).onFileOpen(_MenuTag)=handled(0).predicatesonFindFather : vpiDomains:menuItemHandler.clausesonFindFather(_MenuTag) = handled(0):-stdIO:writef(

30、nfather testn),grandfather(X,Y),stdIO:writef(% is father of %n,X,Y), fail.onFindFather(_MenuTag)=handled(0).predicatesonFindGrandfather : vpiDomains:menuItemHandler.clausesonFindGrandfather(_MenuTag) = handled(0):-stdIO:writef(ngrandfather testn),grandfather(X,Y),stdIO:writef(% is grandfather of %n,

31、X,Y), fail.onFindGrandFather(_MenuTag)=handled(0).predicatesonFindAcscent : vpiDomains:menuItemHandler.clausesonFindAcscent(_MenuTag) = handled(0):-/*X=acestordialog:getName(thisWin),*/X=pam”,stdIO:writef(nancestor of% testn,X),ancestor(X,Y),stdIO:writef(% is the ancestor of %n”,Y,X), fail.onFindAcs

32、cent(_MenuTag)=handled(0).% This code is maintained by the VDE do not update it manually, 19:15:09-29.6.2011 constantswindowFlags:vpiDomains:wsflagswsf_SizeBorder,wsf_TitleBar,wsf_Close,wsf_Maximize,wsf_Minimize,wsf_ClipSiblings.menu : vpiDomains:menu = resMenu(id_TaskMenu).title : string = family-lqc4.predicatesgeneratedEventHandler : vpiDomains:ehandler.clausesgeneratedEventHandler(Win, e_create(_) = _ :- thisWin := Win, projectT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论