英语原文共 7 页,剩余内容已隐藏,支付完成后下载完整资料
基于IPC的集成反向链接推论的
应用程序或嵌入式系统的Prolog设计模式
摘要:Prolog是建立专家系统和AI相关程序最重要的选择之一,并且在嵌入式系统中有潜在的应用。然而,Prolog是不适合开发的各种组件,如至关重要的数据采集和任务调度。为了充分利用优势和避开缺点,将Prolog语言与其他语言开发的程序整合是很有意义的。在本文中,以IPC为基础的方法是用来将被Prolog执行的反向链接推论集成到应用程序或嵌入式系统。一个Prolog的设计模式是来自于重用的方法,其原理和定义中详细提供。此外,设计模式被施加到一个自由软件的目标系统中去,以验证其可行性。给出应用程序的详细实施以澄清设计模式。该设计模式可以进一步应用到广泛的应用和嵌入式系统中,和本文中所描述的方法也可以采用其他可编程逻辑语言。
关键词:反向链接推论;设计方法;嵌入式系统;推理引擎;进程间通信;Prolog
1 引言
Prolog语言是一种通用的逻辑程序设计语言,是此类语言中最流行的语言。虽然它不像曾经流行,但是Prolog仍然是建立专家系统和AI相关的序最重要的选择之一。Prolog最近的热门话题是它的集成了本体论、Prolog规范的巨型算术,不同Prolog实现的可移植性和其他语言开发的程序的结合。相比较于必要的编程语言,如C/C 和Java,Prolog是声明和被匹配规则所驱动。Prolog专注于如何描述问题,而不是如何逐步解决它们。从当代计算的意义来看,Prolog具有以下两个突出的优点。
(1)更高解决AI相关程序的开发效率。人工智能算法与Prolog语言之间存在语义差异较小。在这里,语义差异指的是一些知识的自然表示和知识的程序表示之间的区别。此外, Prolog是简单,易于掌握是公认的。
(2)验证成本较低。对于具有相同功能的程序,代码通常比Prolog语言编写的要短得多。随着人们对软件质量的要求越来越高,它在很多方面都有很大的优势,尤其是关键系统。
当然,较低的运营效率是缺点。然而,这是微不足道的,因为硬件资源,如CPU的计算能力和内存容量已经足够了。
此外,以知识为基础的技术目前被报道在实时控制系统,这是典型的和流行的嵌入式系统。因此,Prolog在自主汽车、家庭医疗器械和无人机(UAV)等是当前的热门领域中具有潜在的应用,并有望在不久的将来进入我们的日常生活。
尽管有这些事实,Prolog是不适合开发的各种组件,如至关重要的数据采集和任务调度。因此,将Prolog语言与其他语言开发的程序整合是很有意义的。然而,这碰巧是一个瓶颈。为了打破这一瓶颈,本文提出了一个IPC(进程间通信)为基础的Prolog的设计模式,整合落后的链接推理到应用程序或嵌入式系统。反向链接,或反向推理,是一种推理方法,可以被描述为从目标向后工作。它从一个目标的清单(或假设),从后向前工作查看是否有数据可以支持这些结论。它广泛应用于自动定理证明、推理机、证明助手等人工智能应用。本文提出的方法,有助于克服现有集成方法的缺点和能给prologbased反向链推理应用作燃料。
SWI Prolog语言的选择,因为它是开源的,广受欢迎。事实上,设计模式也可以用在其他具体的Prolog实现,甚至在其他逻辑编程语言。
在下面的章节中,通过对比以前的方法,对设计模式的原则进行了描述,其定义中详细提供。在案例研究部分提供插图。最后,我们得出结论,并指出我们未来的工作。
2 设计模式的原理与定义
2.1 原理
SWI Prolog给可调用方法的C/C 和java提供灵活、快速的接口。然而,这是不够的。作为一个全功能的编程语言,Prolog被设计为一个独立的系统。实现Prolog的混合,如SWI Prolog,GUN Prolog和Amzi。Prolog通常提供独立的控制台,多线程机制,内置谓词等。当从C/C 或java通过SWI Prolog的接口调用一个Prolog程序,额外的Prolog线程或进程将被创建,Prolog的程序将结果输出到swiprolog控制台,而不是回到C/C 或java。重量轻的系统,如Drools和剪辑,比Prolog的嵌入更适合,因为他们的输出比Prolog更容易获得或被解析。然而,Prolog语言具有更强大的谓词和大量的现有代码,这使得它有集成的价值。
因此,在2007,Peretyatkin为Prolog提供了一种集成Qt方法。该方法的示意图如图1所示。“输出到Prolog控制台”是捕获并解析以至于Prolog程序的结果可以被提取并转移到C/C 。然而,该方法有两个问题。
(1)特异性的案例。对不同的Prolog程序,QT部分必须为每个输入和输出提供不同的解析器。
(2)捕获输出到控制台是易错的,也很难验证解析器。没有保证的Prolog程序输出是可预测的,将约束添加到输出很难。Peretyatkin的方法用于教育,所以它是好的。然而,如果工业用途,必须考虑安全。
为了解决这些问题,本文提出了一种基于IPC的方法,其原理图如图2所示。与前一个图形相比,不同的部分是灰度矩形。从本质上讲,我们的方法从IPC的Prolog获得结果,而不是通过捕获Prolog控制台的输出。
事实上,IPC对于Prolog不是一个新的主题。早在1993年初,Prolog与外部进程之间的通信方法作为一种专利被提出,并在1996中对Prolog中的进程间通信进行了详细的描述。
实际上,IPC在SWI Prolog以Prolog库的形式被支持。然而,在以前的工作中,IPC被用来提高Prolog引擎的效率或用来分布式计算,IPC被施加到整合Prolog的应用程序或嵌入式系统还没有被报道。在本文中,IPC为基础的方法引入到应用程序或嵌入式系统向后链推理集成,设计模式推导重用。
图1
图2
实际上,IPC库是Prolog的扩展。如图2所示,“ipc扩展”是一组谓词。当推断的谓词,它们会触发IPC C/C 和转移Prolog程序的结果到C/C 。“ipc延伸”的基础上实现机制Prolog语言调用C / C 。为简洁起见,在下面的描述,“yoyo_reasoner ,我们团队实现的一个简单的IPC的延伸被使用,而不是SWI Prolog复杂的IPC库。
与前面的集成方法比较, PC扩展是独立的,可以重复使用,如图1所示。Prolog和C/C 之间的通信依赖于“ipc延伸”。约束词ipc延伸”保证从Prolog传送到C/C 的数据也被约束,所以工业用是安全的。这一点将在下面的章节中详细阐明。
2.2 定义
在定义Prolog的设计模式,许多相关的Prolog定义应澄清。Prolog模块封装了一组谓词并定义了一个接口。模块可以导入其他模块,这使得依赖关系明确。
实际上,模块是一个模块化的Prolog程序和控制模块中定义谓词的能见度。例如下面的Prolog语言源代码文件facts.pl:
该facts.pl第二行定义了这个模块的“事实”。模块及其源文件共享相同的名称。线上的[parent/2]表示的parent 是一个二元谓词,且可以导入其他模块。第二行用谓词定义了许多事实。
algorithms.pl输入上述第三行的事实模块。它输入所有谓词的在facts.pl第二行的架构上所列出的。然后,谓词在algorithms.pl中是可见的和可重复使用的。该algorithms.pl第四行输入另一种模块,在以下命名为“外国谓词”。不同于“事实”模块,它是一个外国模块。使用外部库的模块称为外部模块。看看外国predicates.pl第三行,输入外国的图书馆,命名为“yoyo_reasoner”。如上所述,这是一个IPC扩展或库。外国库意味着谓词是由其他语言实现,如C或C 。
你可以在下一节描述的忽略线以下的algorithms.pl等等。
我们在C 编译实施了外国库,将其作为名为“yoyo_reasoner DLL”的动态链接库(DLL)。其实,这foreign_predicates.pl第三线,加载DLL和在库内输入谓词。有在外国库的两个谓词:“add_to_buffer/1”和“tcp_send/1”。这两个谓词与传统谓词不同。当推断这些谓词,在yoyo_reasoner.dll它们触发了C 程序。相应的add_to_buffer / 1”和“tcp_send / 1”,有两个C 函数的pl_add_to_buffer”和“pl_tcp_send”功能。前者增加了参数的谓词的add_to_buffer/1”到缓冲区,后者创建一个套接字,连接到服务器并发送缓冲中的数据到服务器。在这里,我们使用tcp为主,即基于socket,IPC。D-BUS和其他种类是可行的。
“yoyo_reasoner .dll”是一个SWI Prolog的外国库,“foreign_predicates.pl”是国外的一个连接外国库与Prolog程序的模型。将外文库和国外模块结合为IPC扩展。从Prolog编程的角度来看,IPC的延伸是一套定制的谓词的设置,从C/C 的角度来看,它是一个IPC接口。图3中的流程图显示了Prolog和应用程序如何通过IPC扩展一起工作。
图3
一个设计模式在一个给定的上下文中常见的问题中是一个通用的可重用的解决方案。对于基于IPC的集成方法,Prolog开发工具(PDT)的设计负载图如图4所示。图中的每个矩形都指向一个Prolog的源文件。“queries。PL”是Prolog程序的入口。对于其他三个矩形,上面的双行是模块名和文件名。下面的双行是谓词列表,可以由其他Prolog文件导入。与箭头均值相关的行和源使用谓词的目的地。标注输入谓词数的注释。图中有四个Prolog的源文件。“queries。PL”是由应用程序运行时自动生成。它在“algorithms”中使用许多谓词,一个谓词在“外国谓词”负责IPC。“algorithms”是可定制的,是唯一在应用过程开始写的文件。它使用的所有谓词“事实”和一部分“外国谓词的谓词,这是负责生成IPC数据准备。它也应该在运行时生成,因为除了导入国外库,它包括枚举所有可能的事实所写的外国谓词,这是负责生成的数据为IPC准备。
设计模式的定义或文档描述模式使用的上下文,模式试图解决的上下文中的力,以及所建议的解决方案。没有单一和标准格式来记录设计模式。根据普遍接受的格式中采用面向对象的设计模式,设计模式的语言定义在表1中给出了。为了澄清和示范,在下面的章节中,Prolog设计模式的应用与案例研究描述出来。
3 案例研究
3.1 目标系统的介绍
目标系统是自由软件的yoyo-ontology”,它的主要功能有两个。首先,它是一个“yoyo-ontology”生成器。从著名的基因本体论广义看,“yoyo-ontology”指一个精简的本体。此外,该软件还可以对输入数据给定的yoyo-ontology节点。从建筑的角度,yoyo-ontology本体论有两个大的模块,一个为本体的构建和其他数据集的注释。这两个模块耦合低。“yoyo-ontology”的拓扑结构是有向无环图(DAG),基因本体相同。
图4
图5是一个yoyo-ontology”,即一个DAG;每个节点代表一个概念。一个节点确定为ID:xxxxx,其中x是一个数字。节点与有向线连接。不同的行头是指节点之间的不同关系。在这里,我们可以忽略类型的边缘。边缘指向比它的起源更具体的概念。DAG的节点列表用于描述数据集的记录并称为注释。
例如,a = [ ID:10007;ID:10009 ]和B = [ ID:10011 ]是两个注释。对于任何两个注释A和B,定义它们的语义相似度为,其中X表示A和所有的祖先节点的每一个成员的联合。Y和B的关系类似于X和A。Card(X)表示集合X,即集合成员的数目。对于两个集合,x和y,x-y表示一个新的集合,每个成员属于x,但不属于y,即。
这是很容易明白,如果A = B,那么相似Similarity(A,B)=1下及其他,,所以。
图5
现在,我们添加另一个模块的软件来计算任意两个给定的注释的相似性。Prolog是有效的处理DAG,所以相似度的计算诉诸于Prolog。然而,在计算中所涉及的数据必须是实时的,因为拓扑结构的本体和注释不断修改用户根据要求。数据采集的任务不适合Prolog,且将被分配到C 。最后但并非最不重要的,这两部分应整合。考虑在前面的部分定义的Prolog设计模式的情况下,这是一致的场景。在下面的文本中,计算两个注释的相似性将实现上述设计模式。
3.2 设计模块的应用
假设A=[10007:ID:10009]和B =[ID:10011],以获得A和B的相似性,我们应该弄清楚Card(X,Y),Card(Y,X),Card(X)和Card(Y)。在下面的文本中,我们将使用Prolog来计算它们。
参考图4,我们应该设法得到这四个文件。巧合的是,其中三个已在第2.1节给出。澄清一下,这三个模块的谓词之间的关系如图6所示,以PDT全局视图的形式显示。每个信封是指一个Prolog模块和一个信封,每个矩形是一个谓词。箭头表示相关性。
图6
用C 、java或其他命令式语言,从图5运行很容易产生“fact.PL”。“algorithms.PL”输入“fact”模块。第五和第六行的文件用递归定义一个谓词的“ancestor/2”。在下面的文字中,“card X/1”和“card XY/2”是重要的谓词,分别负责计算Card(x)和Card(x,y)
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[28342],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、文献综述、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。