【发明授权】一种基于约束频度的规则引擎优化方法_电子科技大学_201710385813.0 

申请/专利权人:电子科技大学

申请日:2017-05-26

发明/设计人:郝玉洁;杜亚伟;陈炳泉;刘铸;陈煜

公开(公告)日:2020-10-23

代理机构:成都金英专利代理事务所(普通合伙)

公开(公告)号:CN107247588B

代理人:袁英

主分类号:G06F8/30(20180101)

地址:610041 四川省成都市高新区(西区)西源大道2006号

分类号:G06F8/30(20180101)

优先权:

专利状态码:有效-授权

法律状态:2020.10.23#授权;2017.11.10#实质审查的生效;2017.10.13#公开

摘要:本发明公开了一种基于约束频度的规则引擎自优化方法,包括以下步骤:S1:规则约束频度统计,对所有规则模式中的约束进行次数统计;S2:规则约束频度统计结果处理,根据约束名对模式约束频度结果进行合并;S3:Alpha网络构建,通过规则约束重排序得到规则约束列表,构建Rete网络中的Alpha网络;S4:Beta网络构建,根据已生成的Alpha网络生成Rete网络的Beta节点。通过本方法解决了实际应用中用户编写出的规则没有针对Rete网络的共享程度,导致规则引擎构建的Rete网络共享度不足的问题,提高了Rete网络的共享程度,降低了规则引擎所构建的Rete网络的复杂性,有效提高规则匹配效率。

主权项:1.一种基于约束频度的规则引擎优化方法,其特征在于,它包括以下步骤:S1:规则约束频度统计,通过规则列表获取模式列表、约束列表,通过遍历约束列表时修改约束频度统计映射数据中的约束频度值,获得规则模式约束频度统计临时映射数据;S2:规则约束频度统计结果处理,将规则约束频度统计临时映射数据依据约束名合并,得到最终的规则约束频度统计最终映射数据;S3:Alpha网络构建,通过规则约束重排序得到规则约束列表,根据规则约束列表构建Rete网络中的Alpha网络;S4:Beta网络构建,根据Alpha网络构建出Rete网络中的Beta网络。

全文数据:一种基于约束频度的规则引擎优化方法技术领域[0001]本发明涉及一种规则引擎优化方法,具体涉及一种基于规则约束频度的规则引擎优化方法。背景技术[0002]规则引擎是一种产生式系统,产生式系统是人工智能系统的一部分,主要由规则库和推理机构成,提供了必要的规则执行机制以达到某种目标。规则库是一组关于行为的规则,又称为产生式,是用于专家系统中知识的基本呈现。产生式的形式是IF〈C〇nditi〇nsTHEN〈actions,指定了某种前提条件(conditions下的执行动作actions。产生式被触发是指一条产生式的前提条件得到匹配;产生式被激发则是指一条产生式的动作被执行。对现实世界的描述称为事实,通常是某个对象及其属性,推理机负责对事实进行模式匹配,也就是让事实同产生式的条件部分进行比较。[0003]Rete网络是规则引擎的核心,由卡耐基梅隆大学的Forgy博士于1974年首先在一篇工作文件中提出。Rete—词来源于解剖学,用于描述血管和神经纤维网络。以Rete算法为核心的产生式系统会构建一个树形Rete网络,除了根节点外每个节点都对应于一条规则中的一个模式,一条规则的条件部分在Rete网络中对应着一条自根节点到叶子节点的完整路径,与节点模式匹配成功的事实会在该节点保存,这一过程称为节点激活。这个结构本质上是一个数据流网络,当有事实进入网络或被修改时,事实会沿着网络传播,按照模式匹配的结果对节点激活并继续传播。当单个事实或一组事实到达叶子节点时,它们对某一规则的所有模式都匹配成功,则对应的规则会被触发。[0004]Rete网络中主要有五种节点类型:根节点,对象类型节点,Alpha节点,Beta节点,终端节点。根节点是整个Rete网络的入口,数据从根节点进入网络,然后直接到达对象类型节点;对象类型节点用于对事实类型进行过滤;Alpha节点用来对事实进行常量匹配,每个AIpha节点都有自己的AIpha存储区,用来保存符合该AIpha节点约束的事实对象;相同规则约束对应的Alpha节点在Rete网络中会重叠以进行节点共享提高匹配效率;Beta节点通过左右输入分别接收来自Beta节点的元组和Alpha节点的单个事实进行跨对象的字段比较;事实到达终端节点表示该事实已经匹配了规则的所有条件。[0005]目前,在提高规则引擎匹配速度、减少匹配时间方面,已经出现了很多方法。2010年北京邮电大学的ZhongXiaoan提出了Alpha节点哈希和Beta节点索引的方式对Rete算法进行改进;2011年东北大学的WangPing针对事实匹配过程提出了部分匹配结果过期的垃圾回收机制和基于Beta缓存状态的无效连接过滤机制改善Rete网络的性能;2014年中国科学院光电技术研究所和中科院大学的ChenShuaJun等人提出了一种基于代价模型的Rete优化算法,通过计算连接操作的代价选出最佳Rete结构的方法提高模式推理效率。[0006]上述方法主要从Rete网络构造、中间匹配结果缓存过滤、Rete网络筛选等方面提高了基于Rete网络的规则引擎匹配效率,然而,上述研究方法都忽略了让规则引擎针对规则本身进行针对性优化,为了让构建出的Rete网络有较好的节点共享度,规则约束必须按照一定顺序排列,错误的排列顺序会导致构建出的Rete网络无法进行节点共享,在规则匹配过程中进行多余匹配,本发明针对这一规则引擎的不足,提出了一种基于约束频度的规则引擎自优化方法。发明内容[0007]本发明的目的在于在规则文件构建Rete网络时克服规则引擎的盲目性,提出一种基于规则约束频度的规则引擎自优化方法,让规则引擎构建Rete网络之前,基于频度对规则约束进行重排序,构建节点共享程度更高的Rete网络,避免出现因为规则顺序不合理而无法构建有节点共享的Rete网络。[0008]本发明是通过以下技术方案来实现的:一种基于约束频度的规则引擎优化方法,包括以下步骤:[0009]S1:规则约束频度统计,通过规则列表获取模式列表、约束列表,通过遍历约束列表时修改约束频度统计映射数据中的约束频度值,获得规则模式约束频度统计临时映射数据;[0010]S2:规则约束频度统计结果处理,将规则约束频度统计临时映射数据依据约束名合并,得到最终的规则约束频度统计最终映射数据;[0011]S3:Alpha网络构建,通过规则约束重排序得到规则约束列表,根据规则约束列表构建Rete网络中的Alpha网络;[0012]S4:Beta网络构建,根据Alpha网络构建出Rete网络中的Beta网络。[0013]所述的规则约束频度统计包括以下子步骤:[0014]Sll:读取规则文件,生成规则列表;[0015]S12:创建并初始化规则约束频度统计映射数据,将规则约束频度统计映射数据定义为Map〈ClassfactType,MapconstraintNameCount类型的最终规则约束频度统计映射finalStatistics,其所有的事实键类型与临时规则约束频度统计映射constraintStatistics相同;[0024]S22:生成约束名-约束频度的键值,对每个事实类型取出constraintStatistics中对应的规则约束频度统计值,将约束名相同的规则约束出现的频度统计值进行累加,并将生成的约束名-约束频度键值对保存于constraintNameCount中。[0025]所述的Alpha网络构建包括以下子步骤:[0026]S31:新建Rete网络入口节点,并从规则列表中选出一条规则;[0027]S32:判断规则模式对应的事实类型是否在Rete网络中出现过,若出现过则跳转至S33,若没有出现过则创建对象类型节点,并将对象类型节点置于根节点之后;[0028]S33:根据规则约束频度数据对该模式的约束列表进行稳定性排序,得到排序后的约束列表;[0029]S34:从约束列表中选取一个约束,判断该约束在Rete网络中是否有对应的Alpha节点,若存在对应的Alpha节点则对Alpha节点位置记录并编号,若不存在对应的Alpha节点则新建Alpha节点合并进Rete网络,同时将新建的Alpha节点置于上一约束对应的Alpha节点后,并建立Alpha节点内存表;[0030]S35:执行S34,处理约束列表中的所有约束;[0031]S36:执行S32,处理模式列表中的所有模式。[0032]所述的规则约束列表进行稳定性排序包括以下子步骤:[0033]S331:按照规则约束的书写顺序依次对规则约束进行频度赋值,生成带有频度值的规则约束列表;[0034]S332:对带有频度值的规则约束列表,以约束频度值为指标,采用冒泡排序方法进行规则约束稳定式重排序,相应的比较规则为:频度约束从高到低排列,频度相同的约束按原有顺序保持不变,生成按约束频度降序排列的规则约束列表。[0035]所述的Beta网络构建包括以下子步骤:[0036]S41:获取Alpha节点个数n,以空输入为左输入节点,Alpha⑴为右输入节点,新建Beta节点Beta1;[0037]S42:对于i=[2,η],以Betai-Ι为左输入节点,Alpha⑴为右输入节点,新建Beta节点Beta⑴,通过将节点Betai-Ι与Alpha⑴的内存表内联生成Beta⑴的内存表;[0038]S43:于节点Betaη后新建终端节点,封装规则动作部分;[0039]S44:重复S41-S43,处理规则列表中的所有规则;[0040]S45:构建规则对应的Beta网络,得到完整的Rete网络。[0041]本发明的有益效果是:[0042]与现有规则引擎Rete网络构造技术相比,本发明的方法在构建Rete网络之前对规则进行了约束频度分析,为规则模式的每个约束增加了频度属性,然后按照频度对约束进行稳定性排序,在尽量保证规则约束原有顺序的情况下,使频度高的规则约束先进入Rete网络构建,以达到更高的Rete网络节点共享率,提高了Rete网络的共享程度,有效提高规则匹配效率。附图说明[0043]图1为本发明的规则模式约束频度计算流程图;[0044]图2为本发明的Rete网络的Alpha网络部分的构建流程图;[0045]图3为本发明的Rete网络的Beta网络部分的构建流程图。具体实施方式[0046]下面结合具体实施例进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。[0047]实施例1[0048]下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。[0049]如图1,一种基于约束频度的规则引擎自由化方法,包括以下步骤:[0050]SI:规则约束频度统计:初始化规则模式约束频度统计数据映射,加载规则文件,获取规则列表;遍历规则列表,对每条规则获取其模式列表;遍历模式列表,对于每个模式获取其约束列表;遍历约束,修改规则模式约束频度统计数据映射值;规则遍历完毕,获得规则模式约束频度统计临时映射数据;[0051]S2:规则约束频度统计结果处理:根据SI得到的规则约束频度统计数据,依据约束名进行进一步合并,得到最终的规则约束频度统计最终映射数据;[0052]S3:Alpha网络构建,根据得到的规则约束频度统计最终映射数据,通过规则约束重排序得到规则约束列表,根据规则约束列表构建Rete网络中的Alpha网络;[0053]S4:Beta网络构建,根据得到的排序后的规则列表和得到的Alpha网络构建Rete网络的Beta网络部分。[0054]所述的规则约束频度统计,包括以下子步骤:[0055]SI1:读取规则文件,生成规则列表;[0056]S12:创建Map〈ClassfactType,Map〈Constraintconstraint,IntegerconstraintCountconstraintMap映射类型的规则约束统计映射数据constraintStatistics并初始化,其中factType表不约束的事实类型,constraintMap包含了该事实类型下的所有约束频度统计映射,Constraint是对一个规则模式约束的包装三元组,包括{constraintName,constraintOperator,constraintValue},constraintCount表示该规则约束出现的频度统计值;[0057]S13:对规则列表中的每一条规则,获取其模式列表;[0058]S14:对模式列表中的每一则模式,检查该模式约束的事实类型是否包含该事实类型对应的键,若不包含对应的事实类型键则跳转至S15;若包含对应的事实类型键则跳转至S16;[0059]S15:在312中创建的3〇1181:抑;[1^3七31:丨81:;^8中添加该事实类型的键值,新建一Map〈Constraintconstraint,Integercount〉类型的约束频度统计映射集合并初始化作为值加入到constraintStatistics中;[0060]S16:对于约束列表中的每一个约束,检查该约束是否包含该约束对应的键,若包含则跳转至S17,若不包含则跳转至S18;[0061]S17:在constraintMap中将该约束对应的constraintCount值增加1并替换原有值;[0062]S18:在constraintMap中以该约束为键,以1为constraintCount的值添加键值对。[0063]如图1,所述的规则约束频度统计结果处理包括以下子步骤:[0064]S21:创建Map〈ClassfactType,Map〈StringconstraintName,IntegernameCountconstraintNameCount类型的最终约束统计映射finalStatisties并初始化,finalStatistics中的所有事实键与constraintStatisties相同,每个事实键的对应的约束名频度统计映射constraintNameCount由步骤S22确定。[0065]S22:对每个事实类型,从constraintStatistics中取出其规则约束频度统计值constraintMap,对于constraintMap中的约束键consstraint,将约束名constraintName相同者的constraintCount进行累加,生成约束名-约束频度的键值对保存于constraintNameCount中。[0066]如图2所示,所述的Alpha网络构建包括以下子步骤:[0067]所述的Alpha网络构建包括以下子步骤:[0068]S31:新建Rete网络入□节点,并从规则列表中选出一条规则;[0069]S32:判断规则模式是否在Rete网络中出现过,若出现过则跳转至S33,若没有出现过则创建对象类型节点,并将对象类型节点置于根节点之后;[0070]S33:统计得到的规则约束频度,并对得到的规则模式列表进行稳定性排序;[0071]S34:从约束列表中选取一个约束,判断该约束在Rete网络中是否有对应的Alpha节点,若存在对应的Alpha节点则对Alpha节点位置记录并编号,若不存在对应的Alpha节点则新建Alpha节点合并进Rete网络,同时将新建的Alpha节点置于上一约束对应的Alpha节点后,并建立Alpha节点内存表;[0072]S35:执行S34,处理约束列表中的所有约束;[0073]S36:执行S32,处理模式列表中的所有模式。[0074]所述的规则模式列表进行稳定性排序包括以下子步骤:[0075]S331:按照规则的书写顺序依次对规则约束进行频度赋值,生成带有频度值的规则约束列表;[0076]S332:对带有频度值的规则约束列表,以约束频度值为指标,采用冒泡排序方法进行规则约束稳定式重排序,相应的比较规则为:频度约束从高到低排列,频度相同的约束按原有顺序保持不变,生成按约束频度降序排列的规则约束列表。[0077]如图3,所述的Beta网络构建包括以下子步骤:[0078]S41:获取Alpha节点个数η,以空输入为左输入节点,Alpha1为右输入,新建Beta节点Beta1;[0079]S42:对于i=[2,η],以Betai-Ι为左输入节点,以Alpha⑴为右输入节点,新建Beta节点Beta⑴,通过将节点Betai-Ι与Alpha⑴的内存表内联生成Beta⑴的内存表。[0080]S43:在节点Betaη后面新建终端节点,封装规则的动作部分。[0081]S44:重复步骤S41-S43,直到规则列表中所有规则处理完毕。[0082]S45:规则对应的Beta网络部分构建完毕,得到完整Rete网络。[0083]在wind〇w7,jdkl.7环境下,对原有规则引擎和采用本发明方法的规则引擎进行对比测试,测试数据为某地交通系统规则数据集,测试集中的规则数为20,事实数分别为100、200、300、500、1000,测试结果如表1所示:[0084]表1规则匹配时间测试对比[0085][0086]从表1中可以看出,相比于原有规则引擎,采用本发明方法的规则引擎在构建Rete网络之前计算了规则约束频度,以排序后的约束列表为依据构建出了共享程度更高的Rete网络,因而在实际规则匹配过程中匹配时间更短,匹配效率更高。[0087]以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

权利要求:1.一种基于约束频度的规则引擎优化方法,其特征在于,它包括以下步骤:si:规则约束频度统计,通过规则列表获取模式列表、约束列表,通过遍历约束列表时修改约束频度统计映射数据中的约束频度值,获得规则模式约束频度统计临时映射数据;S2:规则约束频度统计结果处理,将规则约束频度统计临时映射数据依据约束名合并,得到最终的规则约束频度统计最终映射数据;S3:AIpha网络构建,通过规则约束重排序得到规则约束列表,根据规则约束列表构建Rete网络中的Alpha网络;S4:Beta网络构建,根据Alpha网络构建出Rete网络中的Beta网络。2.根据权利要求1所述的一种基于约束频度的规则引擎优化方法,其特征在于所述的规则约束频度统计包括以下子步骤:Sl1:读取规则文件,生成规则列表;S12:创建并初始化规则约束频度统计映射数据,将规则约束频度统计映射数据定义为Map〈ClassfactType,MapconstraintMap〉,其中factType表示约束的事实类型,constraintMap包含了该事实类型下的所有约束频度统计映射,Constraint是对一个规则模式约束的包装三元组,包括{constraintName,constraintOperator,constraintValue},分别表不约束名,约束操作符,约束值,constraintCount表示该规则约束出现的频度统计值;S13:对规则列表中的每一条规则,获得对应的模式列表;S14:检查模式列表约束的事实类型,对模式列表中的每一模式检查其约束的事实类型是否包含该事实对应的键,若包含事实对应的键则跳转至S16,若不包含事实对应的键则跳转至S15;S15:规则约束频度统计映射数据中加入事实类型的键值,新建Map〈Constraintconstraint,Integercount〉类型的约束频度统计映射集合,并将集合初始化后做为输入值代入。01181:抑;[11丨3丨31:丨81:;^8;S16:检查约束列表中的约束在constraintMap中是否包含对应的键,若包含则对应的键则跳转至S17,若不包含对应的键则跳转至S18;S17:在constraintMap中将该约束对应的constraintCount值增加1并替换原有值;S18:在constraintMap中以该约束为键,以1为constraintCount的值添加键值对。3.根据权利要求1所述的一种基于约束频度的规则引擎优化方法,其特征在于所述的规则约束频度统计结果处理包括以下子步骤:S21:创建Map〈ClassfactType,MapconstraintNameCount〉类型的最终规则约束频度统计映射finalStatisties,其所有的事实键类型与临时规则约束频度统计映射constraintStatistics相同;S22:生成约束名-约束频度的键值,对每个事实类型取出constraintStatistics中对应的规则约束频度统计值,将约束名相同的规则约束出现的频度统计值进行累加,并将生成的约束名-约束频度键值对保存于constraintNameCount中。4.根据权利要求1所述的一种基于约束频度的规则引擎优化方法,其特征在于,所述的Alpha网络构建包括以下子步骤:S31:新建Rete网络入口节点,并从规则列表中选出一条规则;S32:判断规则模式对应的事实类型是否在Rete网络中出现过,若出现过则跳转至S33,若没有出现过则创建对象类型节点,并将对象类型节点置于根节点之后;S33:根据规则约束频度数据对该模式的约束列表进行稳定性排序,得到排序后的约束列表;S34:从约束列表中选取一个约束,判断该约束在Rete网络中是否有对应的Alpha节点,若存在对应的Alpha节点则对Alpha节点位置记录并编号,若不存在对应的Alpha节点则新建Alpha节点合并进Rete网络,同时将新建的Alpha节点置于上一约束对应的Alpha节点后,并建立Alpha节点内存表;S35:执行S34,处理约束列表中的所有约束;S36:执行S32,处理模式列表中的所有模式。5.根据权利要求4所述的Alpha网络构建,其特征在于,所述的规则约束列表进行稳定性排序包括以下子步骤:S331:按照规则的书写顺序依次对规则约束进行频度赋值,生成带有频度值的规则约束列表;S332:对带有频度值的规则约束列表,以约束频度值为指标,采用冒泡排序方法进行规则约束稳定式重排序,相应的比较规则为:频度约束从高到低排列,频度相同的约束按原有顺序保持不变,生成按约束频度降序排列的规则约束列表。6.根据权利要求1所述的一种基于约束频度的规则引擎优化方法,其特征在于,所述的Beta网络构建包括以下子步骤:S41:获取Alpha节点个数η,以空输入为左输入节点,Alpha1为右输入节点,新建Beta节点Beta1;S42:对于i=[2,η],以Betai-1为左输入节点,Alpha⑴为右输入节点,新建Beta节点Beta⑴,通过将节点Betai-Ι与Alpha⑴的内存表内联生成Beta⑴的内存表;S43:于节点Betaη后新建终端节点,封装规则动作部分;S44:重复S41-S43,处理规则列表中的所有规则;S45:构建规则对应的Beta网络,得到完整的Rete网络。

百度查询: 电子科技大学 一种基于约束频度的规则引擎优化方法