CN102999324A - 一种Rete网络的建立方法及系统 - Google Patents
一种Rete网络的建立方法及系统 Download PDFInfo
- Publication number
- CN102999324A CN102999324A CN2011102776530A CN201110277653A CN102999324A CN 102999324 A CN102999324 A CN 102999324A CN 2011102776530 A CN2011102776530 A CN 2011102776530A CN 201110277653 A CN201110277653 A CN 201110277653A CN 102999324 A CN102999324 A CN 102999324A
- Authority
- CN
- China
- Prior art keywords
- node
- rete
- child nodes
- type
- present
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明公开了一种Rete网络建立方法及系统,该方法包括:构建当前规则的表达式树,确定该表达式树的根节点;将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;按照判断得到的属性状态对应构建当前节点所对应的Rete局部网络;创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。该方法及系统能够基于本发明实施例新提出的规则语言进行Rete网络的建立。
Description
技术领域
本发明涉及规则引擎技术,尤其涉及一种Rete网络的建立方法及系统。
背景技术
规则引擎技术已经具备了相当完备的理论基础,并发展出很多成熟的产品。众多领域都以规则引擎作为实现关键业务的支撑技术,如电信、银行、保险,等等。规则引擎技术所普遍采用的IF-THEN产生式规则语言是描述知识的一种最为简洁和直观的方法。而规则引擎技术则将这种知识的表示转换为系统可解释和执行的逻辑,从而实现数据、信息和知识的结合与统一。
一般的,在规则引擎中,将规则存储于预设的规则库中,将要匹配的事实对象存储于工作内存中,由模式匹配器调用规则库中指定规则集中的所有规则,将每个规则的产生式模式提取出来建立Rete网络,将需要匹配的事实对象传入该Rete网络中进行规则匹配,得到事实对象对应的规则。
上述规则是通过规则语言来进行描述的。虽然目前主流的规则引擎产品在人性化规则表示方面取得了不错的效果,但其内核都没有进行简化和改造。也就是说呈现给业务人员的规则语言都需要映射成底层的更加复杂的规则语言才能被执行。虽然从表面上看降低了开发和维护的复杂度,但增加了模式匹配器处理所述规则的复杂度,并且没有降低规则存储和管理的复杂度。而且根据实际的经验,业务人员很难一次性写出正确的规则,往往需要软件工程师对底层规则代码进行调试。
为了尽量提升规则的易编写性和易用性,规则引擎产品都提供了针对业务人员的规则编辑界面。这些界面可以在一定程度上引导用户编写出正确的规则,但仍然呈现出了一种自然语言和规则语言混杂的现象,使业务人员产生困惑。造成这种局面的根本原因就是没有从根本上对规则语言进行语法和语义层面的改造,且,规则引擎本身也没有对特定的语言结构进行专门的优化,所以执行性能并没有提升;进一步地,现有的Rete网络建立方法也是针对已有的规则语言建立对应的Rete网络。
发明内容
有鉴于此,本发明要解决的技术问题是,提供一种Rete网络建立方法及系统,基于一种新提出的规则语言进行Rete网络的建立。
为此,本发明实施例采用如下技术方案:
本发明实施例提供一种Rete网络建立方法,包括:
构建当前规则的表达式树,确定该表达式树的根节点;
将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;
如果两个孩子节点中至少有一个孩子节点既不是因素表达式节点也不是已处理节点,则以所述既不是因素表达式节点也不是已处理节点的孩子节点作为当前节点,返回所述判断步骤;
如果两个孩子节点都是因素表达式节点,则根据两个因素表达式节点构建当前节点所对应的Rete局部网络;如果两个孩子节点都是已处理节点,则根据两个已处理节点构建当前节点所对应的Rete局部网络;如果两个孩子节点一个是因素表达式节点,一个是已处理节点,则根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络;
创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。
所述根据两个因素表达式节点构建当前节点所对应的Rete局部网络包括:
确定两个孩子节点的条件因素所关联的模型;
判断两个孩子节点的条件因素均分别关联一个相同的模型,且当前节点的运算类型为AND运算时,以该相同的模型对应的模型节点作为入口节点构建1型局部网络,1型局部网络中的两个Alpha节点分别为两个孩子节点所对应的Rete节点;记录两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断两个孩子节点的条件因素分别关联一个不同的模型,且当前节点的运算类型为AND运算时,以两个模型所对应的模型节点作为入口节点构建2型AND局部网络,2型AND局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断两个孩子节点的条件因素均分别关联一个模型,且当前节点的运算类型为OR运算时,以两个模型所对应的模型节点作为入口节点构建2型OR局部网络,2型OR局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断两个孩子节点中一个孩子节点的条件因素关联一个模型,另一个孩子节点的条件因素关联两个模型时,以所述两个模型所对应的模型节点为入口节点构建2型SF局部网络,2型SF局部网络的汇集节点为关联两个模型的孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,其中的一个父节点为所述2型SF局部网络的汇集节点,另一个父节点为关联一个模型的孩子节点所对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断两个孩子节点的条件因素都关联两个模型时,分别以两个模型所对应的模型节点作为入口节点构建2型SF局部网络,构建的2型SF局部网络的汇集节点为相应孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,所述2型AND局部网络或2型OR局部网络的两个父节点分别为两个2型SF局部网络的汇集节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
根据已处理节点构建当前节点所对应的Rete局部网络包括:
判断当前节点的运算类型为AND运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型AND局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系;
判断当前节点的运算类型为OR运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型OR局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系。
根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络包括:
判断当前节点的运算类型为AND运算时,确定当前节点的两个孩子节点所关联的模型;
如果两个孩子节点所关联的模型相同,构建1型局部网络,1型局部网络中的一个Alpha节点为孩子节点中已处理节点所对应的Rete节点,另一Alpha节点为孩子节点中的因素表达式节点所对应的Rete节点;记录孩子节点中的因素表达式节点与Rete节点之间的对应关系,将当前节点标记为已处理;
如果两个孩子节点所关联的模型不同,构建2型AND局部网络,2型AND局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断当前节点表示OR运算时,构建2型OR局部网络,2型OR局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的因素表达式节点所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
本发明实施例还提供一种Rete网络建立系统,包括:
构建单元,用于构建当前规则的表达式树,确定该表达式树的根节点;
判断单元,用于将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;
第一处理单元,用于如果两个孩子节点中至少有一个孩子节点既不是因素表达式节点也不是已处理节点,则以所述既不是因素表达式节点也不是已处理节点的孩子节点作为当前节点,返回判断单元继续进行所述判断;
第二处理单元,用于如果两个孩子节点都是因素表达式节点,则根据两个因素表达式节点构建当前节点所对应的Rete局部网络;
第三处理单元,用于如果两个孩子节点都是已处理节点,则根据两个已处理节点构建当前节点所对应的Rete局部网络;
第四处理单元,用于如果两个孩子节点一个是因素表达式节点,一个是已处理节点,则根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络;
创建单元,用于创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。
第二处理单元包括:
第一确定子单元,用于确定两个孩子节点的条件因素所关联的模型;
第一处理子单元,用于判断两个孩子节点的条件因素均分别关联一个相同的模型,且当前节点的运算类型为AND运算时,以该相同的模型对应的模型节点作为入口节点构建1型局部网络,1型局部网络中的两个Alpha节点分别为两个孩子节点所对应的Rete节点;记录两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第二处理子单元,用于判断两个孩子节点的条件因素分别关联一个不同的模型,且当前节点的运算类型为AND运算时,以两个模型所对应的模型节点作为入口节点构建2型AND局部网络,2型AND局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第三处理子单元,用于判断两个孩子节点的条件因素均分别关联一个模型,且当前节点的运算类型为OR运算时,以两个模型所对应的模型节点作为入口节点构建2型OR局部网络,2型OR局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第四处理子单元,用于判断两个孩子节点中一个孩子节点的条件因素关联一个模型,另一个孩子节点的条件因素关联两个模型时,以所述两个模型所对应的模型节点为入口节点构建2型SF局部网络,2型SF局部网络的汇集节点为关联两个模型的孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,其中的一个父节点为所述2型SF局部网络的汇集节点,另一个父节点为关联一个模型的孩子节点所对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第五处理子单元,用于判断两个孩子节点的条件因素都关联两个模型时,分别以两个模型所对应的模型节点作为入口节点构建2型SF局部网络,构建的2型SF局部网络的汇集节点为相应孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,所述2型AND局部网络或2型OR局部网络的两个父节点分别为两个2型SF局部网络的汇集节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
第三处理单元包括:
第六处理子单元,用于判断当前节点的运算类型为AND运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型AND局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系;
第七处理子单元,用于判断当前节点的运算类型为OR运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型OR局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系。
第四处理单元包括:
第二确定子单元,用于判断当前节点的运算类型为AND运算时,确定当前节点的两个孩子节点所关联的模型;
第八处理子单元,用于如果第二确定子单元中确定的两个孩子节点所关联的模型相同,构建1型局部网络,1型局部网络中的一个Alpha节点为孩子节点中已处理节点所对应的Rete节点,另一Alpha节点为孩子节点中的因素表达式节点所对应的Rete节点;记录孩子节点中的因素表达式节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第九处理子单元,用于如果第二确定子单元中确定的两个孩子节点所关联的模型不同,构建2型AND局部网络,2型AND局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第十处理子单元,用于判断当前节点表示OR运算时,构建2型OR局部网络,2型OR局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的因素表达式节点所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
对于上述技术方案的技术效果分析如下:
构建当前规则的表达式树,确定该表达式树的根节点;将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;如果两个孩子节点中至少有一个孩子节点既不是因素表达式节点也不是已处理节点,则以所述既不是因素表达式节点也不是已处理节点的孩子节点作为当前节点,返回所述判断步骤;如果两个孩子节点都是因素表达式节点,则根据两个因素表达式节点构建当前节点所对应的Rete局部网络;如果两个孩子节点都是已处理节点,则根据两个已处理节点构建当前节点所对应的Rete局部网络;执行创建Rete网络的最终节点的步骤;如果两个孩子节点一个是因素表达式节点,一个是已处理节点,则根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络;创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。通过以上步骤的处理,实现了表达式树所对应的Rete网络的建立,也即实现了规则所对应的Rete网络的建立,进而实现了基于本发明实施例所提供的规则语言建立每一条规则对应的Rete网络。
附图说明
图1为本发明实施例Rete局部网络结构示意图;
图2为本发明实施例一种Rete网络建立方法流程示意图;
图3为本发明实施例另一种Rete网络建立方法流程示意图;
图3a为本发明实施例一种规则表达式树结构举例;
图4a~图4d为本发明实施例不同因素表达式树所构建的Rete局部网络结构举例;
图5为本发明实施例Rete网络建立系统结构示意图。
具体实施方式
为了便于理解本发明实施例的Rete网络建立方法和系统,首先对本发明实施例Rete网络建立方法和系统所基于的规则的语言语法进行介绍。
一、关于所述规则语言
1、语法规范
首先,说明本发明实际所基于的规则语言的语法结构定义。
以下为用BNF范式表述的一种上下文无关文法来描述规则语言的语法规范的举例:
1.<RuleExpression>::=[(]<FactorExpression>[)][<SimpleLogicSymbol>
[(]<RuleExpression>[)]]
2.<FactorExpression>::=<FactorIdentity>{<BooleanExpression>|
<NumericExpression>|<StringExpression>|<EnumExpression>|
<TemporalExpression>|<ObjectExpression>|<ConstantSetExpression>|
<ObjectSetExpression>}
3.<FactorIdentity>::={<ModelName>|<FactorIdentity>}::<FactorName>
4.<BooleanExpression>::={==|!=}{<BooleanConstant>|<FactorIdentity>}
5.<NumericExpression>::={==|!=|>|<|>=|<=}{<NumericLiteral>|
<FactorIdentity>}
6.<StringExpression>::={==|!=}{<CharacterList>|<FactorIdentity>}
7.<EnumExpression>::={==|!=}{<EnumConstant>|<FactorIdentity>}
8.<TemporalExpression>::={==|!=|>|<}{<TemporalLiteral>|<FactorIdentity>}
9.<ObjectExpression>::={meet|not meet}<RuleExpression>
10.<ConstantSetExpression>::={contain|not contain}{<NumericLiteral>...|
<CharacterList>...|<TemporalLiteral>...}
11.<ObjectSetExpression>::={contain|not contain|for all}<ObjectExpression>
12.<SimpleLogicSymbol>::=AND|OR
13.<BooleanConstant>::=TRUE|FALSE
14.<NumericLiteral>::=<IntegerLiteral>|<DecimalLiteral>
15.<IntegerLiteral>::=[+|-]<WholeNumber>
16.<DecimalLiteral>::=[+|-]<WholeNumber>[.<WholeNumber>]|[+|
-]<WholeNumber>.|[+|-].<WholeNumber>
17.<TemporalLiteral>::=<DateLiteral>|<TimeLiteral>
18.<DateLiteral>::=‘<years>-<months>-<days>’
19.<TimeLiteral>::=‘<hours>:<minutes>:<seconds>’
对于以上的规则语言所包含的符号的意义说明如下:“<”和“>”以及中间的标识符组成了规则语言的某一个语法元素。符号“::=”表示左部由右部定义和细化。“[]”表示中间的内容是可选的,即可以有也可以没有;而“{}”表示中间的内容是必选的;此外,这两种括号还限定了语法结构的结合性。“|”表示选择,即由“|”分隔的多个元素是多选一的关系。其它元素则是直接显示在语言中的字符或字符串。
上面定义了规则语言的条件部分,即产生式的左部(LHS),产生式的右部(RHS)并不在本发明实施例所考虑的范围之内,因为真正执行规则模式匹配的时候都是针对LHS进行的,RHS仅仅是在规则已经成功匹配了才执行。这是产生式系统的重要特征,也是研究产生式规则语言的主要思路。表4-1给出了几个遵循该语法规范的业务规则示例。
表1规则语言示例及相应的业务含义
2、语义规范
基于1中给出的语法规范,进一步限定规则语言的执行语义,如下所列:
1.规则语言的唯一起点为<RuleExpression>。
2.<RuleExpression>是由逻辑连接符(AND和OR)连接<FactorExpression>而成的规则表达式。AND和OR的执行语义与普遍规定的布尔运算符一致,表示“与”和“或”。
3.<FactorExpression>是由<FactorIdentity>引导的条件因素表达式。
4.<FactorIdentity>是由模型名称引导的,后跟因素名称(可多级)的因素标识符。
5.条件因素表达式具有多种类型,包括布尔表达式、数字表达式、字符串表达式、枚举表达式、时间表达式、对象表达式、常量集合表达式和对象集合表达式这8种类型。
6.简单类型表达式(即布尔表达式、数字表达式、字符串表达式、枚举表达式和时间表达式)既可以和相应类型的常量进行比较,也可以和因素标识所对应的值进行比较(需要保证类型相同)。
7.条件因素表达式的类型是由条件因素所属模型的运行平台(如Java的JRE、.NET的CLR等)映射而来。不同的运行平台会定义不同的类型系统,但都需要能够唯一地映射到规则语言所支持的7种因素类型中。
8.针对对象表达式,其语义是:指定的条件因素是否满足某一子规则表达式所表述的规则。这里要求子规则中所有条件因素所属模型的运行平台类型与当前对象表达式中条件因素的运行平台类型一致。
9.针对常量集合表达式,其语义是:指定的条件因素是否包含列表中的常量值。常量值的类型可以是数字、字符串和日期时间。
10.针对对象集合表达式,其语义是:指定的条件因素是否包含满足某一子规则表达式所表述规则的元素,或对于集合包含的所有元素都满足某一个子规则表达式所表述的规则。这里要求子规则中所有条件因素所属模型的运行平台类型与当前集合表达式中条件因素的运行平台类型一致。
11.规则表达式整体上应满足括号的匹配规则。
3、以上的规则语言可以通过为业务人员提供定义模板的方式,由业务人员进行规则语言的输入,具体的,可以提供以下两种界面分别实现条件因素和规则的定义:
4.1条件因素浏览面板:通过扁平状和树状两种视图浏览条件因素的组织和逻辑结构。让业务人员清楚地理解有哪些条件因素可用于规则定义,以及这些因素的含义和相互关系。这是正确地进行规则定义的最大前提。如果业务人员不能正确理解这些因素,也就无从谈起如何正确地定义规则。
4.2规则定义面板:用于定义规则的主面板,通过动态生成UI控件的方式提高规则定义的灵活性,同时根据因素类型、运算符类型、规则结构等上下文信息约束控件的类型和取值,可以有效保证规则定义的正确性。
二、关于Rete网络
Rete网络主要由两类节点组成,一类是1-input节点(又称为Alpha节点),有一个唯一的输入端;另一类是2-input节点(又称为Beta节点),有两个输入端。1-input节点用于条件因素内的检测,即因素与常量的比较检测,2-input节点用于跨条件因素的检测,即因素与因素的比较检测。另外还有两类特殊节点,一是入口节点,即Rete网络的起点,每个入口节点表示一种模式所属的模型;一是最终节点,即Rete网络的终点,每个最终节点表示一条规则。Rete网络的前半部分是由1-input节点组成的Alpha网络,后半部分是由2-input节点组成的Beta网络。
本发明实施例的所述规则语言与传统的产生式规则语言(如OPS5)相比,在如下几方面存在差异:
1、因素表达式之间是用AND或OR连接,并且使用括号限定结合性。传统的产生式规则语言的模式之间在逻辑上都是AND的关系,且每个模式中都包含一个或多个因素表达式。
2、存在嵌套规则的语法,如对象表达式和集合表达式。传统的产生式规则不存在这种语法。
由于以上差异性的存在,需要对对传统Rete算法中的Alpha节点和Beta节点进行扩展:
简单条件因素Alpha节点,记为SF-Alpha节点。这类节点与传统Rete网络构建方法中的Alpha节点的作用一样,就是用于计算最基本的因素表达式;
嵌套网络条件因素Alpha节点,记为NF-Alpha节点。这类节点会引用一个子Rete网络,用于对象因素表达式和集合因素表达式对子规则的验证;
简单条件因素Beta节点,记为SF-Beta节点。这类节点同传统Rete网络构建方法中的Beta节点的作用一样,用于因素和因素的比较检测;
AND运算Beta节点,记为AND-Beta节点。这类节点表示用于与运算的中间节点;
OR运算Beta节点,记为OR-Beta节点。这类节点表示用于或运算的中间节点。
以上这5种节点在Rete网络中可以构成几种不同的局部组织形式。每一种组织形式可以看成是一种局部的网络单元。将这些局部的组织形式分析清楚,有助于我们设计构建扩展Rete网络的算法。图1展示了在Rete网络中存在的所有局部网络结构的分类,其中:
1型局部网络:由两个Alpha节点(可以是SF-Alpha节点,也可以是NF-Alpha节点)串联而成的局部网络。该网络具备两个重要特征,一是这两个Alpha节点来自于同一个入口节点,即它们有共同的模型标识;二是WME需要在两个节点上都通过测试才能通过此网络,因此两个Alpha节点之间是AND的逻辑关系。
2型SF局部网络:两个入口节点(E-Node)和一个SF-Beta节点组成的局部网络。这是专门针对SF-Beta节点形成的网络形态。由于SF-Beta节点与两个不同的模型相关,所以必然要从两个入口节点汇集到SF-Beta节点。
2型AND局部网络:两个节点汇集到一个AND-Beta节点组成的局部网络。这两个节点之间是AND的逻辑运算关系。
2型OR局部网络:两个节点汇集到一个OR-Beta节点组成的局部网络。这两个节点之间是OR的逻辑运算关系。
基于以上的分析和如下的算法可以构建出Rete网络。因为本发明实施例所设计的规则语言的基本结构中AND和OR运算符是同一级别的运算符,且存在括号,所以可以依据括号定义的运算优先顺序将初始规则构造成一颗表达式树,这样就可以去掉规则中的括号,且不打破原有的运算优先级。如果规则的某一部分或整体上没有括号,那么这部分就遵循从左往右的计算顺序。这样看来,构造的表达式树是一棵二叉树。二叉树的叶子节点就是条件因素表达式,中间节点就是AND或OR运算符。对于嵌套规则的情况,规则表达式树的叶子节点会引用一个子表达式树。
关键数据结构定义:
以下,结合附图详细说明本发明实施例Rete网络建立方法及系统的实现。
图2为本发明实施例Rete网络建立方法流程示意图,如图2所示,该方法包括:
步骤201:构建当前规则的表达式树,确定该表达式树的根节点;
步骤202:将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;
如果两个孩子节点中至少有一个孩子节点既不是因素表达式节点也不是已处理节点,则以所述既不是因素表达式节点也不是已处理节点的孩子节点作为当前节点,返回所述判断步骤;
如果两个孩子节点都是因素表达式节点,则根据两个因素表达式节点构建当前节点所对应的Rete局部网络;如果两个孩子节点都是已处理节点,则根据两个已处理节点构建当前节点所对应的Rete局部网络;执行创建Rete网络的最终节点的步骤;如果两个孩子节点一个是因素表达式节点,一个是已处理节点,则根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络;执行步骤203。
步骤203:创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。
图2所示的本发明实施例Rete网络建立方法,根据当前节点的两个孩子节点的属性状态,对应建立Rete局部网络,通过循环处理,实现了表达式树所对应的Rete网络的建立,也即实现了规则所对应的Rete网络的建立,进而实现了基于本发明实施例所提供的规则语言建立每一条规则对应的Rete网络。
在图2的基础上,通过图3对本发明实施例Rete网络建立方法进行更为详细的说明。如图3所示,该方法包括:
步骤301:构建规则的表达式树,确定该表达式树的根节点。
其中,本发明实施例所述规则语言的基本结构中AND和OR运算符是同一级别的运算符,且存在括号,所以可以依据括号定义的运算优先顺序将规则构造成一棵表达式树,这样就可以去掉规则中的括号,且不打破原有的运算优先级。如果规则的某一部分或整体上没有括号,那么这部分就遵循从左往右的计算顺序。这里,构造的表达式树是一棵二叉树,二叉树的叶子节点就是条件因素表达式,中间节点就是AND或OR运算符。对于嵌套规则的情况,规则的表达式树的叶子节点会引用一个子表达式树。
其中,当本步骤中处理的规则中没有括号时,最后一个运算符即为该表达式树的根节点。
例如,所述规则如下:
该规则的业务含义为:
如果订单的金额大于等于50元/月或者(订购时长大于12个月并且订单金额大于等于30元/月,小于50元/月)或者(订购时长大于24个月并且订单金额大于等于15元/月,小于30元/月)
那么打7.5折优惠;
则,基于该规则所构建的表达式树如图3a所示,其中,根节点即为最上部的OR节点。Exp1:Order::price>=50;Exp2:Order::validPeriod>12;Exp3:Order::price>=30;Exp4:Order::price<50;Exp5:Order::validPeriod>24;Exp6:Order::price>=15;Exp7:Order::price<30。
步骤302:以根节点作为当前节点,判断当前节点的两个孩子节点的属性状态,如果两个孩子节点中至少有一个孩子节点既不是因素表达式节点,也不是已处理节点,则以所述既不是因素表达式节点也不是已处理节点的孩子节点作为当前节点,返回步骤302的所述判断步骤;如果两个孩子节点都是因素表达式节点,执行步骤303;如果两个孩子节点都是已处理节点,执行步骤304;如果一个孩子节点是因素表达式节点,另一个孩子节点是已处理节点,则执行步骤305;
其中,如果两个孩子节点都既不是因素表达式节点,也不是已处理节点,则需要分别以两个孩子节点作为当前节点,返回步骤302;也即,两个孩子节点都需要进行处理。这里,可以先将其中的一个孩子节点作为当前节点进行该孩子节点对应分支的处理,处理完成后,再以另外一个孩子节点作为当前节点进行对应分支的处理。
步骤303:根据两个因素表达式节点构建当前节点所对应的Rete局部网络;执行步骤306。
本步骤的实现可以包括:
A1:确定两个孩子节点的条件因素所关联的模型;
在实际应用中,可以预先设定各种条件因素与模型之间的对应关系,从而本步骤中可以直接根据孩子节点所包含的条件因素查找到条件因素所关联的模型。
所述模型是指:带有属性的类型、概念或数据实体,例如前述规则举例中的订单Order即为一个模型。
所述条件因素是指:参与规则运算的院子变量,如订单价格,所述条件因素可以直接对应于模型的属性,例如Order的price属性。
A2:根据孩子节点的条件因素所关联的模型数量以及相互关系对应构建Rete局部网络。该步骤具体包括:
判断两个孩子节点的条件因素均分别关联一个相同的模型,且当前节点的运算类型为AND运算时,以该相同的模型对应的模型节点作为入口节点构建1型局部网络,1型局部网络中的两个Alpha节点分别为两个孩子节点所对应的Rete节点;记录两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;例如在图4a中的左图中给出了表达式树的结构,包括:根节点为AND运算,两个孩子节点Exp1和Exp2,两个孩子节点所关联的模型均为m1;则如图4a的右图中示出了依照该表达式树结构所建立的1型局部网络结构,其中,模型m1所对应的模型节点作为1型局部网络的入口节点,而1型局部网络中的Alpha1和Alpha2节点分别为当前节点的两个孩子节点所对应的Rete节点。这里的记录两个孩子节点与Rete节点之间的对应关系,也即是记录上述的表达式树节点与所创建的Rete网络中的Rete节点之间的对应关系。这里以及后续步骤中记录两个孩子节点与Rete节点之间的对应关系,是为了在后续建立其他表达式树节点所对应的Rete局部网络时,根据表达式树节点之间的关系确定所创建的各个Rete局部网络之间的关系,例如在后续的步骤304和305中即需要根据已处理的节点所对应的Rete节点进一步创建Rete局部网络,从而通过不断的创建构建出完整的Rete网络。另外,本发明实施例中在记录所述对应关系时,可以通过将表达式树节点所对应的Rete节点的地址或标识写入该表达式树节点的关键数据结构的ReteNode属性实现。
或者,判断两个孩子节点的条件因素分别关联一个不同的模型,且当前节点的运算类型为AND运算时,以两个模型所对应的模型节点作为入口节点构建2型AND局部网络,2型AND局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;例如在图4b中的左图中给出了表达式树的结构,包括:根节点为AND运算,两个孩子节点Exp1和Exp2,两个孩子节点所关联的模型分别为m1和m2;则如图4a的右图中示出了依照该表达式树结构所建立的1型局部网络结构,其中,模型m1和m2所对应的模型节点分别作为1型局部网络的入口节点,而1型局部网络中的一个父节点Alpha1作为孩子节点Exp1所对应的Rete节点,另一个父节点Alpha2节点为孩子节点Exp2所对应的Rete节点,而汇集节点AND-Beta为当前节点所对应的Rete节点。
判断两个孩子节点的条件因素均分别关联一个模型,且当前节点的运算类型为OR运算时,以两个模型所对应的模型节点作为入口节点构建2型OR局部网络,2型OR局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;这里创建2型OR局部网络的过程与前述创建2型AND局部网络的过程类似,不再举实例赘述,可参照图4b中的实例,区别仅在于汇集节点改变为OR-Beta。
判断两个孩子节点中一个孩子节点的条件因素关联一个模型,另一个孩子节点的条件因素关联两个模型时,以所述两个模型所对应的模型节点为入口节点构建2型SF局部网络,2型SF局部网络的汇集节点为关联两个模型的孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,其中的一个父节点为所述2型SF局部网络的汇集节点,另一个父节点为关联一个模型的孩子节点所对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;例如在图4c中,左图为表达式树部分结构,其中当前节点的运算类型为OR,两个孩子节点中,孩子节点Exp1关联的模型为m1,孩子节点Exp2关联的模型为m1和m2;而右图中给出了对应的Rete局部网络,其中,先以孩子节点Exp2所关联的模型m1和m2对应的模型节点作为入口节点构建了2型SF局部网络,其中的汇集节点SF-Beta为孩子节点Exp2所对应的Rete节点;之后,根据当前节点的运算类型OR构建了2型OR局部网络,其中,一个父节点为2型SF局部网络的汇集节点SF-Beta,也即为孩子节点Exp2所对应的Rete节点,另一个父节点Alpha1为孩子节点Exp1所对应的Rete节点,其孩子节点Exp1所关联的模型m1所对应的模型节点也作为父节点Alpha1的入口节点;而2型OR局部网络的汇集节点OR-Beta为当前节点所对应的Rete节点。另外,如图4d中给出了当前节点的运算类型为AND时所对应建立的Rete局部网络;而图4d与图4c的另一区别在于:图4c中两个孩子节点所关联的模型中有一个相同的模型m1,此时,模型m1所对应的模型节点同时作为父节点Alpha1和SF-Beta的入口节点,而图4d中,两个孩子节点所关联的模型互不相同,因此,模型m1所对应的模型节点作为父节点Alpha1的入口节点,而模型m2和m3所对应的模型节点作为对应的父节点SF-Beta2的入口节点。
判断两个孩子节点的条件因素都关联两个模型时,分别以两个模型所对应的模型节点作为入口节点构建2型SF局部网络,构建的2型SF局部网络的汇集节点为相应孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,所述2型AND局部网络或2型OR局部网络的两个父节点分别为两个2型SF局部网络的汇集节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。这种情况下所构建的Rete局部网络与图4c或图4d中相似,区别仅在于孩子节点Exp1所对应的Rete节点为另一个2型SF局部网络的汇集节点,该2型SF局部网络的两个入口节点为孩子节点Exp1所关联的两个模型所对应的模型节点,从而本步骤中构建的Rete局部网络的两个父节点都是2型SF局部网络的汇集节点。
步骤304:根据两个已处理节点构建当前节点所对应的Rete局部网络,执行步骤306。
本步骤的实现可以包括:
判断当前节点的运算类型为AND运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型AND局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系;本步骤中,所构建的2型AND局部网络的两个父节点是已经构建的Rete局部网络中的两个Rete节点,通过2型AND局部网络的汇集节点将已经建立的两个Rete节点联系起来,该2型AND局部网络的汇集节点AND-Beta也即为当前节点所对应的Rete节点。
判断当前节点的运算类型为OR运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型OR局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系。本步骤中,所构建的2型OR局部网络的两个父节点是已经构建的Rete局部网络中的两个Rete节点,通过2型OR局部网络的汇集节点OR-Beta将已经建立的两个Rete节点联系起来,该2型AND局部网络的汇集节点OR-Beta也即为当前节点所对应的Rete节点。
步骤305:根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络;执行步骤306。
本步骤的实现可以包括:
判断当前节点的运算类型为AND运算时,确定当前节点的两个孩子节点所关联的模型;
如果两个孩子节点所关联的模型相同,构建1型局部网络,1型局部网络中的一个Alpha节点为孩子节点中已处理节点所对应的Rete节点,另一Alpha节点为孩子节点中的因素表达式节点所对应的Rete节点;记录孩子节点中的因素表达式节点与Rete节点之间的对应关系,将当前节点标记为已处理;
如果两个孩子节点所关联的模型不同,构建2型AND局部网络,2型AND局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断当前节点表示OR运算时,构建2型OR局部网络,2型OR局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的因素表达式节点所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
与上述的Rete网络建立方法相对应的,本发明实施例还提供一种Rete网络建立系统,如图5所示,包括:
构建单元510,用于构建当前规则的表达式树,确定该表达式树的根节点;
判断单元520,用于将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;
第一处理单元530,用于如果两个孩子节点中至少有一个孩子节点既不是因素表达式节点也不是已处理节点,则以所述既不是因素表达式节点也不是已处理节点的孩子节点作为当前节点,返回判断单元继续进行所述判断;
第二处理单元540,用于如果两个孩子节点都是因素表达式节点,则根据两个因素表达式节点构建当前节点所对应的Rete局部网络;
第三处理单元550,用于如果两个孩子节点都是已处理节点,则根据两个已处理节点构建当前节点所对应的Rete局部网络;
第四处理单元560,用于如果两个孩子节点一个是因素表达式节点,一个是已处理节点,则根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络;
创建单元570,用于创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。
优选地,第二处理单元540可以包括:
第一确定子单元,用于确定两个孩子节点的条件因素所关联的模型;
第一处理子单元,用于判断两个孩子节点的条件因素均分别关联一个相同的模型,且当前节点的运算类型为AND运算时,以该相同的模型对应的模型节点作为入口节点构建1型局部网络,1型局部网络中的两个Alpha节点分别为两个孩子节点所对应的Rete节点;记录两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第二处理子单元,用于判断两个孩子节点的条件因素分别关联一个不同的模型,且当前节点的运算类型为AND运算时,以两个模型所对应的模型节点作为入口节点构建2型AND局部网络,2型AND局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第三处理子单元,用于判断两个孩子节点的条件因素均分别关联一个模型,且当前节点的运算类型为OR运算时,以两个模型所对应的模型节点作为入口节点构建2型OR局部网络,2型OR局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第四处理子单元,用于判断两个孩子节点中一个孩子节点的条件因素关联一个模型,另一个孩子节点的条件因素关联两个模型时,以所述两个模型所对应的模型节点为入口节点构建2型SF局部网络,2型SF局部网络的汇集节点为关联两个模型的孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,其中的一个父节点为所述2型SF局部网络的汇集节点,另一个父节点为关联一个模型的孩子节点所对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第五处理子单元,用于判断两个孩子节点的条件因素都关联两个模型时,分别以两个模型所对应的模型节点作为入口节点构建2型SF局部网络,构建的2型SF局部网络的汇集节点为相应孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,所述2型AND局部网络或2型OR局部网络的两个父节点分别为两个2型SF局部网络的汇集节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
优选地,第三处理单元550可以包括:
第六处理子单元,用于判断当前节点的运算类型为AND运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型AND局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系;
第七处理子单元,用于判断当前节点的运算类型为OR运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型OR局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系。
优选地,第四处理单元560可以包括:
第二确定子单元,用于判断当前节点的运算类型为AND运算时,确定当前节点的两个孩子节点所关联的模型;
第八处理子单元,用于如果第二确定子单元中确定的两个孩子节点所关联的模型相同,构建1型局部网络,1型局部网络中的一个Alpha节点为孩子节点中已处理节点所对应的Rete节点,另一Alpha节点为孩子节点中的因素表达式节点所对应的Rete节点;记录孩子节点中的因素表达式节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第九处理子单元,用于如果第二确定子单元中确定的两个孩子节点所关联的模型不同,构建2型AND局部网络,2型AND局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第十处理子单元,用于判断当前节点表示OR运算时,构建2型OR局部网络,2型OR局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的因素表达式节点所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
在图5所示的系统中,构建单元构建当前规则的表达式树,确定该表达式树的根节点;判断单元将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;第一处理单元至第四处理单元根据判断单元的判断结果相应构建当前节点对应的Rete局部网络,最后由创建单元创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。通过以上处理,实现了表达式树所对应的Rete网络的建立,也即实现了规则所对应的Rete网络的建立,进而实现了基于本发明实施例所提供的规则语言建立每一条规则对应的Rete网络。
本领域普通技术人员可以理解,实现上述实施例的方法的过程可以通过程序指令相关的硬件来完成,所述的程序可以存储于可读取存储介质中,该程序在执行时执行上述方法中的对应步骤。所述的存储介质可以如:ROM/RAM、磁碟、光盘等。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种Rete网络建立方法,其特征在于,包括:
构建当前规则的表达式树,确定该表达式树的根节点;
将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;
如果两个孩子节点中至少有一个孩子节点既不是因素表达式节点也不是已处理节点,则以所述既不是因素表达式节点也不是已处理节点的孩子节点作为当前节点,返回所述判断步骤;
如果两个孩子节点都是因素表达式节点,则根据两个因素表达式节点构建当前节点所对应的Rete局部网络;如果两个孩子节点都是已处理节点,则根据两个已处理节点构建当前节点所对应的Rete局部网络;如果两个孩子节点一个是因素表达式节点,一个是已处理节点,则根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络;
创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。
2.根据权利要求1所述的方法,其特征在于,所述根据两个因素表达式节点构建当前节点所对应的Rete局部网络包括:
确定两个孩子节点的条件因素所关联的模型;
判断两个孩子节点的条件因素均分别关联一个相同的模型,且当前节点的运算类型为AND运算时,以该相同的模型对应的模型节点作为入口节点构建1型局部网络,1型局部网络中的两个Alpha节点分别为两个孩子节点所对应的Rete节点;记录两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断两个孩子节点的条件因素分别关联一个不同的模型,且当前节点的运算类型为AND运算时,以两个模型所对应的模型节点作为入口节点构建2型AND局部网络,2型AND局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断两个孩子节点的条件因素均分别关联一个模型,且当前节点的运算类型为OR运算时,以两个模型所对应的模型节点作为入口节点构建2型OR局部网络,2型OR局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断两个孩子节点中一个孩子节点的条件因素关联一个模型,另一个孩子节点的条件因素关联两个模型时,以所述两个模型所对应的模型节点为入口节点构建2型SF局部网络,2型SF局部网络的汇集节点为关联两个模型的孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,其中的一个父节点为所述2型SF局部网络的汇集节点,另一个父节点为关联一个模型的孩子节点所对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断两个孩子节点的条件因素都关联两个模型时,分别以两个模型所对应的模型节点作为入口节点构建2型SF局部网络,构建的2型SF局部网络的汇集节点为相应孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,所述2型AND局部网络或2型OR局部网络的两个父节点分别为两个2型SF局部网络的汇集节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
3.根据权利要求1或2所述的方法,其特征在于,根据已处理节点构建当前节点所对应的Rete局部网络包括:
判断当前节点的运算类型为AND运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型AND局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系;
判断当前节点的运算类型为OR运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型OR局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系。
4.根据权利要求3所述的方法,其特征在于,根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络包括:
判断当前节点的运算类型为AND运算时,确定当前节点的两个孩子节点所关联的模型;
如果两个孩子节点所关联的模型相同,构建1型局部网络,1型局部网络中的一个Alpha节点为孩子节点中已处理节点所对应的Rete节点,另一Alpha节点为孩子节点中的因素表达式节点所对应的Rete节点;记录孩子节点中的因素表达式节点与Rete节点之间的对应关系,将当前节点标记为已处理;
如果两个孩子节点所关联的模型不同,构建2型AND局部网络,2型AND局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
判断当前节点表示OR运算时,构建2型OR局部网络,2型OR局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的因素表达式节点所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
5.一种Rete网络建立系统,其特征在于,包括:
构建单元,用于构建当前规则的表达式树,确定该表达式树的根节点;
判断单元,用于将所述根节点作为当前节点,判断当前节点的两个孩子节点的属性状态;
第一处理单元,用于如果两个孩子节点中至少有一个孩子节点既不是因素表达式节点也不是已处理节点,则以所述既不是因素表达式节点也不是已处理节点的孩子节点作为当前节点,返回判断单元继续进行所述判断;
第二处理单元,用于如果两个孩子节点都是因素表达式节点,则根据两个因素表达式节点构建当前节点所对应的Rete局部网络;
第三处理单元,用于如果两个孩子节点都是已处理节点,则根据两个已处理节点构建当前节点所对应的Rete局部网络;
第四处理单元,用于如果两个孩子节点一个是因素表达式节点,一个是已处理节点,则根据因素表示式节点以及已处理节点构建当前节点所对应的Rete局部网络;
创建单元,用于创建Rete网络的最终节点,将最终节点作为当前节点所对应的Rete节点的孩子节点。
6.根据权利要求5所述的系统,其特征在于,第二处理单元包括:
第一确定子单元,用于确定两个孩子节点的条件因素所关联的模型;
第一处理子单元,用于判断两个孩子节点的条件因素均分别关联一个相同的模型,且当前节点的运算类型为AND运算时,以该相同的模型对应的模型节点作为入口节点构建1型局部网络,1型局部网络中的两个Alpha节点分别为两个孩子节点所对应的Rete节点;记录两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第二处理子单元,用于判断两个孩子节点的条件因素分别关联一个不同的模型,且当前节点的运算类型为AND运算时,以两个模型所对应的模型节点作为入口节点构建2型AND局部网络,2型AND局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第三处理子单元,用于判断两个孩子节点的条件因素均分别关联一个模型,且当前节点的运算类型为OR运算时,以两个模型所对应的模型节点作为入口节点构建2型OR局部网络,2型OR局部网络中的模型节点所对应的父节点为该模型节点关联的孩子节点所对应的Rete节点,汇集节点为当前节点对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第四处理子单元,用于判断两个孩子节点中一个孩子节点的条件因素关联一个模型,另一个孩子节点的条件因素关联两个模型时,以所述两个模型所对应的模型节点为入口节点构建2型SF局部网络,2型SF局部网络的汇集节点为关联两个模型的孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,其中的一个父节点为所述2型SF局部网络的汇集节点,另一个父节点为关联一个模型的孩子节点所对应的Rete节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第五处理子单元,用于判断两个孩子节点的条件因素都关联两个模型时,分别以两个模型所对应的模型节点作为入口节点构建2型SF局部网络,构建的2型SF局部网络的汇集节点为相应孩子节点所对应的Rete节点;根据当前节点的运算类型构建相应的2型AND局部网络或2型OR局部网络,所述2型AND局部网络或2型OR局部网络的两个父节点分别为两个2型SF局部网络的汇集节点;记录当前节点以及两个孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
7.根据权利要求5或6所述的系统,其特征在于,第三处理单元包括:
第六处理子单元,用于判断当前节点的运算类型为AND运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型AND局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系;
第七处理子单元,用于判断当前节点的运算类型为OR运算时,以当前节点的两个孩子节点所对应的Rete节点作为父节点,构建2型OR局部网络,2型AND局部网络的汇集节点为当前节点所对应的Rete节点;记录当前节点与Rete节点之间的对应关系。
8.根据权利要求7所述的系统,其特征在于,第四处理单元包括:
第二确定子单元,用于判断当前节点的运算类型为AND运算时,确定当前节点的两个孩子节点所关联的模型;
第八处理子单元,用于如果第二确定子单元中确定的两个孩子节点所关联的模型相同,构建1型局部网络,1型局部网络中的一个Alpha节点为孩子节点中已处理节点所对应的Rete节点,另一Alpha节点为孩子节点中的因素表达式节点所对应的Rete节点;记录孩子节点中的因素表达式节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第九处理子单元,用于如果第二确定子单元中确定的两个孩子节点所关联的模型不同,构建2型AND局部网络,2型AND局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理;
第十处理子单元,用于判断当前节点表示OR运算时,构建2型OR局部网络,2型OR局部网络中的一个父节点为孩子节点中的已处理节点所对应的Rete节点,另一个父节点为孩子节点中的因素表达式节点所对应的Rete节点,汇集节点为当前节点所对应的Rete节点;记录当前节点以及属性为因素表达式节点的孩子节点与Rete节点之间的对应关系,将当前节点标记为已处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110277653.0A CN102999324B (zh) | 2011-09-19 | 2011-09-19 | 一种Rete网络的建立方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110277653.0A CN102999324B (zh) | 2011-09-19 | 2011-09-19 | 一种Rete网络的建立方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102999324A true CN102999324A (zh) | 2013-03-27 |
CN102999324B CN102999324B (zh) | 2018-05-18 |
Family
ID=47927934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110277653.0A Active CN102999324B (zh) | 2011-09-19 | 2011-09-19 | 一种Rete网络的建立方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102999324B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679790A (zh) * | 2013-12-03 | 2015-06-03 | 富士通株式会社 | 分布式规则引擎系统、构造方法和执行规则处理的方法 |
CN108399066A (zh) * | 2018-01-25 | 2018-08-14 | 链家网(北京)科技有限公司 | 一种规则引擎实现方法及装置 |
CN107247588B (zh) * | 2017-05-26 | 2020-10-23 | 电子科技大学 | 一种基于约束频度的规则引擎优化方法 |
WO2020215574A1 (zh) * | 2019-04-22 | 2020-10-29 | 平安科技(深圳)有限公司 | 自动调整rete网络的方法、装置、计算机设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101409885A (zh) * | 2008-11-18 | 2009-04-15 | 中国移动通信集团福建有限公司 | 基于规则引擎的异常指标分析方法 |
CN102170360A (zh) * | 2011-04-19 | 2011-08-31 | 北京神州数码思特奇信息技术股份有限公司 | 一种规则引擎的模式匹配方法和rete网络 |
-
2011
- 2011-09-19 CN CN201110277653.0A patent/CN102999324B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101409885A (zh) * | 2008-11-18 | 2009-04-15 | 中国移动通信集团福建有限公司 | 基于规则引擎的异常指标分析方法 |
CN102170360A (zh) * | 2011-04-19 | 2011-08-31 | 北京神州数码思特奇信息技术股份有限公司 | 一种规则引擎的模式匹配方法和rete网络 |
Non-Patent Citations (3)
Title |
---|
庞伟正等: "一种规则引擎的实现方法", 《哈尔滨工程大学学报》 * |
方应飞: "基于规则引擎的自定义查询系统的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
陈飞: "业务规则管理系统的研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679790A (zh) * | 2013-12-03 | 2015-06-03 | 富士通株式会社 | 分布式规则引擎系统、构造方法和执行规则处理的方法 |
CN104679790B (zh) * | 2013-12-03 | 2018-01-16 | 富士通株式会社 | 分布式规则引擎系统、构造方法和执行规则处理的方法 |
CN107247588B (zh) * | 2017-05-26 | 2020-10-23 | 电子科技大学 | 一种基于约束频度的规则引擎优化方法 |
CN108399066A (zh) * | 2018-01-25 | 2018-08-14 | 链家网(北京)科技有限公司 | 一种规则引擎实现方法及装置 |
WO2020215574A1 (zh) * | 2019-04-22 | 2020-10-29 | 平安科技(深圳)有限公司 | 自动调整rete网络的方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102999324B (zh) | 2018-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
Lara et al. | AToM 3: A Tool for Multi-formalism and Meta-modelling | |
Li et al. | A formal semantics of UML sequence diagram | |
Chok et al. | Automatic construction of user interfaces from constraint multiset grammars | |
Campos et al. | Formally verifying interactive systems: A review | |
Li et al. | PASS: string solving with parameterized array and interval automaton | |
CN106598579A (zh) | 区块链上集成动态类型编程语言方法和装置 | |
CN107844093B (zh) | 一种基于元件模型的自定义功能块及组态封装方法 | |
US20120054590A1 (en) | Spreadsheet-based graphical user interface for dynamic system modeling and simulation | |
CN101601012A (zh) | 具有场景支持的面向生成器图形的编程框架 | |
CN111880784B (zh) | 一种面向simscript语言的离散事件仿真图形化建模方法 | |
Biermann et al. | Lifting parallel graph transformation concepts to model transformation based on the eclipse modeling framework | |
De Lara et al. | A-posteriori typing for model-driven engineering | |
CN102999324A (zh) | 一种Rete网络的建立方法及系统 | |
Heinen et al. | Juggrnaut: Graph grammar abstraction for unbounded heap structures | |
Le et al. | Domain-driven design using meta-attributes: A DSL-based approach | |
CN104391731A (zh) | 一种基于c#的与数据类型无关的编辑方法 | |
Michel et al. | An SMT-based approach to automated configuration | |
JPWO2002097727A1 (ja) | 知識の自動生成方法、知識の自動生成システム、知識の自動生成プログラム、自動設計方法及び自動設計システム | |
Jaghoori et al. | Modere: The model-checking engine of Rebeca | |
Zhao et al. | Pattern-based design evolution using graph transformation | |
Golas | Analysis and correctness of algebraic graph and model transformations | |
Cansell et al. | Predicate diagrams for the verification of reactive systems | |
Zhao et al. | Design pattern evolution and verification using graph transformation | |
Kehrer et al. | An EMOF-compliant abstract syntax for bigraphs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220114 Address after: 100010 8th floor, longfu building, No. 95, longfushi street, Dongcheng District, Beijing Patentee after: Beijing State Owned Financial Leasing Co.,Ltd. Address before: 100085, No. 3, No. 002, Section 1, building No. 3, 3rd floor, information industry base, Beijing, Haidian District Patentee before: BEIJING STARTIMES SOFTWARE TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |