论坛首页 Java企业应用论坛

规则引擎

浏览 115256 次
锁定老帖子 主题:规则引擎
该帖已经被评为精华帖
作者 正文
   发表时间:2004-09-29  
ajoo 写道
它们都是declarative的。

我在想,需要推理的东西比不需要推理的东西复杂得多。
所以prolog相对于haskell又显得象把牛刀了。

那么什么业务规则需要这种逻辑推理能力呢?

要把Prolog embed in 到Haskell是很简单的
这个东西大概不超过200行,
如果你觉得这样不爽的话,可以去用clean,clean除了强化了haskell以外,还加了logic programming,据说也很强。
hehe
0 请登录后投票
   发表时间:2004-09-29  
如果业务规则真的需要推理,我想我还是会选择玄门正宗的prolog rete等。haskell或者clean的模拟可能速度上受不了吧?

当然,能够有combinator自然更爽了。
0 请登录后投票
   发表时间:2004-09-29  
还有这份Paper
http://archive.cs.uu.nl/pub/RUU/CS/techreps/CS-1999/1999-28.pdf

至于为何要用推理机,其实Haskell的Combinator就相当于一个推理机,如果
规则库是在过于庞大的话,你自己写Combinator不是很麻烦?
0 请登录后投票
   发表时间:2004-09-30  
combinator相当于推理机?什么意思?

还有,我感觉combinator只会让写规则更容易吧?怎么会更麻烦?
0 请登录后投票
   发表时间:2004-09-30  
其实,除了这种基于决策树的推理机,现在更加主流的是基于先验概率推理的方法,也就是我以前提到过的贝叶斯学派。对于数据分析数据挖掘来说,这种方法要比决策树更加有效。很多时候,我们需要得到的甚至是我们能够得到的只是某个事件的或然率.就实际应用来说,目前贝叶斯推理要比以Prolog为代表的古典的决策树系统应用更加广泛。Google的成功就是最好的例证。不过这个学派和通常的概率频率派在理论层面有着非常大的冲突,但是从工程面上讲各有各的用处。
这里是篇贝叶斯公式的介绍。虽然说贝叶斯推理源于这个公式,但是现在的贝叶斯
推理已经是面目全非了。
http://dev.csdn.net/Develop/article/39/39756.shtm
下面是一个非常简单的贝叶斯网络的介绍
0 请登录后投票
   发表时间:2004-09-30  
贝叶斯网络(Bayesian Networks)    

贝叶斯网络(Bayesian Networks)也被称为信念网络(Belif Networks)或者因果网络(Causal Networks),是描述数据变量之间依赖关系的一种图形模式,是一种用来进行推理的模型。贝叶斯网络为人们提供了一种方便的框架结构来表示因果关系,这使得不确定性推理变得在逻辑上更为清晰、可理解性强。对于贝叶斯网络,我们可以用两种方法来看待它:首先贝叶斯网表达了各个节点间的条件独立关系,我们可以直观的从贝叶斯网当中得出属性间的条件独立以及依赖关系;另外可以认为贝叶斯网用另一种形式表示出了事件的联合概率分布,根据贝叶斯网的网络结构以及条件概率表(CPT)我们可以快速得到每个基本事件(所有属性值的一个组合)的概率。贝叶斯学习理论利用先验知识和样本数据来获得对未知样本的估计,而概率(包括联合概率和条件概率)是先验信息和样本数据信息在贝叶斯学习理论当中的表现形式。
贝叶斯网络由以下两部分组成:

一 贝叶斯网络结构

    贝叶斯网的网络结构是一个有向无环图(Directed Acyclic Graph),其中每个结点代表一个属性或者数据变量,结点间的弧代表属性(数据变量) 间的概率依赖关系。一条弧由一个属性(数据变量)A指向另外一个属性(数据变量)B说明属性A的取值可以对属性B的取值产生影响,由于是有向无环图,A、B间不会出现有向回路。在贝叶斯网当中,直接的原因结点(弧尾)A叫做其结果结点(弧头)B的双亲结点(parents),B叫做A的孩子结点(children)。如果从一个结点X有一条有向通路指向Y,则称结点X为结点Y的祖先(ancestor),同时称结点Y为结点X的后代(descendent)。
我们用下面的例子来具体说明贝叶斯网的结构:



图2.1 简单的贝叶斯网模型

    图2.1中共有五个结点和五条弧。下雪A1是一个原因结点,它会导致堵车A2和摔跤A3。而我们知道堵车A2和摔跤A3都可能最终导致上班迟到A4。另外如果在路上摔跤严重的话还可能导致骨折A5。这是一个简单的贝叶斯网络的例子。在贝叶斯网中像A1这样没有输入的结点被称作根结点(root),其他结点被统称为非根结点。
    贝叶斯网络当中的弧表达了结点间的依赖关系,如果两个结点间有弧连接说明两者之间有因果联系,反之如果两者之间没有直接的弧连接或者是间接的有向联通路径,则说明两者之间没有依赖关系,即是相互独立的。结点间的相互独立关系是贝叶斯网络当中很重要的一个属性,可以大大减少建网过程当中的计算量,同时根据独立关系来学习贝叶斯网络也是一个重要的方法,这在本文后面会着重介绍。使用贝叶斯网络结构可以使人清晰的得出属性结点间的关系,进而也使得使用贝叶斯网进行推理和预测变得相对容易实现。
从上图中我们可以看出,节点间的有向路径可以不只一条,一个祖先结点可以通过不同的途径来影响它的后代结点。如我们说下雪可能会导致迟到,而导致迟到的直接原因可能是堵车,也可能是在雪天滑倒了、摔了一跤。这里每当我们说一个原因结点的出现会导致某个结果的产生时,都是一个概率的表述,而不是必然的,这样就需要为每个结点添加一个条件概率。一个节点在其双亲节点(直接的原因接点)的不同取值组合条件下取不同属性值的概率,就构成了该结点的条件概率表。


二. 条件概率表
    在上一节当中已经介绍了条件概率的概念,贝叶斯网络中的条件概率表是结点的条件概率的集合。当使用贝叶斯网络进行推理时,实际上是使用条件概率表当中的先验概率和已知的证据结点来计算所查询的目标结点的后验概率的过程。
条件概率可以由某方面的专家总结以往的经验给出(但这是非常困难的,只适合某些特殊领域),另外一种方法就是通过条件概率公式 在大样本数据当中统计求得,学习条件概率表的算法将在下一节中详细介绍。在这里我们先根据上图的贝叶斯网给出其中的一些条件概率表,使大家对条件概率表有一个感性的认识。
    如果将结点A1下雪当作证据结点,那么发生A2堵车的概率如何呢?下表给出了相应的条件概率:



 

  上表是最简单的情况,如果有不只一个双亲结点的话,那么情况会变得更为复杂一些,见表2.2:

    由表中可以看出,当堵车A2和摔跤A3取不同的属性值时,导致迟到A4的概率是不同的。贝叶斯网条件概率表中的每个条件概率的都是以当前结点的双亲结点做为条件集的。如果一个结点有n个父节点,在最简单的情况下(即每个结点都是二值结点,只有两个可能的属性值:True或者False),那么它的条件概率表有2n 行;如果每个属性结点有k个属性值,则有k n行记录,其中每行有k-1项(因为k项概率的总和为1,所以只需知道其中的k-1项,最后一项可以用减法求得),这样该条件概率表将一共有 (k-1) k n项记录。
    根据条件概率和贝叶斯网络结构,我们不仅可以由祖先接点推出后代的结果,还可以通过后代当中的证据结点来向前推出祖先取各种状态的概率。关于使用贝叶斯网络进行推理的过程,可以参考【1】。
贝叶斯网可以处理不完整和带有噪声的数据集,因此被日益广泛的应用于各种推理程序当中。同时由于可以方便的结合已有的先验知识,将已有的经验与数据集的潜在知识相结合,可以弥补相互的片面性与缺点,因此越来越受到研究者的喜欢。
0 请登录后投票
   发表时间:2004-09-30  
这个东西再扯下去该扯到机器学习了。
现在不是有那个什么增强学习和统计学习(SVM被炒得火热)么。
不过,企业应用中的规则引擎,如果扯到这个份上,也就是扯死了。这些都是研究者关心的东西,大规模应用还是太远。
0 请登录后投票
   发表时间:2004-09-30  
我想说的就是业务引擎是否需要复杂到人工智能的程度。
如果仅仅是描述一下业务逻辑,嘿嘿,我可不想用这么高级的东西。
0 请登录后投票
   发表时间:2004-09-30  
ajoo 写道
我想说的就是业务引擎是否需要复杂到人工智能的程度。
如果仅仅是描述一下业务逻辑,嘿嘿,我可不想用这么高级的东西。

有巴,以前看推理机的时候专门找到几个经典的案例。比如沃马特的业务系统分析出啤酒和尿布之间的某种关系。至于被噎死系统,现在外面用的还是蛮多的,倒是prolog这样的规则引擎倒是没啥人用。例如我们的office,google都用被噎死系统。
0 请登录后投票
   发表时间:2004-10-01  
office,google这类应用和企业里面的规则引擎的应用的一个非常大的区别是,企业应用的规则引擎必须是确定性的,关键业务系统中的规则不能存在不确定因素。至少现在还看不到自学习系统在企业业务支撑中的应用前景。
而数据挖掘之类的应用,能不能找到结果是可遇而不可求的。和google一样,都是属于可容忍的不确定性。
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics