Drools概述和基本原理

news2024/11/23 8:44: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://www.coloradmin.cn/o/719783.html

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

相关文章

el-descriptions的使用

el-descriptions的使用 解释&#xff1a; 我们页面有很多无序的列表展示&#xff0c;为了高效得去开发我们得页面&#xff0c;可以借助于这个组件进行适应。图片&#xff1a; 代码&#xff1a; template部分 <el-descriptions class"margin-top" :column"…

IP数据云揭示高风险IP的来源地

在全球网络安全日临近之际&#xff0c;IP数据云揭示高风险IP的来源地。这些高风险IP以其潜在威胁和犯罪活动而闻名&#xff0c;已引起了全球范围内的关注。 根据IP数据云介绍&#xff0c;高风险IP的主要来源地是位于亚洲和东欧的国家其中包括俄罗斯、朝鲜和乌克兰等地。这些地区…

论文阅读:Segment Anything之阅读笔记

目录 引言整体结构介绍论文问答代码仓库中&#xff0c;模型哪部分转换为了ONNX格式&#xff1f;以及如何转的&#xff1f;Mask decoder部分 Transformer decoder block?如何整合image_embedding&#xff0c;image_pe, sparse_prompt_embedding和dense_prompt_embedding的&…

Android Framework基础面试必问习题~

AMS 下面是一些可能会被问到的 Android Framework 中 Activity Manager Service (AMS) 相关的面试题&#xff1a; 1.什么是 AMS&#xff1f; AMS 是 Android framework 中的一个系统进程&#xff0c;它负责管理应用程序生命周期&#xff0c;处理应用程序间的交互和协调不同组…

用Electron将Vue项目打包成桌面版软件

创建Electron项目这里是直接通过官方教程创建的 要检查 Node.js 是否正确安装&#xff0c;请在您的终端输入以下命令&#xff1a; node -vnpm -v这两个命令应输出了 Node.js 和 npm 的版本信息。 创建Electron应用程序 使用脚手架创建 Electron 应用程序遵循与其他 Node.js…

【Squid 代理服务器应用】

目录 一、Squid 代理服务器1、代理的工作机制2、代理服务器的概念及其作用3、Squid 代理的类型 二、安装 Squid 服务1&#xff0e;编译安装 Squid2&#xff0e;修改 Squid 的配置文件3&#xff0e;Squid 的运行控制1、检查配置文件语法是否正确2、启动 Squid&#xff0c;第一次…

在SpringBoot中对es集群的查询操作

在进行查询之前要先给ll索引中插入数据: POST /ll/product/1 {"id":1,"title": "小米手机Mix","category": "手机","brand": "小米","price": 2899.00,"images": "http://ima…

【数据结构】——常见排序算法(演示图+代码+算法分析)

目录 1. 常见排序算法 1.2 稳定性 2. 常见排序算法的实现 2.1 插入排序 2.1.1基本思想 2.1.2代码 2.1.4算法分析 2.2 希尔排序 2.2.1基本思想 2.2.2代码 2.2.3演示图 2.2.4算法分析 2.3 选择排序 2.3.1基本思想 2.3.2代码 2.3.3演示图 2.3.4算法分析 2.4 堆排…

[Visual Studio 报错] error 找不到指定的 SDK“Microsoft

[Visual Studio 2022 报错] error : 找不到指定的 SDK“Microsoft.NET.Sdk.Web” 问题描述&#xff1a; 在新电脑上安装了VS2022&#xff0c;打开现有项目的解决方案后的时候报了这个错&#xff0c;所有projet文件都加载失败,如图所示&#xff1a; 报错分析及解决 打开项目配…

黑客是怎样炼成的?

前言 首先我谈下对黑客&网络安全的认知&#xff0c;其实最重要的是兴趣热爱&#xff0c;不同于网络安全工程师&#xff0c;他们大都是培训机构培训出来的&#xff0c;具备的基本都是防御和白帽子技能&#xff0c;他们绝大多数的人看的是工资&#xff0c;他们是为了就业而学…

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 控件、脚本管理增强

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了&#xff0c;此版本包含了Ribbon&#xff08;功能区&#xff09;自定义…

CSS文本样式

CSS文本样式 1、字体 友情提醒&#xff1a; 字体有没有版权&#xff1f; 省略写法 语法&#xff1a; [ [ <‘font-style’> || || <‘font-weight’> || <‘font-stretch’> ]? <‘font-size’> [ / <‘line-height’> ]? <‘font-fam…

IDEA2023.1.3自带插件禁用,减少内存占用

前言 前两个星期安装了idea2023.1.3&#xff08;之前用的一直是idea2020.3版本&#xff09;&#xff0c;我发现新版界面确实更好看一些&#xff0c;而且启动速度也非常快&#xff0c;打开多个项目也一样很快&#xff0c;都是秒开。但是吧&#xff0c;它的内存占用比idea2020.3…

【若依】框架搭建,前端向后端如何发送请求,验证码的实现,开启注册功能

若依框架 若依框架&#xff08;Ruoyi&#xff09;是一款基于Spring Boot和Spring Cloud的开源快速开发平台。它提供了一系列的基础功能和通用组件&#xff0c;能够帮助开发者快速构建企业级应用。若依框架采用了模块化的设计理念&#xff0c;用户可以选择需要的功能模块进行集…

(03)QEMU模拟ATF启动

QEMU启动 准备一个目录qemu_boot存放所有镜像文件。最终启动需要的镜像如下所示。 Image QEMU_EFI.fd bl1.bin bl2.bin bl31.bin fip.bin flash.bin rootfs.cpio.gz准备镜像 EDK2 下载QEMU_EFI。 wget http://snapshots.linaro.org/components/kernel/leg-virt-tian…

go-redis

安装redis&#xff08;docker&#xff09; sudo docker pull redis sudo docker images 在官网下载redis.conf配置文件 redis官网&#xff1a;http://www.redis.cn/download.html 将下载后的压缩包解压得到redis.conf文件&#xff0c;放到自己的目录&#xff0c;我的是/hom…

数据结构与算法——图

&#x1f60a;数据结构与算法——图 &#x1f680;前言&#x1f680;图的基本概念&#x1f6a2;图的定义&#x1f6a2;图的基本操作&#x1f6a2;无向图和有向图&#x1f6a2;完全图&#x1f6a2;顶点的度、入度和出度&#x1f6a2;子图&#x1f6a2;顶点关系常用术语&#x1f…

我想在我自己的系统中加入微信支付功能,原来这么简单!!!

微信支付功能实现 一、创建SpringBoot项目 我们首先创建一个基本的SpringBoot项目。添加相关的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>&…

php宝塔搭建EMLOG站长工具箱网站自适应PC手机端php源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。本期给大家带来一套站长工具箱网站自适应PC手机端php源码。感兴趣的朋友可以自行下载学习。 技术架构 PHP5.6 nginx mysql5.6 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xff0c;宝塔添…