决策引擎

决策引擎旨在优化规则集的执行性能。

在部署在 Decision Center中启用了 XOM 的决策服务之前,缺省情况下会将规则编译为可执行代码 (Java™ 字节码)。 对于未启用 XOM 的决策服务, Decision Center 将规则编译为仅需要在运行时最终转换为可执行代码的中间代码。

提示: Rule Designer 缺省情况下将规则编译为可执行代码。 取消选择 " Rule Designer " 中 " 导出规则集归档 " 页面上的 优化规则集装入 (Java 字节码生成) 选项,以将规则编译为中间代码。

决策引擎随附以下功能部件:

  • 快速路径,顺序和 RetePlus 执行方式
  • 使您能够存储和处理应用程序对象的工作内存和议程功能
  • 列出有资格执行的规则实例并对其进行排序的议程

使用决策引擎运行规则的工作流程

要使用决策引擎运行规则,请执行以下步骤:

  1. 创建规则项目以封装旧应用程序的业务逻辑。

    如果这些应用程序基于 COBOL ,请使用 Rule Designer 中的 COBOL 管理功能(请参阅为 COBOL 模型设计 BOM )。

  2. 如果需要,请将规则项目的 规则引擎 属性设置为 决策引擎。 当规则项目包含 ILOG ® Rule Language (IRL) 中的 BOM 到 XOM 映射时,该映射将迁移到 Advanced Rule Language (ARL) 中的 BOM 到 XOM 映射。 迁移仅发生一次 (请参阅 BOM 到 XOM 映射迁移)。
  3. Rule Designer中测试规则的执行。
  4. 将规则集部署到分布式平台的 Rule Execution ServerWebSphere® Application Server for z/OS® 或 zRule Execution Server for z/OS 上的 Rule Execution Server 的持久性层 (请参阅 部署业务规则)。
  5. 调用规则集:

    在使用 Rule Execution Server运行规则时, API 使用规则集中定义的 Rule Engine 属性来确定运行规则的引擎。

BOM 到 XOM 映射迁移

首次将规则项目的 规则引擎 属性从 经典规则引擎 更改为 决策引擎时,将执行 BOM 到 XOM 映射的迁移。

迁移不会修改 IRL (.b2x 文件) 中的原始 BOM 到 XOM 映射,但会创建新文件 (.b2xa) 来存储迁移的代码,这使用户能够在引擎之间来回切换。

创建后,每个文件将单独保留您对特定引擎所作的更改,但这两个文件之间的更改不会同步。 如果切换到 经典规则引擎 并修改 BOM 到 XOM 映射,那么将修改 .b2x 文件。 如果切换回 决策引擎,那么不会修改 BOM 到 XOM 的映射; .b2xa 文件保持不变。

无法迁移某些 IRL 语句,因此迁移的代码可能包含没有主体的方法。 您必须在 ARL 中的 .b2xa 文件中对这些缺少的行进行编码。

编译和执行

决策引擎将规则工件编译到一个归档中,该归档包含转换为 Java 字节码时可执行的已编译和优化代码。

相比而言,使用经典规则引擎构建的规则集包含一组必须在任何编译和优化之前进行解析的文本文件。 在装入规则集时,解析,编译和优化代码是苛刻的任务。

因此,在决策引擎中装入规则集的速度更快,因为在运行时不会解析或解释任何代码。 所有代码都已编译 (到中间代码或 Java 字节码) 并针对规则执行进行了完全优化。

下图显示了使用或不使用 Java 字节码生成的经典规则引擎和决策引擎的编译和执行过程。 此过程经历从规则初始编译到规则执行的不同阶段。

经典规则引擎与决策引擎之间的比较。
重要信息: 字节码生成可缩短使用决策引擎构建的规则集的装入时间。 在 Rule DesignerDecision Center中,缺省情况下会选择字节码生成选项。 但是,对于 Decision Center,您必须已启用 XOM 管理才能激活字节码生成。 通过 Rule Execution Server,可以优化从中间代码到 Java 字节码的转换。 您可以使用已编译的归档高速缓存将此字节码生成限制为首次装入决策引擎规则集时。 有关更多信息,请参阅 设置已编译的归档高速缓存

下表比较了经典规则引擎与决策引擎之间的差异。

表 1. 规则引擎之间的差异
经典规则引擎 决策引擎
规则将转换为 IRL ,这是规则的低级文本表示。 此引擎实现不依赖于 IRL。 BAL 规则改为转换为高级规则语言 (ARL)。 在 Rule Designer中, BAL 规则和决策表的 ARL 选项卡提供了规则编译的预览。

在 BOM 编辑器中,您可以直接使用 ARL 来为为决策引擎设计的规则项目定义 BOM 到 XOM 映射。

此外,您仍可以在技术规则,规则流操作任务和函数中使用 IRL ,与经典规则引擎一样。

使用以下语句将双精度值转换为 BigDecimal 对象: new java.math.BigDecimal(java.lang.Double.toString(java.lang.Math.exp(value.doubleValue()))); 使用以下语句将双精度值转换为 BigDecimal 对象: scoreResponse.cpScore = new java.math.BigDecimal(Math.exp(value.doubleValue()));
经典规则引擎以不同方式处理规则工件:
  • 将解释规则流和 RetePlus 规则操作。
  • 使用 useJit 属性的 RetePlus 规则条件编译为字节码。
  • 使用顺序和快速路径算法的规则将编译为字节码。

有关执行方式的信息,请参阅 引擎执行方式

在部署之前,规则和规则流完全编译为中间代码或 Java 字节码。
规则集归档 .jar 文件包含 IRL 文本文件中的规则。 规则集归档 .dsar 文件由包含规则和规则流的执行代码的二进制文件组成。