Rete
算法的指导思想主要有
2
条:一是以空间换取时间,二是充分共享匹配的结果。一条规则(
ActionRule
)由左(
LHS
)、右(
RHS
)
2
部分组成,构成
if
(
LHS
)
then
(
RHS
)的结构
.
左边(
LHS
)由一个或多个正、负模式(
RetePattern
)组成,右边(
RHS
)由一个或多个动作(
Action
)组成
.
如果一条规则所包含的模式都得到满足,即每一个正模式均与工作存储器(
WM
)中的元素相匹配,且每一个负模式均与工作存储(
WM
)中的元素不匹配,那么称这条规则被满足
.
匹配算法的功能就是根据当前工作存储器的内容(事实)
,
找出所有被满足的规则
.
Rete
算法将规则的左边模式编译成类似于数据流网络形式的模式识别网络
.
反映工作存储器变化的标牌(
ReteToken
)从网络顶端流入,并在网络的节点间流动
.
网络中的单输入结点(
AlphaNode
)负责测试标牌是否能够匹配一个模式,
成功通过测试的标牌被存到
Alpha
存储器
.
双输入结点(
Two-input Node
)负责测试
2
个匹配于不同模式的标牌是否满足变量的一致性约束,通过测试的
2
个标牌被合成一个并被存到
Beta
存储器
. 如果有事实遍历完整个网络结构,就到达了终结结点( terminal node),这时冲突集(conflict set)就发生相应的改变。抽象地说,RETE网就像一个“黑箱”(black box),它将工作存储器的变化映射为冲突集的变化。
所有的α
-
以及β
-
存储器中所存的内容被称为
RETE
网的状态信息
.
标牌分为
2
种类型
———
正标牌和负标牌,正标牌(
tagEassert
)表示工作存储器增添了新元素,负标牌(
tagEretract
)表示工作存储器中有元素被删除
.
RETE
算法使用两个栈
:
标牌栈负责在结点之间传递标牌
,
状态栈负责在结点之间传递状态信息
,
并被解释器
(interpreter)
用来控制对网络结点按深度优先顺序进行访问
.
如果有标牌流动到某一规则所对应的终结结点(
TerminalNode
),则表示此标牌满足终结结点所对应的规则;此时要将规则的所包含的动作(
Action
)放入动作执行队列(
Agenda
)中,即冲突集(
ConflictSet
)就发生了变
化
.