基于drools

前一段时间,我写了一篇有关我们新算法的博客: http : //blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html

有人问我有关新的基于堆栈的系统以及向后链接如何工作的信息。 我在电子邮件中回复了他们,但我认为其他人可能会觉得有用,因此将其粘贴在下面。 它是从我的大脑直接写到页面上的,因此在某些地方有点粗糙。 但我希望有人觉得它有用,无论如何。

-

评估规则时,它会从根到尖端进行评估。

对于每个节点,它评估所有可能的联接并生成一个元组集。 然后,该子元组集将传递到子节点。 传入的元组集称为srcTupleSet(用于变量名),然后将所有子级放入trgTupleSet中。 trgTupleSet传递到子节点,在此它成为srcTupleSet。

第245行显示了此循环: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java#L245

srcTuples = trgTuples; // previous target, is now the source

输入节点后,它具有许多评估该节点所需的变量。 节点ID,节点内存,段内存,srcTupleSet,trgTupleSet。 通过创建引用这些值的StackEntry,可以暂停和恢复任何节点(在稍后的时间进行评估)。 StackEntry放置在堆栈上。 这是StackEntry类: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/StackEntry.java

出于两个原因需要这样做,即反向链接和子网。 向后链接是通过查询节点完成的。

当传播到达查询节点时,它需要暂停对当前规则的评估-因此它创建了StackEntry并将其放置在堆栈中。

第459行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java#L459

查询只是没有RHS的规则,没有后果。 它收集到达终端节点的所有结果,并将它们返回给调用方。 查询节点允许规则通过传入参数来调用查询。 通过插入DroolsQuery对象(与根模式匹配并触发传播)来完成查询的调用:

参见第67行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/PhreakQueryNode.java

LeftInputAdapterNode.doInsertObject(handle, pCtx, lian, wm, lm, false, dquery.isOpen());

像序言一样,参数可以绑定或不绑定。 绑定参数是一个固定变量,而未绑定参数是一个固定变量。 在实现方面,我们不对未绑定的参数施加约束。 这允许经典的序言“传递闭包”类型查询。 尽管规则可以调用查询,但是查询也可以调用查询(我们没有制表法来检测无限循环)。

query isContainedIn( String x, String y )Location( x, y; )or( Location( z, y; ) and isContainedIn( x, z; ) )
end

注意drools支持模式中的位置参数和空位参数。 这是通过将所有位置映射到插槽来完成的。

可以在以下位置找到有关React式和非React式传递闭包的上述查询的逐步说明, 网址为 : https : //www.youtube.com/watch?v=fCjIRVSRFvA

对于评估查询,当trgTulupleSet到达终端节点时,它将迭代并将每个元组添加到“收集器”中。

参见第65行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/PhreakQueryTerminalNode.java#L65

收集器创建一个特殊的子元组,可以将其添加到调用父级。

参见第343行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/reteoo/QueryElementNode.java#L343

查询完成评估后,它将返回。 然后,重新调整过程允许执行程序访问堆栈,并在其中弹出StackEntry并恢复评估-但是现在查询结果可用。

参见第166和173行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java

可以React性和非React性地调用查询。 非React式意味着没有剩余内存,查询也没有打开。 React地意味着有剩余的内存,查询保持打开状态。 React式查询是完全增量式的,并且支持更新和删除:

参见第143和169行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/PhreakQueryNode.java#L143

我们用于元组和“嵌套”(查询结果)元组的数据结构高效,“无复制”和“无搜索”-都是双链表。 这对于使增量查询有效很有必要。

子网使用类似的技术。 在到达子网的点上,外部规则被挂起(放在堆栈上),并创建内部网络评估。

参见593和604行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java

子网完成后,外部规则将恢复并将结果放入外部子节点的正确输入中:

第662行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java#L662

如前所述,当前我们提供惰性规则评估,但不提供增量规则评估。 一旦开始规则评估,就会生成所有元组。 但是,由于堆栈条目可以在任何节点中暂停和恢复,因此它也可以用于提供增量规则评估-尽管我们现在不这样做。 实际上,您在正确的输入上“获取”了X个对象-可以是1或5或25或100。该数量允许您调整延迟与吞吐量。 进行取整后,如果仍然有未评估的正确输入,则创建一个StackEntry,在当前传播完成后,强制对该节点进行重新评估。

参考: Drools: Drools&jBPM博客上来自JCG合作伙伴 Geoffrey De Smet的基于PHREAK堆栈的评估和向后链接 。

翻译自: https://www.javacodegeeks.com/2014/01/drools-phreak-stack-based-evaluations-and-backward-chaining.html

基于drools

基于drools_Drools:基于PHREAK堆栈的评估和向后链接相关推荐

  1. Drools:基于PHREAK堆栈的评估和向后链接

    前一段时间,我写了一篇有关我们新算法的博客: http : //blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html 有人问我有关新的基于 ...

  2. 读“基于机器学习的无参考图像质量评估综述”有感

    读"基于机器学习的无参考图像质量评估综述"有感 摘要: 无参数图像质量评价(NRIQA)因其广泛的应用需求一直以来都是计算机视觉及其交叉领域的研究热点.回顾近十几年来基于机器学习的 ...

  3. R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵、并使用summary函数基于混淆矩阵输出分类模型评估的其它详细指标(kappa、npv等13个)

    R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵(confusion matrix).并使用summary函数基于混淆矩阵输出分类模型评估的其它详细 ...

  4. linux提升nvme性能,基于SPDK的NVMe SSD性能评估指南

    原标题:基于SPDK的NVMe SSD性能评估指南 一 通过fio工具测试磁盘性能 SPDK采用异步I/O(Asynchronous I/O)加轮询(Polling)的工作模式,通常与Kernel的异 ...

  5. 【2016年第4期】基于仿真大数据的效能评估指标体系构建方法

    司光亚,高翔,刘洋,吴琳 国防大学信息作战与指挥训练教研部,北京 100091 摘要:针对武器装备效能评估指标体系中评估指标之间存在的相互依赖与影响关系以及评估过程主观性较强的情况,提出一种基于仿真大 ...

  6. 配电网可靠性评估(4)—(顶刊复现)基于优化模型的配电网可靠性评估

    之前的博客中介绍了配电网可靠性评估的三种方法.分别是解析法中的最小路法,以及序贯蒙特卡罗模拟法及非序贯蒙特卡洛模拟法,顺带提到了含有分布式电源的配电网可靠性评估方法. 配电网可靠性评估(一)最小路法和 ...

  7. 基于 NXP S32K116 PJF7992 的 PEPS 评估板方案

    PEPS(Passive Entry & Passive Start System)无钥匙进入与无钥匙启动系统,该项技术被广泛应用于车辆门禁无钥匙进入系统.车辆无钥匙启动系统.电摩接近检测系统 ...

  8. 基于JAVA基于网络平台个人博客系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA基于网络平台个人博客系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA基于网络平台个人博客系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. 基于java基于vue的百乐儿童玩具公司管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于vue的百乐儿童玩具公司管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于vue的百乐儿童玩具公司管理系统计算机毕业设计源码+系统+lw文档+my ...

最新文章

  1. 通过SWD J-Link使用J-Link RTT Viewer来查看打印日志
  2. pmp思维导图 第六版_PMP考试技巧攻略(上)
  3. 织梦php版本图片不能上传,织梦Dedecms会员中心无法上传图片的解决方法
  4. 从腾讯入职到离职,我仅用了三周:做大数据的同事看不起做报表的
  5. [再寄小读者之数学篇](2014-05-27 矩阵的迹与 Jacobian)
  6. 一、安装mysql 单机版
  7. WIN7无法调试安卓手机,ADB Interface显示黄色叹号
  8. c语言入门基础知识总结
  9. 电子证件照尺寸怎样裁剪?怎么把照片裁剪成2寸?
  10. 赫尔维兹_勒奇超越函数(matlab自编函数)
  11. 强化学习经典应用环境-Atari 2600游戏合集
  12. mysql保存为vna文件_微机 模拟试题三(含答案)
  13. 43_sql注入绕waf
  14. 计算机起源于发展论文,关于计算机起源及发展的论文
  15. 如何统计网站的在线人数呢?
  16. AWD比赛入门攻略总结
  17. checkbox 设置默认选中
  18. 古诗+代码 = 绝配
  19. Python游戏制作(一)
  20. 20230614-2

热门文章

  1. 一个正则表达式酿成的惨案
  2. 乐观锁的一种实现方式——CAS
  3. 计算机入门的一些常用小技巧总结
  4. 《认知红利》读书笔记
  5. Photoshop的基本操作
  6. vue的基本项目结构
  7. 2015c语言9月答案,2015年9月计算机二级C语言预测题答案
  8. php oracle 无查询结果,php - Oracle Insert查询不起作用,也不会抛出任何错误 - 堆栈内存溢出...
  9. 基于centos8搭建zookeeper集群
  10. 如何创建虚拟硬盘 + os 读取硬盘参数代码