Drools 6引入了新的惰性匹配算法。 该算法的详细信息已在之前的两个博客中介绍:

  • RIP RETE时间获得PHREAKY
  • 基于PHREAK堆栈的评估和向后链接

第一篇文章讨论了性能以及为什么算法的批处理和惰性方面难以比较。

“性能的最后一点。 通常,使用PHREAK的单个规则不会比使用RETE更快。 对于使用根上下文对象启用和禁用匹配的给定规则和相同数据集,它们都尝试相同数量的匹配并产生相同数量的规则实例,并且花费的时间大致相同。 除了带有子网的用例和积累。

但是,对于规则编写得不好的规则库,PHREAK可以认为比RETE更宽容,并且随着规则数量和复杂性的增加,性能会更适度地下降。

RETE还将为不包含所有联接的数据的规则生产部分机器。 PHREAK会避免这种情况。

因此,并不是PHREAK比RETE更快,它不会随着系统的增长而降低速度!”

最近,OptaPlanner团队开始对ReteOO和Phreak之间的同一组规则进行基准测试: 哪种规则引擎算法更快:ReteOO还是Phreak?

他们发现,三项测试的速度提高了20%,一项测试的速度降低了4%。 用户对该文章发表了评论,其性能差异为17%。

OptaPlanner团队投入了很多时间来确保编写规则的方式不会碰到Rete墙。 他们消除了许多问题,例如在一条规则中进行多次累加。

一个用户对如果您以已知的方式导致ReteOO出现问题而实施规则会感兴趣,那么它将更优雅地处理它。 他们创建了4条规则,每条规则都有两个累加。 您可以在此处找到DRL文件,其中一个规则的副本如下所示:

rule gold_account
whenaccount: Account()Number(this >= 50000) from accumulate(t: Transaction(source == account); sum(t.amount))Number(this >= 50000) from accumulate(t: Transaction(target == account); sum(t.amount))
then//System.out.println("Gold account: " + account);
end

结果令人鼓舞,Phreak的性能提高了400%(5倍):)这主要是因为Phreak可以分批评估规则,从而避免了很多浪费的工作。 它肯定表明我们已经实现了上一段中引用的目标之一:

“不过,PHREAK可以认为RETE对于编写得不好的规则库比RETE更为宽容,并且随着规则数量和复杂性的增加,性能会更加适度地下降。”

  • 如果您想自己尝试一下,可以在这里签出项目: https : //github.com/winklerm/phreak-examples

到目前为止,该算法是为正确性而设计的,尤其是在线程安全性和将来的多核开发方面。 因此,这仅仅是开始,我们还有很多优化和改进要做。

参考: Drools &jBPM博客上我们JCG合作伙伴 Geoffrey De Smet 的PHREAK算法带来的Drools 6性能 。

翻译自: https://www.javacodegeeks.com/2014/02/drools-6-performance-with-the-phreak-algorithm.html

使用PHREAK算法实现Drools 6性能相关推荐

  1. MurmurHash算法:高运算性能,低碰撞率的hash算法

    MurmurHash算法:高运算性能,低碰撞率,由Austin Appleby创建于2008年,现已应用到Hadoop.libstdc++.nginx.libmemcached等开源系统.2011年A ...

  2. 数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据

    全文链接:http://tecdat.cn/?p=32092 我们一般把一件事情发生,对另一件事情也会产生影响的关系叫做关联.而关联分析就是在大量数据中发现项集之间有趣的关联和相关联系(形如" ...

  3. 209-希尔排序算法的思想和性能分析

    1.希尔排序算法的思想和性能分析 希尔排序可以认为是插入排序的一个优化,升级. 如果数据序列从大的方向,从全局看,已经是趋于有序的,那么插入排序是所有排序算法中效率最高的. 希尔排序就是从插入排序的这 ...

  4. 算法复杂度与性能的解释与计算方法

    算法复杂度与性能的解释与计算方法 时间复杂度 时间复杂度的简介 时间复杂度的计算方法 空间复杂度 空间复杂度的简介 空间复杂度的计算方法 其他指标 排序算法的稳定性 算法复杂度分为时间复杂度和空间复杂 ...

  5. 通过改进算法来优化程序性能的真实案例(Ransac)

    对于运行不了几次,一次运行不了多久的方法,我们不需要考虑性能优化,对于那些需要经常运行几百次几千次的方法,我们头脑里还是要有性能这根弦.C#太优雅方便了,以至于很多人写程序时根本就把性能抛到脑后了,不 ...

  6. 英伟达开源自动驾驶AI算法,升级芯片性能7倍于Xavier

    2019-12-18 13:24:27 乾明 编辑整理  量子位 报道 | 公众号 QbitAI 一年一度,英伟达GTC China如期举办. 今年的英伟达创始人黄仁勋,对自动驾驶极为关注. 不仅发布 ...

  7. 排序集锦(各种排序算法的特点及性能分析)

    关于排序,似乎很简单的很常见的概念,却蕴含着很多技术,下面是从不同的角度,对排序的总结: 直插希 冒泡快 选择堆 1 按照排序特性分类 首先按照排序本身的操作特性可以分为下面几种: 插入排序 直接插入 ...

  8. 模型压缩+编译器优化,使AI算法在移动端性能超越专用硬件

    作者 | 王言治,美国东北大学电子与计算机工程系助理教授 出品 | AI科技大本营(ID:rgznai100) 近年来,机器学习(Machine Learning)领域的研究和发展可谓是与日俱新,各式 ...

  9. lzma算法_十款性能最佳的压缩算法

    数据压缩是保留相同或绝大部分数据前提下减小文件大小的过程.它的原理是消除不必要的数据或以更高效的格式重新组织数据.在进行数据压缩时,你可以选择使用有损方法或无损方法.有损方法会永久性地擦除掉一些数据, ...

最新文章

  1. 5分钟 NLP 系列: Word2Vec和Doc2Vec
  2. iOS - 在UITextField外部触摸时关闭键盘
  3. postgres两条结果集合并无法区分那个表的数据结果集_Hulu在OLAP场景下数据缓存技术实战...
  4. 精通python语言要多久-这样学可以精通Python语言
  5. 这个五月,我拿到了腾讯暑期offer
  6. [转]emailjs-smtp-client
  7. MYSQL----(3)SQL 基本操作
  8. linux指令ls -1,linux命令1--ls
  9. Redis的复制(Master/Slave)
  10. 推行ISO9000的作用及相关知识
  11. 税务Ukey如何进行批量开票
  12. 时间序列复杂性的度量—近似熵和样本熵
  13. 一份完整详细的新媒体营销推广策划方案 (微信微博等)
  14. Python NLP 自然语言处理
  15. 真真正正解决VScode不能安装插件问题、无法连接到应用商城问题
  16. 【豆瓣读书】高分python学习书籍推荐
  17. 漫威金刚狼男主弃影炒币了?
  18. 使用Remix编辑器发布以太坊ERC20高级代币合约
  19. java系统接口开发_模拟用户管理系统java接口开发与测试实战
  20. 二叉树线索化仍不能解决的两个问题及原因

热门文章

  1. 邮件发送---SpringBoot
  2. Java:出生日期转年龄
  3. 第2步 安装git 配置git用户 git的安装和项目的建立
  4. python嵌套列表字典_python中嵌套列表转为字典
  5. 本地方法(JNI)——数值参数与返回值
  6. java异常——异常分类+声明已检查异常+如何抛出异常+自定义异常类
  7. java项目:永和大王项目_Java项目:书评
  8. apache.camel_带有Spring Boot 2支持的Apache Camel 2.22发布
  9. Java XMPP负载测试工具
  10. 使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务