以此为例,假设有一个条件说-
if the flyer's status is silver, then allow free upgrade to business class **and** give a free drink
rete网络应该如何构建?在网络的底部,将有两个节点- 1)免费升级 2)免费饮料
这两个节点应该如何链接到“银”节点?
我见过的所有与 Rete 算法相关的例子都在谈论一个“然后”
以此为例,假设有一个条件说-
if the flyer's status is silver, then allow free upgrade to business class **and** give a free drink
rete网络应该如何构建?在网络的底部,将有两个节点- 1)免费升级 2)免费饮料
这两个节点应该如何链接到“银”节点?
我见过的所有与 Rete 算法相关的例子都在谈论一个“然后”
如果 2 个动作在同一个规则中执行,那么在“银”阿尔法节点之后只会构造 1 个动作节点。IE
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);
}
end
Drools 将规则的 RHS 视为黑匣子。RHS 在 RETE 网络中总是表示为一个动作节点。即使对于具有完全相同 RHS 的规则也是如此:将创建两个动作节点。
如果您实现与 2 个单独规则相同的业务规则,则将创建 2 个 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 中拥有的 AS MANY 动作节点 AS 规则
如果您使用 Drools 的 eclipse 插件,您可以看到为单个 .DRL 文件创建的 RETE 网络。编辑 DRL 时,您会注意到编辑器底部有一个选项卡,用于检查正在生成的 RETE 网络。
希望能帮助到你,