以这为例,假设有一个条件是-
if the flyer's status is silver, then allow free upgrade to business class **and** give a free drink网络应该如何建设?在网络的底部,将有两个节点- 1)免费升级2)免费饮料。
这两个节点应该如何链接到“银”节点?
我所看到的与Rete算法相关的所有例子都谈到了一个“那么”
发布于 2013-11-05 08:59:35
如果在相同的规则中执行这两个操作,那么在“银色”alpha节点之后只会构造一个Action节点。也就是说。
rule "Allow free upgrade to business class and give a free drink to Silver flyers"
no-loop true
when
$a: Account (status == "SILVER")
then
modify($a){
.setFreeUpgrade(true);
.setFreeDrinks(true);
}
endDrools将规则的RHS视为一个黑匣子。RHS总是表示为RETE网络中的Action节点。即使对于具有完全相同的RHS:两个Action节点的规则也是如此。
如果您实现的业务规则与两个单独的规则相同,那么将创建两个Action节点:
rule "Allow free upgrade to business class to Silver flyers"
lock-on-active true
when
$a: Account (status == "SILVER")
then
modify($a){
.setFreeUpgrade(true);
}
end
rule "Give a free drink to Silver flyers"
lock-on-active true
when
$a: Account (status == "SILVER")
then
modify($a){
.setFreeDrinks(true);
}
end我们可以进一步讨论哪种方法更好,但为了回答您的问题,我认为这就足够了: RETE网络将包含与kbase中的规则一样多的操作节点
如果您使用Drools的eclipse插件,您可以看到为单个.DRL文件创建的RETE网络。在编辑DRL时,您会注意到编辑器底部有一个选项卡来检查正在生成的RETE网络。
希望能帮上忙
https://stackoverflow.com/questions/19778681
复制相似问题