Drools 教程:Drools 规则引擎架构与示例

什么是 Drools?

Drools 是一款用 Java 编写的开源业务规则管理软件 (BRMS),它为用户提供了多种功能,如业务规则引擎、Web 创作、规则管理应用程序以及决策模型和符号 (DMN) 模型的运行时支持。它使用了先进的 rete 模式匹配算法实现系统。

Drools 在 Apache License 2.0 下发布,与任何 JVM 兼容,并且在 Maven Central Repository 中也可用。

Drools 工具帮助您分离业务流程中的逻辑和数据,并对其进行推理。它支持前向和后向链式推理的 Drools 规则引擎。

Drools 分为两部分

  • 创作 – 包括规则文件的开发。
  • 运行时 – 包括工作内存的创建和激活的处理。

什么是规则?

规则是知识的一部分,通常表达为“当特定条件发生时,则执行某些任务”。

规则中最关键的部分是其when 部分。一旦when 部分满足,then 部分就会被触发。

语法

When
<Condition is true>
Then
<Take desired Action>

模式匹配方法

模式匹配方法帮助您将新的或旧的事实与生产规则进行比较。这由推理引擎完成。

用于模式匹配的算法有

  • Rete 算法
  • Leaps 算法
  • 线性算法
  • Treat 算法

然而,Drools 主要使用的算法是 Rete 算法。

Rete 算法

Rete 算法是一种有用的模式匹配算法,可用于实现生产规则系统。它通过节点共享来牺牲内存以提高速度。它还通过节点共享来减少或消除特定类型的冗余。它在不同事实类型之间执行连接时存储部分匹配。

Drools 规则引擎

Drools 规则引擎是一种基于规则的方法,用于在 Drools 软件中实现专家系统。规则引擎提供专家系统,这些系统是基于知识的系统,可帮助您做出决策,例如做什么以及如何做。它将知识收集到知识库中,可用于推理。

Drools 工具套件

现在,在本 Drools 规则引擎教程中,我们将学习 Drools 工具套件。Drools 套件包含以下五种工具:

  • Drools Guvnor:它是 Drools KnowledgeBase 的集中式存储库。
  • Drools Flow:它提供工作流和业务流程。
  • Drools Fusion:用于复杂事件处理的工具。
  • Drools Expert 或规则引擎:用于执行推理的有用工具。
  • Drools Planner:提供自动化规划,包括 NP 难题规划问题。

Drools 中的重要组件

现在,在本 Drools 教程中,让我们学习 Drools 的重要组件。

以下是 Drools 中使用的基本术语

  • Facts – Facts 代表作为规则输入的*数据*
  • Working Memory – 存储 Facts 的地方,用于模式匹配。可以修改、插入和移除。
  • Knowledge Session – 此组件包含触发规则所需的所有资源。在此,所有 Facts 被插入到单个会话中,然后匹配的规则被触发。
  • Knowledge Base – 它代表了 Drools 生态系统中的知识。它存储了规则所在资源的形成。
  • Module – 这是一个模块,存储多个 Knowledge Bases,可以容纳不同的会话。

Drools 的架构

Drools Rule Engine Architecture
Drools 规则引擎架构

Drools 架构的工作系统如下

步骤 1) 规则被加载到规则库中,并一直可用。

步骤 2) Facts 被断言到工作内存中,然后可以对其进行修改或撤回。

步骤 3) 将新的或现有的 Facts 与生产规则进行匹配的过程称为模式匹配,由规则引擎执行。

步骤 4) 议程允许您使用冲突解决策略来管理冲突规则的执行顺序。

Drools 的特性

以下是 Drools 的重要特性

  • 帮助您将应用程序与动态逻辑分离
  • 声明式编程
  • 知识的集中化
  • 速度和可扩展性
  • 将逻辑与应用程序分离
  • 易于理解的规则

如何在 Eclipse 中添加 Drools 插件

现在,在本 Drools 教程中,让我们学习如何在 Eclipse 中添加 Drools 插件。

步骤 1) 点击 jBPM 集成的“Distribution ZIP”
访问 https://www.drools.org/download/download.html 并点击 jBPM 集成的“Distribution ZIP”。下载后,将其解压到硬盘上。

Add Drools Plugins in Eclipse

步骤 2) 安装新软件
Eclipse 中,选择“Install New Software”。

Add Drools Plugins in Eclipse

步骤 3) 点击“Add”按钮
点击“Add”按钮添加软件。

Add Drools Plugins in Eclipse

步骤 4) 浏览文件夹
在下一个屏幕上,点击“Local”并选择“org.drools.updatesite/”文件夹,然后点击“Ok”。

Add Drools Plugins in Eclipse

步骤 5) 点击“Next”按钮
在安装修复页面,点击“Next”按钮。

Add Drools Plugins in Eclipse

步骤 6) 接受许可协议
接受许可协议,然后点击“next”。

Add Drools Plugins in Eclipse

步骤 7) 重启 Eclipse
软件将下载,然后您需要重启 Eclipse。

步骤 8) 安装过程完成
在 Windows > Preferences 菜单中,您会看到 Drools 选项,表明它已安装。

Add Drools Plugins in Eclipse

Drools 程序 Hello World 示例

下面是一个 Drools Hello World 程序的示例

package com.sample
import com.sample.DroolsTest.Message;
rule "Hello World"
 when
	m : Message( status ** Message.Hello, myMessage : message )
  then
System.out.println( myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE ); 
update( m );
end
 rule "GoodBye"

when
	Message( status ** Message.GOODBYE, myMessage : message )
then
System.out.println( myMessage );
end

什么是向前链与向后链?

前向链引擎会检查事实并推导出一个特定的结论。

考虑一个医疗诊断系统的场景。如果将患者的症状作为事实输入到工作内存中,那么很容易诊断出他患有某种疾病。

Backward vs. Forward Chaining

前向链引擎

后向链引擎有一个设定的目标,引擎会尝试去满足它。

考虑同样的医疗诊断场景。假设某种疾病正在流行。这个 AI 可以假设某个特定个体患有该疾病,并根据可用信息尝试确定其诊断是否正确。

Backward vs. Forward Chaining

后向链引擎

为什么使用 Drools 规则引擎?

以下是使用 Drools 规则引擎的主要原因

  • 规则对开发人员和业务分析师来说都很容易理解。
  • 规则易于维护。
  • 规则引擎使用 Rete 算法,该算法指出引擎的性能从不取决于规则的数量。
  • 规则可以在不中断应用程序的情况下进行修改和部署。
  • 将业务逻辑从相对静态的代码库中外部化。
  • 规则以更简单的格式开发,因此业务分析师可以轻松阅读和验证一组规则。
  • 规则允许您创建一个可执行的知识库。
  • Eclipse 等工具可帮助您管理规则,获得即时响应、身份验证和内容支持。

规则引擎的缺点

以下是使用规则引擎的缺点/弊端

  • 开发人员需要投入大量学习精力来了解这种编程方法。
  • 规则引擎不是一种安全的问题排查方法。
  • 需要理解规则引擎的工作原理以消耗更多内存。
  • 对于复杂的分支,有大量的规则。

规则可能会随着时间而改变,并且需要代码更改才能生效。

摘要

  • JBoss Drools 是一个业务逻辑集成平台 (BLiP)
  • Drools 工具的类型有:1) Drools Guvnor 2) Drools Flow 3) Drools Fusion 4) Drools Expert 5) Drools, Planner。
  • Drools 帮助您将应用程序与动态逻辑分离。
  • Fact 代表了作为规则输入的*数据*。
  • 工作内存是一个存储 Facts 的地方,用于模式匹配。它可以被修改、插入和移除。
  • 知识库是一个包含触发规则所需所有资源的组件。
  • 知识会话代表了 Drools 生态系统中的知识。
  • 知识库代表了 Drools 生态系统中的知识。
  • 模块存储多个知识库,可以容纳不同的会话。
  • 规则是知识的一部分,通常表达为“当特定条件发生时,则执行某些任务”。
  • Drools 是一个规则引擎,它使用基于规则的方法来实现专家系统。
  • 前向链引擎会检查事实并推导出一个特定的结论。
  • 后向链引擎有一个设定的目标,引擎会尝试去满足它。
  • Rete 算法是一种有用的模式匹配算法,可用于实现生产规则系统。
  • 规则对开发人员和业务分析师来说都很容易理解。
  • 使用 Drools 这样的规则引擎的主要缺点是,它需要开发人员投入大量学习精力来了解这种编程方法。