一种多核实时规则推理方法转让专利

申请号 : CN201710308370.5

文献号 : CN107145949B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 乔颖徐超王宏安

申请人 : 中国科学院软件研究所

摘要 :

本发明提供一种多核实时规则推理方法,适用于RETE网络,所述RETE网络包括α网络和β网络,其中所述α网络由α节点组成,且一个α节点对应条件元素Ci的一个约束;所述β网络由β节点组成,且一个β节点表示不同条件元素的逻辑组合。该方法利用多核处理器的特点,将α网络和β网络对应不同线程,并分配在不同核上执行,α网络和β网络的多个线程间通过一个β激活队列Q和β节点的实例队列共同完成通信,有效提高了规则匹配的并发性与效率。并且该方法按照β节点优先级来选择被处理的β节点,优先级越大,越优先占用处理器,可以使得规则截止期短的规则优先被处理,从而提高了规则推理的实时性。

权利要求 :

1.一种多核实时规则推理方法,适用于RETE网络,所述RETE网络包括α网络和β网络,其中所述α网络由α节点组成,且一个α节点对应条件元素Ci的一个约束;所述β网络由β节点组成,且一个β节点表示不同条件元素的逻辑组合;所述方法步骤包括:

1)根据输入的事实X,使用一个CPU核确定RETE网络中该事实X的类型所对应的α节点;

2)根据α节点所对应的约束进行过滤,若通过测试,则将事实X存储在α内存中成为AM;

3)将AM向上述α节点的后继β节点传递,形成一个计算实例并放入该α节点的后继β节点的实例队列中;若该α节点的后继β节点未被激活,则激活该α节点的后继β节点并将其放入β激活队列Q中;

4)当剩余CPU核空闲且β激活队列Q不为空时,从所述β激活队列Q中选择优先级最高的β节点并记为节点B,从节点B的实例队列中取出一个计算实例,根据绑定在节点B上的测试函数对该计算实例做变量一致性测试,如果通过测试,则判断节点B是否为终止节点;如果是则表明相应规则成功匹配一次,触发该规则,并执行该规则所定义的动作;如果不是则产生新的计算实例,并将该计算实例加入节点B的后继β节点的实例队列中,并计算该后继β节点的优先级,放入所述β激活队列Q中;如果未通过测试,则不产生新的计算实例,并停止本次操作;

所述β节点优先级的计算方法为:

其中R是规则集;deadline(Ri)表示规则Ri,1≤i≤M的截止期;K是权值,可由专家经验获得;path(B,d)表示RETE网络中节点B到其可达的终止节点d的路径长度;D是RETE网络中节点B可达的终止节点集合;且P(B)越小,优先级越大;

5)循环执行步骤4),直到节点B的实例队列为空,则将节点B从β激活队列Q中删除;

6)循环执行步骤4)和步骤5),直到所述β激活队列Q为空。

2.如权利要求1所述的方法,其特征在于,所述RETE网络根据用户定义的规则集R编译创建,其步骤包括:a.创建根节点Root;

b.取一个规则Ri,1≤i≤M,其中规则Ri有条件元素C1…Ci…Cn;

c.并依照规则Ri中条件元素的顺序,依次取出Ri的一个条件元素Ci,1≤i≤n,检查其类型名TypeName,如果是新类型,则加入一个α节点,并将其作为当前节点;否则找到对应α节点,并将该节点作为当前节点;依次取出Ci中的各约束,若被取出的约束所对应的α节点已经存在,则将其当前节点更新为对应α节点,否则新建一个α节点并作为当前节点的后继,然后将当前节点更新为新建的α节点;循环以上过程直至取出Ci中所有的约束,此时产生α内存;

d.检查Ci与之前所取出的条件元素C1…C(i-1)的约束,并生成相应的β节点,该β节点的左输入是前一个β节点,右输入是当前Ci生成的α内存;

e.重复c-d直到所有条件元素处理完;

f.重复b-e直到所有规则处理完。

3.如权利要求1所述的方法,其特征在于,所述α网络和β网络通过一个β激活队列Q和β节点的实例队列共同完成通信;且β网络的β节点包括左输入、右输入、一个实例队列、左存储、右存储和输出。

4.如权利要求3所述的方法,其特征在于,当一个β节点有输入时,该β节点被激活,计算该β节点优先级,并按优先级递减顺序放入β激活队列Q中。

5.如权利要求1所述的方法,其特征在于,步骤2)中所述α内存存储符合所有对应α节点约束的一类事实。

6.如权利要求1所述的方法,其特征在于,步骤3)中所述计算实例的形式为(β-id,AM,left-memory);其中β-id表示所述α节点的后继β节点的标识,left-memory是节点β-id对应的左存储,存储着部分匹配;所述部分匹配是节点β-id通过Join操作将AM组合而成。

7.如权利要求1所述的方法,其特征在于,步骤4)中当节点B不是终止节点时进行以下步骤:

4-1)从节点B的实例队列中取出一个计算实例;

4-2)若被取出的计算实例形式为(B,AM,left-memory),首先将AM存入节点B的right-memory中,根据绑定在节点B上的测试函数,一一遍历left-memory中的PM,检查和AM中变量的一致性,如果通过测试,则产生新的部分匹配PM,并在该后继β节点上产生新的计算实例,否则不产生部分匹配并停止本次操作;

4-3)若被取出的计算实例形式为(B,PM,right-memory),首先将PM存入节点B的left-memory中,根据绑定在节点B上的测试函数,一一遍历right-memory中的AM,检查和PM中变量的一致性,如果通过测试,则产生新的部分匹配PM,并在该后继β节点上产生新的计算实例,否则不产生部分匹配并停止本次操作;

4-4)将步骤4-2)和4-3)中后继β节点上所产生的新的计算实例存储在该后继β节点的实例队列中,并计算该后继β节点的优先级,将其按优先级递减顺序放入所述β激活队列Q中。

8.如权利要求1所述的方法,其特征在于,步骤4)中所述新的计算实例的形式为(β*,PM,right-memory),其中β*是上述节点B的后继β节点的标识,PM为节点B所产生的部分匹配,right-memory是节点β*的右存储。

说明书 :

一种多核实时规则推理方法

技术领域

[0001] 本发明属于规则系统和实时技术领域,具体涉及一种多核实时规则推理方法。

背景技术

[0002] 规则推理能够将领域知识表示为规则,通过规则与事实的匹配,触发并执行规则,从而进行自动决策。它已被广泛应用于医疗诊断、地质勘探、智能决策等各种专家系统中。
[0003] 近几年来,实时系统对智能化的需求日益增加,它们需要能够感知外部环境,并对其进行自动响应。在这种情况下,实时系统需要具有强大的推理能力,可以通过一系列传感器采集外部环境数据,对连续不断的事件流进行监视,从中识别出需要关注的场景,并进行自动决策,从而实时地执行动作对识别出的场景做出响应。因此,规则推理也开始应用于生产过程监控、高速列车在线故障诊断、电网自愈控制以及金融交易风险预警等实时系统。由于实时系统具有时间约束,系统中的任务需要在其截止期前完成,因此,规则推理中的规则也必须具有截止期。在本发明中,从与某条规则相关联的所有数据被系统接收开始到该规则所定义的动作完成之间的时间间隔被定义为该规则的推理延迟,而规则推理延迟的上限则被定义为该规则的截止期。例如,在在工厂仓库的火灾监测中,当温度过高、湿度过低和烟雾浓度异常时,则判断可能发生火灾并发出报警信息。由于系统从接收到温度、湿度、烟雾等数据到推理出火灾是否发生,并发出警报需要在10秒内进行完成,那么相应规则的截止期即为10秒。目前所提出的实时推理方法,例如:迭代推理(详见T.Dean and M.Boddy.An Analysis of Time-Dependent Planning.In:Proc.of AAAI,1988:49-54;如Anytime算法)、多重方法推理(详见Garvey A J,Lesser V R.Design-to-time real-time scheduling.IEEE Trans.on Systems Man&Cybernetics,1996,23(6):1491-1502;如Design-to-Time算法)和渐进式推理(详见V.R.Lesser,J.Pavlin,E.Durfee.Approximate Processing in Real-time Problem Solving,AI Magazine,1988,9(1):49-61;A.I.Mouaddib,F.Charpillet,J.P.Haton.GREAT:a Model of Progressive Reasoning for Real-time Systems.In:Proc.of ICTAI,1994:521-527;如GREAT算法和PRIMES算法)以及已有的规则推理系统(如CLIPS,详见http://clipsrules.sourceforge.net/;DROOLS,详见https://www.drools.org/),都没有考虑规则的截止期。因此,在将这些方法与系统直接应用于实时系统时,会导致大量的规则截止期错失,从而使上层实时应用的时间约束无法得到满足。
[0004] 同时,随着多核处理器的广泛应用,规则所运行的硬件环境也往往是具有多核处理器的计算机。然而,目前的规则推理系统并没有考虑其硬件运行环境,没有充分利用多核处理器的特点,从而影响了规则推理的性能。

发明内容

[0005] 针对规则推理系统现有技术的不足,本发明提供一种多核实时规则推理方法,该方法能够在多核运行环境下完成规则与数据的匹配,并使规则尽可能地在其截止期前执行完毕。
[0006] 在本发明中,根据用户定义的规则集R编译创建RETE网络(RETE网络的概念及原理详见R.B.Doorenbos“, Production Matching for Large Learning Systems,”Technical Report CS-95-113,School of Computer Science,Carnegie Mellon Univ.,1995),且RETE网络包括α网络和β网络。在RETE网络中,规则被表示为IF C1∧C2∧…Ci…∧Cn THEN A的形式,其中Ci(1≤i≤n)被称为条件元素(condition),条件元素Ci可以和事实(fact)匹配;事实由类型名和若干属性名-属性值组成,其被表示成(TypeName(attr1x1)(attr2x2)…(attrk xk)…(attrm xm)),其中TypeName是事实的类型名,attrk(1≤k≤m)是属性名,xk(1≤k≤m)是属性名对应的属性值(常量)。条件元素Ci可被表示成(TypeName,constraint(atrri,Xi)),其中Xi是属性名attri(1≤i≤m)的变量,constraint(attri,Xi)是对类型为TypeName的事实中属性名attri所对应变量Xi取值的约束。条件元素Ci的每一个约束对应RETE网络中的一个α节点,规则集中Ci(1≤i≤n)的全部约束则形成了α网络;RETE网络中的β网络由若干β节点连接而成,不同条件元素间的逻辑组合被表示为一个β节点,例如C1,C1∧C2,C1∧…∧Ck(1≤k≤n)均各自对应了β网络的某个β节点。
[0007] 针对上述不足,本发明所采用的技术方案为:
[0008] 一种多核实时规则推理方法,适用于RETE网络,所述RETE网络包括α网络和β网络,其中所述α网络由α节点组成,且一个α节点对应条件元素Ci的一个约束;所述β网络由β节点组成,且一个β节点表示不同条件元素的逻辑组合;所述方法步骤包括:
[0009] 1)根据输入的事实X,使用一个CPU核确定RETE网络中该事实X的类型所对应的α节点;
[0010] 2)根据α节点所对应的约束进行过滤,若通过测试,则将事实X存储在该α内存(alpha memory)中成为AM(Alpha Match);
[0011] 3)将AM向上述α节点的后继β节点传递,形成一个计算实例并放入该α节点的后继β节点的实例队列中;若该α节点的后继β节点未被激活,则激活该α节点的后继β节点并将其放入β激活队列Q中;
[0012] 4)当剩余CPU核空闲且β激活队列Q不为空时,从所述β激活队列Q中选择优先级最高的β节点并记为节点B,从节点B的实例队列中取出一个计算实例,根据绑定在节点B上的测试函数对该计算实例做变量一致性测试,如果通过测试,则判断节点B是否为终止节点(即没有后继节点的节点);如果是则表明相应规则成功匹配一次,触发该规则,并执行该规则所定义的动作;如果不是则产生新的计算实例,并将该计算实例加入节点B的后继β节点的实例队列中,并计算该后继β节点的优先级,放入所述β激活队列Q中;如果未通过测试,则不产生新的计算实例,并停止本次操作;
[0013] 5)循环执行步骤4),直到节点B的实例队列为空,则将节点B从β激活队列Q中删除;
[0014] 6)循环执行步骤4)和步骤5),直到所述β激活队列Q为空。
[0015] 进一步地,所述RETE网络根据用户定义的规则集R编译创建,其步骤包括:
[0016] a.创建根节点Root;
[0017] b.取一个规则Ri(1≤i≤M),其中规则Ri有条件元素C1…Ci…Cn;
[0018] c.并依照规则Ri中条件元素的顺序,依次取出Ri的一个条件元素Ci(1≤i≤n),检查其类型名TypeName,如果是新类型,则加入一个α节点,并将其作为当前节点;否则找到对应α节点,并将该节点作为当前节点;依次取出Ci中的各约束,若被取出的约束所对应的α节点已经存在,则将其当前节点更新为对应α节点,否则新建一个α节点并作为当前节点的后继,然后将当前节点更新为新建的α节点;循环以上过程直至取出Ci中所有的约束,此时产生α内存;
[0019] d.检查Ci与之前所取出的条件元素C1…C(i-1)的约束,并生成相应的β节点,该β节点的左输入是前一个β节点(前一个β节点是指C1∧…∧C(i-1)所对应的β节点),右输入是当前Ci生成的α内存;
[0020] e.重复c-d直到所有条件元素处理完;
[0021] f.重复b-e直到所有规则处理完。
[0022] 进一步地,所述α网络和β网络通过一个β激活队列Q和β节点的实例队列共同完成通信;且β网络的β节点包括左输入、右输入、一个实例队列、左存储(left-memory)、右存储(right-memory)和输出。
[0023] 更进一步地,当一个β节点有输入(左输入或者右输入)时,该β节点被激活,计算该β节点优先级,并按优先级递减顺序放入β激活队列Q中。
[0024] 进一步地,步骤2)中所述α内存存储符合所有对应α节点约束的一类事实。
[0025] 进一步地,步骤3)中所述计算实例的形式为(β-id,AM,left-memory);其中β-id表示所述α节点的后继β节点的标识,left-memory是节点β-id对应的左存储,存储着部分匹配(Partial Match,PM);所述部分匹配是节点β-id通过Join操作将AM组合而成。
[0026] 进一步地,步骤4)中所述β节点优先级的计算方法为:
[0027]
[0028] 其中R是规则集;deadline(Ri)表示规则Ri(1≤i≤M)的截止期;K是权值,可由专家经验获得;path(B,d)表示RETE网络中节点B到其可达的终止节点d(即没有后继节点的节点)的路径长度;D是RETE网络中节点B可达的终止节点集合;且P(B)越小,优先级越大。
[0029] 进一步地,步骤4)中当节点B不是终止节点时进行以下步骤:
[0030] 4-1)从节点B的实例队列中取出一个计算实例;
[0031] 4-2)若被取出的计算实例形式为(B,AM,left-memory)(即由α网络产生),首先将AM存入节点B的right-memory中,根据绑定在节点B上的测试函数,一一遍历left-memory中的PM,检查和AM中变量的一致性,如果通过测试,则产生新的部分匹配PM,并在该后继β节点上产生新的计算实例,否则不产生部分匹配并停止本次操作;
[0032] 4-3)若被取出的计算实例形式为(B,PM,right-memory)(即由β网络产生),首先将PM存入节点B的left-memory中,根据绑定在节点B上的测试函数,一一遍历right-memory中的AM,检查和PM中变量的一致性,如果通过测试,则产生新的部分匹配PM,并在该后继β节点上产生新的计算实例,否则不产生部分匹配并停止本次操作;
[0033] 4-4)将步骤4-2)和4-3)中后继β节点上所产生的新的计算实例存储在该后继β节点的实例队列中,并计算该后继β节点的优先级,将其按优先级递减顺序放入所述β激活队列Q中。
[0034] 进一步地,步骤4)中所述新的计算实例的形式为(β*,PM,right-memory),其中β*是上述节点B的后继β节点的标识,PM为节点B所产生的部分匹配,right-memory是节点β*的右存储。
[0035] 本发明的有益效果在于:本发明提供一种多核实时规则推理方法,该方法使规则的匹配与执行尽量在规则截止期内完成,且该方法适用于实时系统,从而提高了实时系统的智能化程度。该方法优点具体包括:
[0036] 1、利用多核处理器的特点,将α网络和β网络对应不同线程,并分配在不同核上执行,α网络和β网络的多个线程间通过一个β激活队列Q和β节点的实例队列共同完成通信,有效提高了规则匹配的并发性与效率。
[0037] 2、通过在β节点中加入left-memory、right-memory和一个实例队列,从而使得β节点的计算对前驱和后继节点没有影响,进一步利用多核的性能,不同的CPU核可以并行处理β网络,而β网络所对应的各线程之间的通信由β激活队列Q和相关β节点的实例队列共同完成,从而保证了β网络由不同核并行处理时推理结果的正确性。
[0038] 3、按照β节点优先级来选择被处理的β节点,优先级越大,越优先占用处理器,可以使得规则截止期短的规则优先被处理,从而提高了规则推理的实时性。

附图说明

[0039] 图1是本发明一实施例的RETE网络和β节点结构模型示意图;
[0040] 图2是本发明的β线程执行流程图。

具体实施方式

[0041] 为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
[0042] 本发明根据用户定义的规则集R编译创建RETE网络,且RETE网络包括α网络和β网络,其中α网络由α节点组成,β网络由β节点组成。且α网络和β网络通过一个β激活队列Q和β节点的实例队列共同完成通信。
[0043] 假设用户定义的规则集为R,其中每一个规则表示为Ri(1≤i≤M),则建立RETE网络的具体步骤包括:
[0044] a.创建根节点Root;
[0045] b.取出一个规则Ri(设Ri有条件元素C1…Ci…Cn);
[0046] c.依照规则Ri中条件元素的顺序,依次取出Ri的一个条件元素Ci(1≤i≤n),检查其类型名TypeName,如果是新类型,则加入一个α节点,并将其作为当前节点;否则找到对应α节点,并将该节点作为当前节点。依次取出Ci中的各约束,若被取出的约束所对应的α节点已经存在,则将其作为当前节点,否则新建一个α节点并作为当前节点的后继,然后将当前节点更新为新建的α节点;循环以上过程直至取出Ci中所有的约束,此时产生α内存,在下述的推理过程中α内存可存储符合所有对应α节点约束的一类事实;
[0047] d.检查Ci与之前所取出的条件元素C1…C(i-1)的约束,并生成相应的β节点,该β节点的左输入是前一个β节点(此时,前一个β节点对应了C1∧…∧C(i-1),第一个β节点的左输入是Root),右输入是当前Ci生成的α内存;
[0048] e.重复c-d直到所有条件元素处理完;
[0049] f.重复b-e直到所有规则处理完。
[0050] 请参考图1,该图为本发明一实施例的RETE网络和β节点结构模型示意图。所述α网络是一种Trie树结构,主要作用是将输入数据解析成内部对象(可以是C++类的一个对象),α节点检查对象的属性后,将这些对象缓存在对应的α节点的α内存中成为一个AM。β网络中β节点包含两个输入(左输入与右输入)、一个实例队列、两个存储(左left-memory、right-memory)和输出。β节点将输入和对应的存储做逐一比较(Join操作)生成部分匹配PM并向后继β节点传递形成计算实例,然后放入后继β节点的实例队列中。β节点的一个左输入(PM)需要跟该β节点中right-memory的AM逐一比较,根据该β节点的函数做变量一致性测试,β节点的一个右输入(AM)需要和该β节点中left-memory的部分匹配PM逐一比较,根据该β节点的函数做变量一致性测试。
[0051] 本发明首先将α网络和β网络分割交给不同线程处理,每个CPU核对应一个线程,处理α网络的线程称为α线程,处理β网络的线程称为β线程。本发明主要涉及其中的β线程。β线程把β节点和该β节点的一个输入和对应的β存储当做一个计算实例,即(β,AM,left-memory)或者(β,PM,right-memory),不同的β线程可以同时处理不同的β节点,从而可以并发处理β网络。
[0052] 所述α线程负责对同一类事实的属性做常量测试,将事实放入对应的α节点中的α内存。本发明分配一个α线程。其步骤如下:
[0053] 1)每当一个事实X到达规则推理系统时,将其与相应的α节点进行匹配。本发明中根据检查X属性,例如检查X.name==’jack’或者X.age>20等常量测试,最后找到RETE网络中对应的α节点,将其存储在该α节点的α内存中成为AM,这个AM只包含了一个事实即X。
[0054] 2)将AM向上述α节点的后继β节点传递,然后形成一个形式为(β-id,AM,left-memory)的计算实例,其中β-id为上述α节点的后继β节点的标识,left-memory是节点β-id对应的左存储,且是一个链表结构,链表的每个元素都是一个部分匹配。例如所述α节点的后继β节点右输入对应C3,那么它的left-memory存储C1∧C2的部分匹配所有元素。
[0055] 3)将该计算实例(β-id,AM,left-memory)放在节点β-id中的实例队列,如果节点β-id第一次被放入实例队列,则同时将节点β-id激活,并计算节点β-id的优先级,放入β激活队列Q中。
[0056] 4)循环执行步骤1)至3),直到没有事实为止。
[0057] 所述β线程负责对不同类事实之间的属性做变量一致性测试,将产生的部分匹配PM放入对应β节点存储或者触发规则。请参考图2,该图是本发明β线程的执行流程图。本发明将剩下的线程分配成β线程。其具体步骤包括:
[0058] 1)当β激活队列Q不为空,并且β线程空闲时,β线程从β激活队列Q中选择优先级最大并且不被其他β线程处理的β节点,并记为节点B,取出节点B上实例队列的第一个计算实例,由该β线程处理这一个计算实例S;
[0059] 2)β线程选中的计算实例S,如果是右输入产生即α网络产生的计算实例(B,AM,left-memory)时:首先将AM放入节点B的right-memory中,再根据绑定在节点B上的测试函数,一一遍历left-memory中的PM,检查和AM中变量的一致性,例如left-memory中的PM是C1∧C2的部分匹配,节点B右输入对应C3,AM是C3对应的事实,如果通过测试,比如C1.id==C3.num或者C2.age>C3.age,则判断节点B是否为终止节点;如果节点B是终止节点,则表明相应规则成功匹配一次,触发该规则,并执行该规则所定义的动作;如果节点B不是终止节点,则产生新的部分匹配PM(C1∧C2∧C3),并在节点B的后继β节点上产生新的计算实例(β*,PM,right-memory),其中β*是节点B的后继β节点的标识,PM为上述节点B所产生的部分匹配,right-memory是节点β*的右存储;如果未通过测试,则不产生部分匹配并停止本次操作;
[0060] 3)β线程选中的计算实例S,如果是左输入产生即β网络产生的计算实例(B,PM,right-memory)时,首先将PM放入节点B的left-memory中,然后类似1)的操作。根据绑定在节点B的测试函数,一一遍历right-memory中的AM,检查和PM中变量的一致性,如果通过测试,则判断节点B是否为终止节点;如果节点B是终止节点,则表明相应规则成功匹配一次,触发该规则,并执行该规则所定义的动作;如果节点B不是终止节点,则产生新的部分匹配PM,并在节点B的后继β节点上产生新的计算实例(β*,PM,right-memory);如果未通过测试,则不产生部分匹配并停止本次操作。
[0061] 4)上述步骤1)和步骤2)中都可能产生新的部分匹配PM,并向节点β*(即节点B的后继β节点)传递,形成一个形式为(β*,PM,right-memory)的计算实例。将这个新形成的计算实例放入节点β*的实例队列,如果节点β*未在β激活队列Q中,即节点β*的实例队列原来为空,那么现在称节点β*被激活,需要再将节点β*根据优先级放入β激活队列Q中;否则直接放入节点β*的实例队列的队尾即可。
[0062] 5)循环执行步骤1)至4),判断节点B的实例队列是否为空,如果为空则将节点B从β激活队列Q中删除。
[0063] 6)循环执行步骤1)至5),直到所述β激活队列Q为空为止。
[0064] 所述β节点的优先级的计算方法为:
[0065]
[0066] 其中R是规则集;deadline(Ri)表示规则Ri((1≤i≤M))的截止期;K是权值,可由专家经验获得;path(B,d)表示RETE网络中节点B到其可达的终止节点d(即没有后继节点的节点)的路径长度;D是RETE网络中节点B可达的终止节点集合;且P(B)越小,优先级越大。
[0067] 下面结合2条具体规则和相关数据,对本发明方法做进一步说明。
[0068]
[0069] 上述两条规则分别对应图1中的R1和R3,一共有5个β节点即B1-B5,B1、B2是两条规则的共享节点。其中B1和B4不需要做任何测试,B2需要检查C1和C2的attr1对应的值是否相等,B3需要检查C3的attr1对应的值是否等于C1的attr2对应的值,B5需要检查C3的attr1对应的值是否等于C4的attr2对应的值。如果规则对应的数据满足了各种测试,那么最后到达的数据对应的时刻和对应的报警时刻,延时应该满足截止期要求。
[0070] 所有数据可以看做是同一时间到来,表1只是一种可能的执行顺序。
[0071] 表1:数据执行顺序
[0072] 数据 对应β节点f1:(C1(attr1 10)(attr2 15)) B1
f2:(C2(attr1 10)(attr2 10)) B2
f3:(C4(attr1 15)(attr2 15)) B4
f4:(C3(attr1 15)(attr2 25)) B3,B5
[0073] (1)所有数据同时到达α内存,对应的β节点有了右输入,也就是计算实例,这些计算实例按照先后顺序被存储在对应β节点的实例队列,β节点也被激活。因此,每个β节点的实例队列如表2所示。
[0074] 表2:β节点的实例队列
[0075] β节点 实例队列 Left-memory Right-memory P(B)B1 f1 Null Null 0
B2 f2 Null Null 50
B3 f4 Null Null 450
B4 f3 Null Null 100
B5 f4 Null Null 150
[0076] 其中,P(B)是根据下述公式得到:
[0077]
[0078] 例如K=50,B2同时属于R1和R2,那么 B2可达的终止节点有2个,B2到这两个终止节点的路径长度分别为2和3,因此P(B)=200-50*3=50,,剩余β节点优先级计算类似。所以,此时的激活队列按照优先级排列是:B1>B2>B4>B5>B3。
[0079] (2)线程1从β激活队列Q中选择B1处理,线程2从β激活队列Q中选择B2处理。线程1处理B1,由于B1中没有测试函数,并且B1不需要在B1中存储f1,所以将f1作为部分匹配f1^直接传递给后继β节点B2,存储在B2的实例队列中。此时,线程2从B2实例队列中取出f2,放入B2的right-memory,再遍历B2的left-memory中的部分匹配,逐一比较,此时B2的left-memory仍然为空,因此这次计算不产生新的计算实例。此刻,每个β节点的实例队列如表3所示。
[0080] 表3:β节点的实例队列
[0081]β节点 实例队列 Left-memory Right-memory P(B)
B1 空 Null Null  
B2 f1^ Null f2^ 50
B3 f4 Null Null 450
B4 f3 Null Null 100
B5 f4 Null Null 150
[0082] (3)线程1从β激活队列Q中选择B2处理,线程2从β激活队列Q选择B3处理。线程1取出B2实例队列的队首元素f1^,存储在B2的left-memory,因为f1^是左输入,所以要逐一比较B2中right-memory中的元素(f2^),通过测试产生新的部分匹配f1^f2,然后将部分匹配向后继β节点传递,放入B3和B4的实例队列中。线程2取出f4,并放入B3的right-memory中,因为f4是右输入,所以要逐一比较B3中left-memory中的元素,当前B3的left-memory为空,所以不产生新的计算实例。此刻,每个β节点的实例队列如表4所示。
[0083] 表4:β节点的实例队列
[0084]β节点 实例队列 Left-Memory Right-memory P(B)
B1 空 Null Null  
B2 空 f1^ f2^  
B3 f1^f2 Null Null 450
B4 f3,f1^f2 Null Null 100
B5 f4 Null Null 150
[0085] (4)线程1从β激活队列Q中选择B4处理,线程2从β激活队列Q中选择B5处理。线程1取出f3,并放入B4的right-memory中。因为f3是右输入,所以要逐一比较B4中left-memory中的元素,此时B4的left-memory为空,所以不产生新的计算实例。线程2取出B5中的f4,并放入B5中的right-memory,此时B5的left-memory也为空,所以也不产生新的计算实例。此刻,每个β节点的实例队列如表5所示。
[0086] 表5:β节点的实例队列
[0087]β节点 实例队列 Left-memory Right-memory P(B)
B1 空 Null Null  
B2 空 f1^ f2^  
B3 f1^f2 Null Null 450
B4 f1^f2 Null f3^ 100
B5   Null f4^  
[0088] (5)线程1从B4的实例队列中选择f1^f2处理,线程2从β激活队列Q中选择B3处理。线程1取出f1^f2,将f1^f2放入B4的left-memory中,因为f1^f2是左输入,所以需要逐一比较B4的right-memory中的元素(f3),因为B4没有测试函数,所以产生新的部分匹配f1^f2^f3,放入后继β节点B5的实例队列中。线程2取出B3上的f1^f2,因为是左输入,所以需要逐一比较B3的right-memory中的元素(f4),B3的测试函数检查f1的attr2和f4的attr1是否相等,通过测试,因为B3没有后继β节点,所以表示推理成功一次。此刻,每个β节点的实例队列如表6所示。
[0089] 表6:β节点的实例队列
[0090]β节点 实例队列 Left-memory Right-memory P(B)
B1 空 Null Null  
B2 空 f1^f2 f2^  
B3 空 Null Null  
B4 空 f1^f2 f3^  
B5 f1^f2^f3 Null f4^ 200
[0091] (6)线程1取出B5上的f1^f2^f3,逐一匹配B5上的right-memory(f4^),匹配成功,所以推理成功一次。此刻,每个β节点的实例队列如表7所示。
[0092] 表7:β节点的实例队列
[0093]β节点 实例队列 Left-memory Right-memory P(B)
B1 空 Null Null  
B2 空 f1^f2 f2^  
B3 空 Null Null  
B4 空 f1^f2 f3^  
B5 空 Null f4^  
[0094] 以上实施仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。