19.5. 定价示例决策(精确表)
账单示例决策演示了如何使用电子表格决策表来计算以 tabular 格式而不是直接在 DRL 文件中计算过期策略的成本。
以下是隔离示例的概述:
-
名称:
Decisiontable
-
主类 :
org.drools.examples.decisiontable.PricingRuleDTExample
(在src/main/java
中) -
模块 :
drools-examples
- 类型 :Java 应用程序
-
规则文件:
org.drools.examples.decisiontable.ExamplePolicyPricing.xls
(在src/main/resources
中) - 目标 :演示使用电子表格决策表来定义规则
电子表格决策表是 XLS 或 XLSX 电子表,其中包含以表格格式定义的新规则。您可以使用独立 Red Hat Process Automation Manager 项目包含电子表格决策表,或者在 Business Central 中将它们上传到项目。决策表中的每一行都是一条规则,每个列都是一个条件、操作或其他规则属性。创建决策表并将其上传到 Red Hat Process Automation Manager 项目后,您定义的规则会编译成带有所有其他规则资产的 dols 规则。
定价示例的目的是提供一组新规则来计算基本价格,以及适用于特定类型的销售政策的库存驱动程序的货币。驱动程序的年龄和历史记录以及策略类型包括计算基本 Premium 贡献,其他规则会计算该驱动程序可能有资格的潜在承诺。
要执行示例,请在 IDE 中作为 Java 应用程序运行 org.drools.examples.decisiontable.PricingRuleDTExample
类。
执行后,以下输出会出现在 IDE 控制台窗口中:
Cheapest possible BASE PRICE IS: 120 DISCOUNT IS: 20
Cheapest possible
BASE PRICE IS: 120
DISCOUNT IS: 20
执行示例的代码遵循典型的执行模式:规则已加载,插入事实,并且创建了无状态 KIE 会话。本例中的区别在于,规则在 ExamplePolicyPricing.xls
文件中定义,而不是 DRL 文件或其他源。电子表格文件使用模板和 DRL 规则加载到决策引擎中。
电子表格决策设置
ExamplePolicyPricing.xls
电子表在第一个标签页中包含两个决策表:
-
基本定价规则
-
促销活动规则
在示例电子表格演示时,您只能使用电子表的第一个标签页来创建路由表,但多个表可以在单个标签页内。决策表不一定遵循顶层逻辑,但更容易地捕获导致规则的数据。对规则的评估不一定是以给定顺序的评估,因为决策引擎的所有正常机制仍适用。这就是您可以在电子表的同一标签页中有多个决策表的原因。
决策表通过对应的规则模板文件 BasePricing.drt
和 PromotionalPricing.drt
执行。这些模板文件通过其模板参数引用决策表,并直接引用决策表中的条件和操作的各种标头。
BasePricing.drt 规则模板文件
PromotionalPricing.drt 规则模板文件
规则通过 KIE Session DTableWithTemplateKB
的 kmodule.xml
引用执行,这专门提到 ExamplePolicyPricing.xls
电子表,它是成功执行规则所必需的。此执行方法允许您将规则作为独立单元(如本例中)执行,或者在打包知识 JAR (KJAR)文件中包含规则,以便电子表格与要执行的规则一起打包。
执行规则和电子表格才能成功完成 kmodule.xml
文件的以下部分:
作为使用规则模板文件执行决策表的替代选择,您可以使用 DecisionTableConfiguration
对象并将输入电子表指定为输入类型,如 DecisionTableInputType.xls
:
比较示例使用两种事实类型:
-
驱动
-
策略
.
这个示例在对应的 Java 类 Driver.java
和 Policy.java
中为事实设置默认值。驱动程序存在 30 年,没有之前的声明,目前具有风险配置文件 LOW
。驱动程序
所应用的策略是 COMPREHENSIVE
。
在任何决策表中,每行都被视为不同的规则,每个列都是一个条件或一个操作。每行在决策表中评估,除非在执行时清除了电缆。
决策表分布表(XLS 或 XLSX)需要两个关键区域来定义规则数据:
-
RuleSet
区域 -
RuleTable
区域
电子表格的 RuleSet
区域定义了您要全局应用到同一软件包中的所有规则的元素(不仅仅是电子表格),如规则集名称或通用规则属性。RuleTable
区域定义实际规则(箭头),以及组成指定规则集中的规则表的条件、操作和其他规则属性(columns)。决策表电子表格可以包含多个 RuleTable
区域,但只能包含一个 RuleSet
区域。
图 19.11. 决策表配置
RuleTable
区域还定义规则属性应用到的对象,本例中为 Driver
和 Policy
,以及对象的限制。例如,定义 Age Bracket
列的 Driver
对象约束是 age >= $1, age <= $2
,其中以逗号分隔的范围在表列值中定义,如 18,24
。
基本定价规则
定价示例中的基本定价规则
决策表评估驱动程序的年龄、风险配置文件、声明数和策略类型,并根据这些条件生成策略的基本价格。
图 19.12. 基本价格计算
Driver
属性在下表中定义:
-
年龄
Bracket
:年龄括号包含条件年龄 >=$1 的定义,年龄 <=$2
,它定义了驱动程序期限的条件边界。此条件列突出显示$1 和 $2
的使用,后者在电子表格中用逗号分开。您可以将这些值写入18、24
或18
,且两个格式都在执行自定义规则中工作。 -
位置风险配置文件
: risk 配置集是一个字符串,示例程序始终以LOW
的形式传递,但可以更改为反映MED
或HIGH
。 -
之前的声明数量
:声明的数量定义为 condition 列必须完全等于触发该操作的整数。该值不是范围,仅完全匹配。
决策表的策略用于条件和规则操作,并在下表中定义属性:
-
应用的策略类型
:策略类型是一个条件,它作为字符串传递,用于定义覆盖范围类型:COMPREHENSIVE、FIRE_THEFT
、或THIRD_PARTY
。 -
Base $ AUD
:basePrice
定义为一个ACTION
,它根据与此值对应的电子表格单元,通过约束policy.setBasePrice ($param)
设置价格。当您为此决策表执行对应的 DRL 规则时,该规则部分对与事实匹配的 true 条件执行这个 action 语句,并将基本价格设置为对应的值。 -
记录原因
:当规则成功执行时,此操作会在System.out
控制台中生成输出消息,反映触发的规则。之后会在应用程序中捕获并打印。
该示例也使用左侧的第一列对规则进行分类。此列仅用于注解,不会影响规则执行。
促销活动规则
计费示例中的促销活动规则
决策表评估了驱动程序的年龄、之前声明数量和策略类型,以根据销售政策价格产生潜在的参与。
图 19.13. 主要计算
此决策表包含该驱动程序可能有资格的条件。与基本价格计算类似,此表评估驱动程序的期限、之前声明的数量
,以及应用 Policy 类型
以确定要应用的 Discount %
速率。例如,如果驱动程序存在 30 年,没有之前的声明,并且针对
COMPREHENSIVE
策略应用,则驱动程序被指定为 20
百分比。