Drools用户手册翻译——第四章 Drools规则引擎(八)drools中的事实传播模式和议程评估过滤器

news2024/11/16 4:50:32

甩锅声明:本人英语一般,翻译只是为了做个笔记,所以有翻译错误的地方,错就错了,如果你想给我纠正,就给我留言,我会改过来,如果懒得理我,就直接划过即可。  

 

drools中的事实传播模式

drools支持下面的事实传播模式,这些模式决定了drools如何通过引擎网络推进插入的事实,用来为执行规则做准备:

  • Lazy(延迟模式):(默认) 事实在规则执行时在批量集合中传播,而不是作为插入的单条事实去实时传播。因此,事实最终的传播顺序,和事实插入的顺序是不一样的。

  • Immediate(立即模式):事实会立即传播,而且事实传播的顺序就是事实插入时的顺序。

  • Eager(急切模式):事实被延迟传播(在批处理集合中),但是是在规则执行之前。drools的这种传播行为是为了那些设置了no-loop或者lock-on-active属性的规则。

默认的,为了全面提高规则评估,drools的Phreak规则算法使用懒加载事实传播。但是,在少数情况下,懒加载能改变某些规则执行的预期结果,这些规则执行就需要立即传播或者eager传播。

例如,下面的规则用?前缀的指定查询,用来仅拉取或被动方式调用查询:

使用被动查询规则的示例

query Q (Integer i)
    String( this == i.toString() )
end

rule "Rule"
  when
    $i : Integer()
    ?Q( $i; )
  then
    System.out.println( $i );
end

对于这个例子,在插入整数之前,只有当插入满足查询的字符串时,规则才会被执行,例如下面的示例命令:

触发规则执行的示例命令

KieSession ksession = ...
ksession.insert("1");
ksession.insert(1);
ksession.fireAllRules();

但是,由于在Phreak中默认的传播行为是懒加载,drools没有检测到两个事实的插入顺序,所以,不论字符串和整数的插入顺序如何,这个规则都会执行。对于这个例子,为了预期的规则评估,需要立即传播。

在这个情况下,为了完成预期的规则评估,更改drools的传播模式,你可以在你的规则上添加@Propagation(<type>)注解,并且设置<type>为LAZY,IMMEDIATE或者EAGER。

这相同的示例规则下,立即传播注解能够像预期的那样执行规则评估:

使用被动查询和指定传播模式的规则示例

query Q (Integer i)
    String( this == i.toString() )
end

rule "Rule" @Propagation(IMMEDIATE)
  when
    $i : Integer()
    ?Q( $i; )
  then
    System.out.println( $i );
end

议程评估过滤器

图示5.议程过滤器

drools在过滤器接口中支持AgendaFilter对象,在议程评估阶段,这个对象可以允许或者拒绝指定规则的评估。你可以指定一个议程过滤器作为fireAllRules方法调用的一部分。

下面的实例代码 只允许带有字符串"Test"结尾的规则被评估和执行。所有其他的规则都会被过滤器过滤掉。

议程过滤器的定义示例

ksession.fireAllRules( new RuleNameEndsWithAgendaFilter( "Test" ) );

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/806276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序开发每日一写--5

按钮的使用和底层逻辑的实现&#xff08;暂未成功&#xff09; WXML&#xff1a; <button class"bth1"type"primary" >按钮</button>JS&#xff1a; // index.js // 获取应用实例 //const app getApp() Page({/*bthTapHandler(e){//按钮的…

C动态内存分配

&#x1f388;对比一般内存分配和动态内存分配 &#x1f308;一般内存分配 int val 20; char arr[10] {0};特点&#xff1a; ①大小是固定的&#xff0c;一旦分配好就无法改变&#xff08;数组必须指定大小后编译器才能分配空间&#xff09; ②分配的空间具体放置什么类型的…

ffmpeg批量分割视频解决视频前几秒黑屏的问题解决

echo 请输入视频地址&#xff1a; set /p fp echo 请输入开始时间&#xff1a; set /p st echo 请输入结束时间&#xff1a; set /p et echo 请输入分片时间&#xff1a; set /p sgt echo 注意&#xff1a;循环范围参数要空格。 for /l %%i in (%st%, %sgt%, %et%) do call :aa…

【Spring AOP学习】AOP的组成 SpringAOP的实现和实现原理

目录 一、认识SpringAOP 1、AOP是什么&#xff1f; 2、AOP的功能 3、AOP的组成&#xff08;重要&#xff09; 二、SpringAOP的实现 &#x1f337;1、添加Spring AOP框架支持 &#x1f337;2、定义切面和切点 &#x1f337; 3、定义通知 3.1 完成代码实现 3.2 具体通知…

目前可以实现用手机操作水质自动采样器吗

利用自动采样器进行水样采集可以说节省很大的人力物力&#xff0c;但是有时为了采到更具代表性的水样&#xff0c;我们需要对沟渠、深井、排污口等特殊场景进行采样。像这些狭小的空间领域采样就有点困难&#xff0c;对现场工作人员就带来了一些难题。所以也需要一款可以在井下…

HCIP——OSPF的防环机制

OSPF的防环机制 一、域间防环二、域内防环有向图转化1、有向图的画法2、示例&#xff1a; 三、SPF算法 OSPF将整个OSPF域划分为多个区域&#xff0c;区域内部通过拓扑信息计算路由&#xff0c;区域间传递路由信息&#xff0c;实现全网可达。OSPF防环机制主要是体现在域内防环和…

python3GUI--我的二维码生成工具By:PyQt5(附UI源码)

文章目录 一&#xff0e;前言二&#xff0e;展示1.主界面2.主界面-选择颜色&#xff08;动图&#xff09;3.主界面-选择样式&#xff08;动图&#xff09; 三&#xff0e;思路1.UI设计2.核心3.其他1.为什么调整了样式左侧二维码就跟着变化2.首次启动软件生成的文件哪里来的3.作…

华为8月8日将推出系统云翻新功能:P40/Mate 30系列首发

7月28日消息&#xff0c;7月28日消息&#xff0c;华为终端公司近日在微博上发布重要公告&#xff0c;宣布将于8月8日推出全新的系统云翻新功能。据悉&#xff0c;该功能将首次应用于华为 P40 系列手机和 Mate30 系列手机&#xff0c;为用户提供更便捷的手机数据备份和恢复体验。…

如何降低机场人员定位系统成本?哪种方案简单又好用?

一、方案简介 机场是一个室内空间巨大的人员聚集地差旅人员找不到出入口、卫生间、商铺为找检票口而误车等是很常见的现状。面对这些问题&#xff0c;机场信息数字化建设成为一种最为有效的解决方式&#xff01; 华安联大通过多技术融合实现室内外位置健全&#xff0c;推出一…

【机密计算-大厂有话说】微软 Azure

什么是机密计算&#xff1f; 机密计算是由机密计算联盟 (CCC) 定义的一个行业术语&#xff0c;CCC 是专注于定义并加速机密计算落地的基金会。 CCC 给机密计算的定义是&#xff1a;通过在基于硬件的可信执行环境 (TEE) 中执行计算来保护使用中的数据。 TEE 是是一个只能执行授权…

Jetbrains idea 代码关闭 注释自动渲染 导致换行不生效

方法1 关闭注释自动渲染 取消勾选 方法2 结尾使用 <br> 强制换行

【Python】logging模块笔记

目录 日志级别 四个组件 记录器 处理器 处理器 格式化器 格式 用法1&#xff1a;小项目可以采用编程的方法 用法2&#xff1a;建议采用配置文件的方式 用法3&#xff1a; 字典配置 日志级别 #默认的日志输出为warning # 使用baseConfig() 来指定日志输出级别 # 同时&#x…

每日一题——找到消失的数字

找到消失的数字 题目链接 思路 一个长度为n的数组中所有数据的范围在[1,n]内&#xff0c;题目要求我们找出在[1,n]范围内&#xff0c;但数组中没有出现的数字 如果可以使用额外空间&#xff0c;那这题就好办了。我们直接创建一个相同大小的数组&#xff0c;数组的每个位置代…

三. 多传感器标定方案(空间同步)--2

前面的内容&#xff1a; 一. 器件选型心得&#xff08;系统设计&#xff09;--1_goldqiu的博客-CSDN博客 一. 器件选型心得&#xff08;系统设计&#xff09;--2_goldqiu的博客-CSDN博客 二. 多传感器时间同步方案&#xff08;时序闭环&#xff09;--1 三. 多传感器标定方案…

AI聊天GPT三步上篮!

1、是什么&#xff1f; CHATGPT是OpenAI开发的基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构的聊天型人工智能模型。也就是你问它答&#xff0c;根据网络抓去训练 2、怎么用&#xff1f; 清晰表达自己诉求&#xff0c;因为它就是一个AI助手&#…

【腾讯云 Cloud Studio 实战训练营】Cloud Studio实现健康上报小程序(代码开源)

目录 &#x1f373;前言&#x1f373;实验介绍&#x1f373;产品介绍&#x1f373;注册Cloud Stdio&#x1f373;后端Spring服务&#x1f373;创建项目上传项目数据库连接与导入 &#x1f373;Vue后台管理创建项目编辑模板信息选择环境镜像上传资源文件 &#x1f373;小程序⭐总…

容器演进时间轴及容器技术演进

1.1 1979年 — chroot 容器技术的概念可以追溯到1979年的UNIX chroot。 它是一套“UNIX操作系统”系统&#xff0c;旨在将其root目录及其它子目录变更至文件系统内的新位置&#xff0c;且只接受特定进程的访问。 这项功能的设计目的在于为每个进程提供一套隔离化磁盘空间。 …

NIM游戏/SG函数

NIM游戏 先看一下一维 NIM游戏。 有一堆大小为 n 的石子&#xff0c;甲和乙轮流从石堆里面拿石子&#xff0c;不能一次拿掉所有石子&#xff0c;取走最后一个石子的人获胜&#xff0c;甲先开始&#xff0c;谁是必胜的&#xff1f; 显然&#xff0c;谁先手&#xff0c;谁就获胜…

蓝桥杯单片机第五届国赛 真题+代码

onewire.c /* # 单总线代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */// #include …

Opencv的Mat内容学习

来源&#xff1a;Opencv的Mat内容小记 - 知乎 (zhihu.com) 1.Mat是一种图像容器&#xff0c;是二维向量。 灰度图的Mat一般存放<uchar>类型 RGB彩色图像一般存放<Vec3b>类型。 (1)单通道灰度图数据存放样式&#xff1a; (2)RGB三通道彩色图存放形式不同&#x…