Drools概述和基本原理

article/2025/9/8 21:26:43

目录

​编辑

 一、Drools是什么?

 二、Drools使用场景

 三、Drool架构内容

3.1 总体架构

 3.2 构成内容说明

 3.2.1 Rules

 3.2.2 Production memory

 3.2.3 Facts

 3.2.4 Working memory

 3.2.5 Pattern matcher

 3.2.6 Agenda

 四、为什么要用规则引擎?

 4.1 声明式编程

 4.2 逻辑与数据分离

 4.3 规则集中管理

 4.4 可读性高

 五、不同规则引擎的对比

 六、Drools规则引擎原理分析

 6.1 rete算法介绍

 6.2 原理

 6.2.1 正向推理(Forward-Chaining)

 6.2.2 反向推理(Backward-Chaining)


 一、Drools是什么?

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

Drools 具有一个易于访问企业策略、易于调整以及易于管理的开源业务 规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验已编码的规则是否执行了所需的业务规则。其前身是 Codehaus 的一个开源项目叫 Drools,后被纳入 JBoss 门下,更名为 JBoss Rules,成为了 JBoss 应用服务器的规则引擎。

 二、Drools使用场景

业务领域示例
财务决策贷款发放,征信系统
库存管理及时的供应链路
票价计算航空,传播,火车及其他公共汽车运输
生产采购系统产品原材料采购管理
风控系统风控规则计算
促销平台系统满减,打折,加价购

 三、Drool架构内容

3.1 总体架构

 3.2 构成内容说明

 3.2.1 Rules

我们自己定义的业务规则,比如我们自己写的规则文件。所有规则必须至少包含触发规则的条件和规则规定的操作。

 3.2.2 Production memory

规则存储在 Drools 引擎中的位置。

 3.2.3 Facts

输入或更改到 Drools 引擎中的数据,Drools 引擎匹配规则条件以执行适用规则。在规则中修改了Fact对象的值,真实的JavaBean的数据也会发生改变。 比如:当我们调用ksession.insert(对象),那么插入的这个对象就可以理解成Facts对象。

 3.2.4 Working memory

facts 在 Drools 引擎中存储的位置。drools规则引擎会从Working Memory中获取数据并和规则文件中定义的规
则进行模式匹配,所以我们开发的应用程序只需要将我们的数据插入到Working Memory中即可。

 3.2.5 Pattern matcher

匹配器,将Rule Base中所有的规则与Working memory中的Fact对象进行模式匹配,匹配成功的规则将被激活并放入到Agenda中。

 3.2.6 Agenda

议程,用于存放通过匹配器进行模式匹配后被激活的规则。

 四、为什么要用规则引擎?

 4.1 声明式编程

规则引擎允许您说“该怎么做”,而不是“怎么做”。基于该思想,使用规则可以使表达困难问题的解决方案变得容易,并且规则比代码容易阅读。

 4.2 逻辑与数据分离

数据在域对象中,逻辑在规则中,随着将来的变化,逻辑可以更容易维护,可以将逻辑全部组织在一个或多个非常不同的规则文件中,而不是将逻辑分布在许多域对象或控制器中。

 4.3 规则集中管理

通过使用规则,可以创建可执行的规则库,并将这些规则集中编写和管理。如存放到某个目录或者数据库。

 4.4 可读性高

通过创建对象模型以及(可选)为问题域建模的领域特定语言,可以设置自己编写与自然语言非常接近的规则。他们以自己的语言表达自己的逻辑,这可能是非技术领域的专家可以理解的,并且所有程序都经过检查,而技术知识则隐藏在常规代码中。

 五、不同规则引擎的对比

除了Drools以外,还有一些其他规则引擎,包括:

1)CLIPS

2)Jess

3)OpenL Tablets

4)JBoss Rules/Drools Fusion

5)IBM Operational Decision Manager (ODM)

6)Azul Zulu Rule Engine

FeatureDroolsCLIPSJessOpenL TabletsJBoss Rules/Drools FusionIBM ODMAzul Zulu Rule Engine
开源/商业商业开源商业商业商业商业商业
语言支持JavaCLIPSJessJavaJavaJavaJava
可视化界面支持不支持不支持不支持支持支持支持
规则表达式语言DSL/FLRCLIPSJessExcelDSL/FLRODMPegaRules PRPC
事实模型POJO原生类型POJOPOJOPOJOXOMPOJO
性能中等较高较高中等中等中等

从上表可以看出,Drools和其他规则引擎之间存在一些差异,例如语言支持、可视化界面、规则表达式语言、事实模型等。因此,选择规则引擎时,需要考虑自己的业务需求和技术能力,以及引擎的性能、易用性、可扩展性等因素。此外,也需要考虑预算和开源/商业授权模型等因素。

 六、Drools规则引擎原理分析

 6.1 rete算法介绍

Rete 算法最初是由卡内基梅隆大学的 Charles L.Forgy 博士在 1974 年发表的论文中所阐述的算法 , 该算法提供了专家系统的一个高效实现。自 Rete 算法提出以后 , 它就被用到一些大型的规则系统中 , 像 ILog、Jess、JBoss Rules 等都是基于 RETE 算法的规则引擎 。
Rete 在拉丁语中译为”net”,即网络。Rete 匹配算法是一种进行大量模式集合和大量对象集合间比较的高效方法,通过网络筛选的方法找出所有匹配各个模式的对象和规则。
其核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果。Rete 算法可以被分为两个部分:规则编译和规则执行 。当 Rete 算法进行事实的断言时,包含三个阶段:匹配、选择和执行,称做 match-select-act cycle。

 6.2 原理

在 AI 领域,产生式系统是一个很重要的理论,产生式推理分为正向推理和逆向推理产生式,其规则的一般形式是:IF 条件 THEN 操作。rete 算法是实现产生式系统中正向推理的高效模式匹配算法,通过形成一个 rete 网络进行模式匹配,利用基于规则的系统的时间冗余性和结构相似性特征 ,提高系统模式匹配效率。

 6.2.1 正向推理(Forward-Chaining)

正向推理也叫演绎法,由事实驱动,从一个初始的事实出发,不断地从应用规则得出结论。首先在
候选队列中选择一条规则作为启用规则进行推理,记录其结论作为下一步推理的证据。如此重复这个过程,直到再无可用规则可被选用或者求得了所要求的解为止。

 6.2.2 反向推理(Backward-Chaining)

反向推理也叫归纳法,由目标驱动,首先提出某个假设,然后寻找支持该假设的证据,若所需的证
据都能找到,说明原假设是正确的,若无论如何都找不到所需要的证据,则说明原假设不成立,此时需要另作新的假设。

如果觉得对您有帮助,欢迎点赞+收藏+关注!


http://chatgpt.dhexx.cn/article/FWp3XIBs.shtml

相关文章

Uipath Workbook与Excel差别

学习目标: 了解Uipath Workbook与Excel 两组差别 Workbook 使用Workbook: 1.所有工作簿活动都将在后台执行。 2.不需要安装Microsoft Excel,只需在Excel应用程序中不打开文件,就可以更快、更可靠地进行某些操作。 3.仅适用于.xls和.xlsx文件…

Workbook.SaveAs方法

Workbook.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local) excel vba 保存代码 Sub 保存工作簿() ThisWorkbook.Save .save相当于按…

Workbook

工作需要。话不多说。 我们来看传统的poi。使用HSSFWorkbook创建2003格式为xls后缀的文档。如下: [html] view plain copy public String toTotal() { String strs "40288b163a72fd15013a730d44430004,40288b163a72fd15013a730d44430004," &q…

excel workbook

引用不同的workbook 1.索引号 workbooks.item(3)workbooks(3) 2.名称 当新建的文件,并没有保存的时候 workbooks(“book1”) 当已经存在的文件,要加上后缀 workbooks(“book1.xls”) workbook信息 cell…

UserWarning: Workbook contains no default style, apply openpyxl‘s default warn no default style 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。 本文主要介绍了UserWarning: W…

VBA基础,工作簿workbook相关的方法和属性

0 我觉得VBA和VB,VBS最大的区别就在A(application)上了 所以application里的 workbook , worksheet range ,cell等应该是VBA语言的核心,最复杂内容了 本身VBA里的VB语言部分,其实和很多语言语法结构也差不多每种语言的差别一在…

Python操作excel文件创建workbook和批量创建Sheet

第一步,创建workbook和sheet from openpyxl import WorkbookwbWorkbook() wb.create_sheet(index1,title"sheet2")wb.save(test1.xlsx)创建成功,workbook 名称test1,有sheet 和sheet2两张表 第二步,批量创建多个sheet …

SpringBoot使用Workbook读取excel中内容

SpringBoot使用Workbook读取excel中内容 maven文件中导入依赖 获取excel文件 FileInputStream fileInputStream new FileInputStream("文件路径");获取Workbook对象 Workbook workbook new XSSFWorkbook(fileInputStream);获取Sheet对象 Sheet sheet workbook.…

已解决ModuleNotFoundError: No module named ‘Workbook‘

已解决(python xlwt库写入Excel表格报错)ModuleNotFoundError: No module named ‘Workbook‘ 文章目录 报错代码报错翻译报错原因解决方法千人全栈VIP答疑群联系博主帮忙解决报错 报错代码 粉丝群里的一个小伙伴,想用xlwt库写入Excel表格的…

【干货】Python:load_workbook用法(持续更新)

【干货】Python中load_workbook用法(持续更新) 功能方法示例文件模块读取导入excel表格获取Sheet查看行与列查看单元格批量访问数据 功能 读取excel文件,并进行操作 方法 示例文件 本文用到的示例文件为一个excel表格,含有名为…

【Python_笔记】openpyxl中Workbook()和.load_workbook()区别

记录学习旅程~ 欢迎各位道友指教与交流~ 准备开始实操时发现一个问题,即Workbook()是创建一个类对象,而load_workbook()是一个方法加载存在的excel。 由于在学习openpyxl时吸取了不同教程,按照读取→编辑→再编辑→保存的逻辑列举了常用的基…

POI(excel)中WorkBook和Sheet应用实践总结

WorkBook定义 工作簿的高级表现形式,是sheet的上级对象。一个excel就是一个工作簿,一个工作簿含有多个工作表(sheet)。 【1】WorkBook两种创建形式 ① 使用直接对象 // 03版本 .xls org.apache.poi.hssf.usermodel.HSSFWorkbook or //07版本 .xls…

Java多线程:Executors

Executors类位于java.util.concurrent包下,提供了一些方便构建ThreadPoolExecutor和线程管理的方法。 主要方法有以下几个: 1.创建一个固定大小的线程池 public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecu…

【Java多线程】线程池【ExecutorServicec和Executors】

➤ Java多线程编程【一文全解】 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大; 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放…

为什么不建议用Executors创建线程池???

来源 | www.cnblogs.com/zjfjava/p/11227456.html 01、通过Executors创建线程池的弊端02、通过ThreadPoolExecutor创建线程池03、ThreadPoolExecutor参数解释04、corePoolSize & maximumPoolSize05、keepAliveTime & unit06、等待队列07、拒绝策略08、ThreadPoolExecut…

Executors和ThreadPoolExecutor详解

概述 在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资…

4.Executor执行器

1.Executor 主体结构 Executor是MyBatis执行者接口,执行器的功能包括: 基本功能:改、查,没有增删的原因是,所有的增删操作都可以归结到改。缓存维护:这里的缓存主要是为一级缓存服务,功能包括…

ExecutorService

本文翻译自http://tutorials.jenkov.com/java-util-concurrent/executorservice.html,人工翻译,仅供学习交流。 ExecutorService java.util.concurrent.ExecutorService接口是一种能够在后台并发执行任务的异步执行机制。本文中,我将会介绍…

Executor概述

在Java类库中,任务执行的主要抽象不是Thread,而是Executor。 public interface Executor {void execute(Runnable command); }它为灵活且强大的异步任务执行框架提供了基础,该框架能支持多种不同类型的任务执行策略。它提供了一种标准的方法…

Executor框架简介

Executor系统中,将线程任务提交和任务执行进行了解耦的设计; 线程被一对一映射为服务所在操作系统线程,启动时会创建一个操作系统线程;当该线程终止时,这个操作系统线程也会被回收 Executor框架包含的核心接口和主要的实现类 具体…