首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当有多个“那么”时,rete算法会发生什么?

当有多个“那么”时,rete算法会发生什么?
EN

Stack Overflow用户
提问于 2013-11-04 22:41:33
回答 1查看 437关注 0票数 0

为例,假设有一个条件是-

代码语言:javascript
复制
if the flyer's status is silver, then allow free upgrade to business class **and** give a free drink

网络应该如何建设?在网络的底部,将有两个节点- 1)免费升级2)免费饮料。

这两个节点应该如何链接到“银”节点?

我所看到的与Rete算法相关的所有例子都谈到了一个“那么”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 08:59:35

如果在相同的规则中执行这两个操作,那么在“银色”alpha节点之后只会构造一个Action节点。也就是说。

代码语言:javascript
复制
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网络中的Action节点。即使对于具有完全相同的RHS:两个Action节点的规则也是如此。

如果您实现的业务规则与两个单独的规则相同,那么将创建两个Action节点:

代码语言:javascript
复制
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网络。

希望能帮上忙

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19778681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档