prolog 编程 人工智能游戏编程真言 两人游戏

Prolog的NET开发人员_硬件和系统_一般阅读_或代码
| 文章 >> 一般阅读 >> 硬件和系统
Prolog的NET开发人员
{S0}简介 2006年11月,萨沙理发张贴代码项目的有趣的文章,用经典传教士与食人族的问题,说明在C#中的人工智能搜索技术。这个简单的问题提供另一种编程语言,人工智能语言Prolog的一个理想的介绍。通用语言规范(CLS)的最有趣的特性之一是默示承认没有一个统一的语言,这是解决所有问题的的理想选择。而C#是一个出色的语言,一些数学问题可能会更好,APL,或也许SML表示,虽然一些逻辑问题哭出来的Prolog。更重要的是,可以很容易的混合语言编程的华彩。这意味着,我们可以建立一个理想的语言的用户界面为目的,也许彗星#而在一个非常适合这样的搜索的语言描述的食人族和传教士问题。这个师还可以提高程序的可维护性,因为代码可以分开的核心问题,不仅从用户界面,也可以从任何特定于平台的的考虑。而不是重新哈希食人族和传教士问题,我们将使用类似的问题,农民的白菜,山羊狼问题。这两个问题说明了一般类的问题,其中,我们必须寻找到一个特定的路径
满足严格约束的目标。相同的基本问题结构出现在许多更复杂的问题,包括象征性的推理,自然语言处理,建模和认知。这种问题往往比在传统的程序语言,如Java或C#在Prolog表达简单得多。讨论的核心问题本身之前,让我们来看看一些可供选择的方案。NET或Mono的开发者希望探索Prolog的。有许多有良好的Prolog实现,包括一些优秀的开源软件包。当然,每个都有其长处和短处。在我看来,。NET开发人员最感兴趣的两个XSB和P#。 XSB是一个顶尖的人工智能编程平台。事实上它是不是真的公平,它在所有的P的XSB Prolog的超集。虽然运行Prolog代码,它支持许多强大的功能和扩展不stricly Prolog语言的一部分。 XSB是开源和可用于多种平台,包括Windows和Linux。 ,但其已编译的代码运行在一个非托管环境。作为一个XSB。NET开发组件都必须调用API级别的程序很舒服。另一方面,P#乔恩库克专门为CLR创建一个开源的Prolog实现。虽然不一样的XSB强大,它是一个了不起的工具,开发人员希望在C#程序中嵌入规则驱动的Prolog代码。 (库克先生的荣誉!)P#可以使用两种不同的方式:作为Prolog的解释器,或作为一个序言 - C#编译器。翻译将是理想的,如果只想要一个传教士与食人族问题的解决方案。他或她可以写Prolog代码,在解释器中运行它,并有自己的答案。翻译也为学习者的理想选择;简单的Prolog的规则,可以开发和探索,在一个轻松舒适的环境。相反,如果一个人发展,比如说,系统诊断专家系统,那么它可能是更有价值的Prolog代码编译成C#和嵌入产生的在一个更大的应用程序代码。背景几个Prolog的基础是要了解这个例子。 Prolog是相当限制性语法。变量名开始大写字母和小写字母是用于固定的价值观和Prolog条件。变量工作的方式相当不同的,从你的习惯,在您最喜爱的的程序编程语言,也许是C#。 Prolog的变量是类似高中代数中的变量和操作密切类似于什么逻辑学家称之为"统一"的方式。这就是说,一个变量,Prolog的搜索事实和尝试,以确定是否有是该变量的值将在会上发言的真实。在Prolog中,人们一般不分配值变量。 Prolog的文本往往会选择从族谱"介绍的例子(Prolog的极好的应用程序的方式,)。事实上父亲("亚伯拉罕","艾萨克")。表明,这两个纲领性的原子,"亚伯拉罕"和"以撒"在相关子句叫爸爸。然后,我们可以查询我们的一排数据库父亲(X,"以撒")。为了测试这个在我们的互动的环境中,我们必须"断言"到我们的任何新的事实本届会议。这里是一个互动的Prolog会议的拷贝:| ?- assert(father('Abraham','Isaac')).
| ?- father(X,'Isaac').
X = Abraham ?
Prolog的轨道后,通过数据库,发现该查询是真实的,如果X =亚伯拉罕。使用代码似乎公平地说,不能在一个下午获悉Prolog的编程,但食人族传教士问题还是名人堂成员,卷心菜羊,狼的问题提供说明如何Prolog的作品。程序语言,如C#,分配给变量的值。在Prolog中,变量是更类似于给变量,你在高中的代数。 Prolog代码,旨在满足Prolog代码中定义的规则的约束变量的值。下面是一个Prolog的规则的一个例子,它是简单的,但不熟悉,所以它需要一个位的习惯。我们使用"状态(F,G,C,W)"来形容的四个主角的位置小戏。例如,州(N,N,S,S)表示,农民和山羊在北岸和南岸的白菜和狼。然后,我们可以定义一组Prolog的规则,它定义了允许的转换各州。例如,下面的规则要求,农民和山羊(位置1和2),可以使过渡到对岸的狼和白菜的位置保持不变。{C}类似的规则是被定义为每个允许的跃迁。现在,让我们在互动P#环境中运行的程序。启动程序PSharpGUI.exe。可装入一个序言文件通过通常的文件\打开"对话框编辑器。然而,交互使用的事实和规则的文件,该文件还必须开在序言环境本身。如果该文件并不需要编辑,它可以直接打开。由于prolog文件,Prolog的事实这种开放到环境中的文件被称为"咨询"。我们将需要咨询一个标准工具,list.pl和农民山羊规则文件,farmergoat.pl集合。consult('list').
consult('farmergoat').
请注意,文件扩展名是不包括在内,一定不要忘记在咨询子句结束期间。许多Prolog的方案将有"主"的条款或一个"走出去"的条款时自动运行咨询文件。在这种情况下,我们学会在一个条款中键入:path(state(n,n,n,n),state(s,s,s,s), FinalPath).
这个子句成为我们的目标,我们要找到一个允许转换序列我们需要从初始状态,每个人都在北岸,最终状态,每个人都在南部。
如果存在这样一个状态序列,这将是"统一"的变量FinalPath。虽然我们不会在这里讨论,Prolog是完全能够回去寻找额外的解决方案,应它们的存在。下面是完整的代码,以farmergoat.pl:opposite(n,s).
opposite(s,n).
transition(state(F0,F0,C,W), state(F1,F1,C,W)):-
opposite(F0,F1).
transition(state(F0,G,F0,W), state(F1,G,F1,W)):-
opposite(F0,F1),
opposite(G,W).
transition(state(F0,G,C,F0), state(F1,G,C,F1)):-
opposite(F0, F1),
opposite(G,C).
transition(state(F0,G,C,W), state(F1,G,C,W)):-
opposite(F0,F1),
opposite(G,C),
opposite(G,W).
path(A,B,FinalPath):-
path(A,B,[], ReversedFinalPath),
reverse(ReversedFinalPath, FinalPath).
path(CurState, GoalState,PrevStates, [GoalState|PrevStates]):-
transition(CurState, GoalState).
path(CurState, GoalState, PrevStates, FinalPath):-
transition(CurState, NextState),
not(member(NextState, PrevStates)),
path(NextState, GoalState, [CurState|PrevStates], FinalPath).
对于希望了解的Prolog更多开发,有几个优秀的文本,但在我看来入门的最好的是伊万Bratko的例外"的PROLOG人工智能由Addison Wesley出版的"编程,有兴趣的evelopers也欢迎与本文作者联系。这些谁是不仅有兴趣,但怀旧将收到的Prolog实现命令行经典"亨特Wumpus"。兴趣点虽然Prolog的已超过三十年左右,这是最近享受中兴在包括自然语言处理等领域的兴趣。特别笔者感兴趣的是使用Prolog的生成,从大型数据库的假设。关于丹Buskirk 丹Buskirk是一家专业的SQL Server开发。NET程序员。他很少能抵制探索新的东西,看起来很有趣。
关于作者:
中国我是一名编程爱好者,谢谢为我们提供一个学习和分享的平台。有什么问题。可以就本内容回复,我看到时。会尽量回复的。
评论会员:
时间:我不知道是否要感谢你与否,我经过多年的Prolog感兴趣。 {S2}
,麦克如果你继续做你一直在做,你会继续让你得到 {A}
评论会员:
时间:麦克:Thaks为您的注意。你应该知道,但是,在这个老的文章中描述的项目已经下跌到忽视。你不应该使用任何严肃的项目。事实上,我会鼓励你使用像swiprolog或XSB的系统,这就需要通过的PInvoke,但是这是比这里所描述的介绍系统更强大。
运气大量Prolog代码评论会员:
时间:!麦克Hankey:我试图P#但没有它的多文档,但我有发现和下载版VisualProlog的表达我对它进行评估。还试图Prolog.Net看着SwiProlog和XSB,他们看起来有趣。感谢如果你是斗鸡眼,有诵读困难,你可以阅读所有权利{A}imgsrc=/upimg/_08_40_34_2.gif nes2world评论会员:
时间:是否有可能,你可以给我的项目代码,在学校同样的事​​情工作,这是非常重要的。在此先感谢。nes2world的位置评论会员:
时间:我有一个问题与P#在C#中,我不能动态地断言一个事实数据库。例如:鸟(laysan_albatross):-家庭(信天翁),颜色(白色)如何动态维护这些事实:家庭(信天翁)和颜色(白色)输出结果鸟laysan_albatross。帮帮我吧!!!imgsrc=/upimg/_08_40_34_3.gif罗卡 sabrysoft评论会员:
时间:你好我亲爱的能不能帮我请我想创建一个C#程序,而程序运行从uosr和调用Prolog的数据,将数据发送到的prolog,recive来自前导结果显示给用户,我可以与我的问题,如何与C#和Prolog(在C#)??{BR中调用的prolog}感谢您的时间了很多..请帮我Sabrysoft计算机与信息学院的学生在第三年电脑scince部赫勒万大学埃及 newnob评论会员:
时间:当我编译C#文件,一个errror:类"Member_2"不"在命名空间JJC.Psharp.Predicates"。你有这么?有什么问题?感谢。newnob | http://homepages.inf.ed.ac.uk/stg/research/Psharp/ 评论会员:
时间:首先,文章本身写得好不好,你GOT我5 不过,我不喜欢这么多P#我参加了一个序言课程的大学,需要构建一个示例基于Prolog的游戏。我去与P#,并认为这将会是很大的。然而,appearently,它生成的C#代码是非常unredable undebugable(我认为我在C#中的专家),和Prolog语言中的某些功能不落实的权利,如断言。任何一个搜索算法在Prolog良好的实施,将不得不使用断言,以避免不必要的回溯,所以P#只是很简单的情况良好,并为他的主人是谁写的家伙。如果你想使用Prolog的现实生活中,我就amzi - Prolog的,这是一个商业的prolog引擎,完全符合所有的prolog需要什么,并为最主流的语言和框架的API。
欢呼声中,肯Egozi, 评论会员:
时间:?你试过{A5},我的一个同事写的 评论会员:
时间:感谢指出这个工具。我来看看。然而,阅读手册,我注意到,它并没有recorgnize断言所有。 评论会员:
时间:感谢评论会员:
时间:好文章评论会员:
时间:感谢你这篇文章! Prolog是我曾经尝试过的最美丽的编程语言之一。和P#是一个伟大的一块软件。再次感谢您CodeProject上关于这个项目在这里告诉acknowleging乔恩库克的伟大的工作! 评论会员:
时间:好,我们实际使用的prolog为AI一疗程。因此,这是票。
&桌面&网页开发&移动开发&数据库&多媒体&编程语言&平台,框架和库&编程通用&图形/设计&开发周期&一般阅读&第三方产品&作者资源&其他
快速解答标签
价值作最多人工智能语言 PROLOG 很智能 - CSDN博客
人工智能语言 PROLOG 很智能
人工智能语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言,其中Prolog是当代最有影响的人工智能语言之一。
一、什么是人工智能语言
  人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。能够用它来编写程序求解非数值计算、知识处理、推理、规划、决策等具有智能的各种复杂问题。
  典型的人工智能语言主要有LISP、Prolog、Smaltalk、C++等。
  一般来说,人工智能语言应具备如下特点:
o具有符号处理能力(即非数值处理能力);
o适合于结构化程序设计,编程容易;
o具有递归功能和回溯功能;
o具有人机交互能力;
o适合于推理;
o既有把过程与说明式数据结构混合起来的能力,又有辨别数据、确定控制的模式匹配机制。
  人们可能会问,用人工智能语言解决问题与传统的方法有什么区别呢?
传统方法通常把问题的全部知识以各种的模型表达在固定程序中,问题的求解完全在程序制导下按着预先安排好的步骤一步一步(逐条)执行。解决问题的思路与冯.诺依曼式计算机结构相吻合。当前大型数据库法、数学模型法、统计方法等都是严格结构化的方法。
对于人工智能技术要解决的问题,往往无法把全部知识都体现在固定的程序中。通常需要建立一个知识库(包含事实和推理规则),程序根据环境和所给的输入信息以及所要解决的问题来决定自己的行动,所以它是在环境模式的制导下的推理过程。这种方法有极大的灵活性、对话能力、有自我解释能力和学习能力。这种方法对解决一些条件和目标不大明确或不完备,(即不能很好地形式化,不好描述)的非结构化问题比传统方法好,它通常采用启发式、试探法策略来解决问题。
二、Prolog语言及其基本结构
Prolog是当代最有影响的人工智能语言之一,由于该语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用,已经成为人工智能应用领域的强有力的开发语言。
尽管Prolog语言有许多版本,但它们的核心部分都是一样的。Prolog的基本语句仅有三种,即事实、规则和目标三种类型的语句,且都用谓词表示,因而程序逻辑性强,文法简捷,清晰易懂。另一方面,Prolog是陈述性语言,一旦给它提交必要的事实和规则之后,Prolog就使用内部的演绎推理机制自动求解程序给定的目标,而不需要在程序中列出详细的求解步骤。
事实用来说明一个问题中已知的对象和它们之间的关系。在Prolog程序中,事实由谓词名及用括号括起来的一个或几个对象组成。谓词和对象可由用户自己定义。
例如,谓词likes(bill,book).
是一个名为like的关系,表示对象bill和book之间有喜欢的关系。
规则由几个互相有依赖性的简单句(谓词)组成,用来描述事实之间的依赖关系。从形式上看,规则由左边表示结论的后件谓词和右边表示条件的前提谓词组成。
例如,规则 bird(X):-animal(X),has(X,feather).
表示凡是动物并且有羽毛,那么它就是鸟。
3、目标(问题)
把事实和规则写进Prolog程序中后,就可以向Prolog询问有关问题的答案,询问的问题就是程序运行的目标。目标的结构与事实或规则相同,可以是一个简单的谓词,也可以是多个谓词的组合。目标分内、外两种,内部目标写在程序中,外部目标在程序运行时由用户手工键入。
例如问题 ?-student(john).
表示“john是学生吗?”
三、Prolog程序的简单例子
以下两个例子在Turbo Prolog 2.0环境下运行通过。
[ 注:一个Turbo Prolog程序至少包括谓词段、子句段和目标段三项。目标可以包含在程序中,也可以在程序运行时给出。]
例1 谁是john的朋友?
predicates /*谓词段,对要用的谓词名和参数进行说明*/
likes(symbol, symbol)
friend(symbol, symbol)
clauses /*子句段,存放所有的事实和规则*/
likes(bell,sports). /*前4行是事实*/
likes(mary,music).
likes(mary,sports).
likes(jane,smith).
friend(john,X):-likes(X,sports),likes(X,music). /*本行是规则*/
当上述事实与规则输入计算机后,运行该程序,用户就可以进行询问,如输入目标:
friend(john,X)
即询问john的朋友是谁,,这时计算机的运行结果为:
X=mary (mary是john的朋友)
1 Solution (得到了一个结果)
程序运行界面如下图所示:
例2 汉诺塔问题:
有N个有孔的盘子,最初这些盘子都叠放在柱a上(如图1),要求将这N个盘子借助柱b从柱a移到柱c(如图2),移动时有以下限制:每次只能移动一个盘子;大盘不能放在小盘上。问如何移动?
该问题可以采用递归法思想来求解,其源程序为:
predicates /*谓词段*/
hanoi(integer)
move(integer,symbol,symbol,symbol)
inform(symbol,symbol).
clauses /*子句段*/
hanoi(N):-move(N,a,b,c).
move(1,A,_,C):-inform(A,C),!.
move(N,A,B,C):-N1=N-1,move(N1,A,C,B),
inform(A,C),move(N1,B,A,C).
inform(Loc1,Loc2):-nl,write(&移动1个盘子从柱& ,Loc1,&到柱&,Loc2).
goal /*目标段,问移动3个盘子的方法*/
这个例子的目标包含在程序里面,因此运行时程序将直接输出所有结果。
程序运行界面如下图所示:
四、Prolog语言的常用版本
Prolog语言最早是由法国马赛大学的Colmerauer和他的研究小组于1972年研制成功。早期的Prolog版本都是解释型的,自1986年美国Borland公司推出编译型Prolog,即Turbo Prolog以后,Prolog便很快在PC机上流行起来。后来又经历了PDC PROLOG、Visual Prolog不同版本的发展。并行的逻辑语言也于80年代初开始研制,其中比较著名的有PARLOG、Concurrent PROLOG等。
1、Turbo Prolog
由美国Prolog开发中心(Prolog Development Center, PDC)1986年开发成功、Borland公司对外发行,其1.0,2.0,2.1版本取名为Turbo Prolog,主要在IBM PC系列计算机,MS-DOS环境下运行。
2、PDC Prolog
1990年后,PDC推出新的版本,更名为PDC Prolog 3.0,3.2,它把运行环境扩展到OS/2操作系统,并且向全世界发行。它的主要特点是:
o速度快。编译及运行速度都很快,产生的代码非常紧凑。
o用户界面友好。提供了图形化的集成开发环境。
o提供了强有力的外部数据库系统。
o提供了一个用PDC Prolog编写的Prolog解释起源代码。用户可以用它研究Prolog的内部机制,并创建自己的专用编程语言、推理机、专家系统外壳或程序接口。
o提供了与其他语言(如C、Pascal、Fortran等)的接口。Prolog和其他语言可以相互调用对方的子程序。
o具有强大的图形功能。支持Turbo C、Turbo Pascal同样的功能。
3、Visual Prolog
Visual Prolog是基于Prolog语言的可视化集成开发环境,是PDC推出的基于Windows环境的智能化编程工具。目前,Visual Prolog在美国、西欧、日本、加拿大、澳大利亚等国家和地区十分流行,是国际上研究和开发智能化应用的主流工具之一。
Visual Prolog具有模式匹配、递归、回溯、对象机制、事实数据库和谓词库等强大功能。它包含构建大型应用程序所需要的一切特性:图形开发环境、编译器、连接器和调试器,支持模块化和面向对象程序设计,支持系统级编程、文件操作、字符串处理、位级运算、算术与逻辑运算,以及与其它编程语言的接口。
Visual Prolog包含一个全部使用Visual Prolog语言写成的有效的开发环境,包含对话框、菜单、工具栏等编辑功能。
Visual Prolog与SQL数据库系统、C++开发系统、以及Visual Basic、Delphi或Visual Age等编程语言一样,也可以用来轻松地开发各种应用。
Visual Prolog软件的下载地址为:http://www.&
本文已收录于以下专栏:
相关文章推荐
    Prolog这语言感觉挺吊的啊,声明式逻辑编程语言,不用描述解决方案,只要描述问题就可以交给语言本身了;太**的方便了。这语言用就是为:人工智能,自然语言理解,自学习等,而用的...
对Prolog的初步了解
刚接触Prolog,对其能做的事甚感兴趣。
严格来说,我不认为这是程序,因为它执行哪一步不是由人来确定的,好像是有了初级的“智能”。
你定义一些规则,然后提出一个问题,它就会...
本人的PPT是针对闫净斌所著《Prolog语言教程》制作的。
1. EPPlus概述
EPPlus 是使用Open Office XML格式(xlsx)读写Excel 2007 / 2010文件的.net开发库。
官网:http://epplus.c...
//LinQ查询booklist集合中是否有该书
objBook = (bookList.Where(b =& b.BarCode=(this.txtBarCode.Text.Trim()))).Fi...
本文转载至:http://www.chinaai.org/programming/language/ai-prolog.html人工智能语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理...
Prolog 概念:
Prolog(PROgramming in LOGic的缩写)语言是一种基于 Horn 子句的逻辑型程序设计语言,也是一种陈述性语言。 Prolog 与人工智能的知识表示、自动...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Prolog人工智能实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Prolog人工智能实验报告
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩10页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 prolog 人工智能 的文章

 

随机推荐