Charles Forgy博士在2013年召开的《今日决策》上就如何更简洁地写规则进行了演讲。
Rete算法之父、规则引擎的实现者之一Charles这次从用户的角度切入。 他发现规则的表现形式发生了根本性的变化,面向单实例的规则变成了面向集合的规则表现形式。 后者的重点是规则由一系列条件而不是单一条件触发。
查尔斯将两者区分如下。
在面向单实例的规则中:
条件可以设定为返回对象的组,也可以设定为从一组对象中选择一个对象条件,还可以设定为成为对象的集合并输出计算值,当然也可以将三者结合起来使用
相比之下,面向集合的规则具有以下特点。
更准确、更容易理解、更容易管理、更灵活、形式多样的格式对规则模型的性能有很大的影响。 Charles以WaltzDB为例进行了说明。 在作为该行业标准的数据库中,有4个规则是面向实例的规则。 每次程序运行时,都会触发两个规则,Charles测试时计算机上显示的结果为4.3秒的运行时间。 而且,他在集合指向上重新整理的这些规则,在相同的硬件环境下,规则模型的性能表现在几何学上得到了提高,从4.3降低到了0.1秒。
将集合指向规则定义应用于WaltzDB时,整体的执行时间从109秒降低到63秒,整体的可读性和管理性明显提高。 市面上流行的决策引擎、OPS/J、善良的行人、Drools、SMARTS明策,都以各自的方式支持面向集合的规则表达形式,但在语法表达上略有差异。
关于面向收藏的规则,Charles列举了他推荐的理由:
面向集合的规则更准确,有助于理解面向集合的规则,可以提高规则模型的表达性能,提供用户定制的规则集合形式。 要显著提高规则的表达性,结合SMARTS明策智能决策引擎进行具体介绍。
对于业务用户来说,我们相信面向集合的规则将成为提高业务规则模型性能的强大工具。 一般来说,需要解决的业务问题可以用以下面向集合的规则格式来表示:
如果购物车里有杂志和两种食品,过去三周消费超过50美元,我们将为顾客提供x促销计划。 如果决策引擎不支持高效的面向集合的规则,这些业务规则只能用复杂的迭代规则来表示,在规则的管理上存在巨大的挑战,业务人员无法应对。
SMARTS的明智决策引擎提供了完善的支持面向集合的规则的高级架构,使业务规则具有类似SQL的表达能力,可以方便地集成到规则管理系统中。