明策智能决策引擎:编写更简洁的规则
Charles Forgy博士曾在2013年举行的《今日决策》上做了有关如何更简洁地编写规则的演讲。
作为Rete算法之父,规则引擎的实现者之一,Charles这次从用户的角度进行了切入。他发现在规则的表现形式上,一个根本性的改变正在发生,面向单一实例的规则正转变为面向集合的规则表现形式。后者的关键点在于规则会由一组条件而不再是单个条件进行触发。
Charles对二者作了以下区分:
在面向单一实例的规则中:
- 条件可以设置成返回一组对象
- 条件可以设置是从一组对象中选择一个对象
- 条件也可以设置成为对象集合输出计算值
当然,也可以将三者进行组合使用。
相对而言,面向集合的规则就有如下几个特点:
- 更加精确
- 更加易于理解与管理
- 解决方式更灵活多样
两种形式对规则模型的性能表现都会有明显的影响。Charles以WaltzDB为例进行了说明。在这个作为行业标准的数据库中,其中有4条规则是面向实例的规则。程序每一次运行,都会有两条规则被触发,Charles测试时电脑上显示的结果是4.3秒的运行时间。然后,他用面向集合的方式重新梳理的这些规则,在同一个硬件环境下,规则模型的性能表现有了几何级的提升,从4.3降低到了0.1秒。
当在WaltzDB上应用了面向集合的规则定义后,整体的运行时间从109秒降低到了63秒,在整体的可读性与可管理性上有了显著的提升。市面上一些流行的决策引擎,OPS/J,Jess, Drools以及SMARTS明策,都以各自的方式支持面向集合的规则呈现形式,只是在语法表现上有些许不同。
对于面向集合的规则,Charles列出了他推荐的理由:
- 面向集合的规则更精确且利于理解
- 面向集合的规则可以提升规则模型的表现性能
- 提供用户自定义的规则集合形式,能显著的提升规则的表达性
接下来我们就结合SMARTS明策智能决策引擎做具体的介绍。
我们相信对于商业客户来说,面向集合的规则将会是提升业务规则模型性能的强有力的工具。通常来说,待解决的业务问题可以用面向集合的规则形式进行呈现,比如:
- 如果 客户购物车中包含一本杂志和两种不同类型的食品
- 并且 客户在过去三周的消费超过了50美元
- 那么 给客户提供X促销方案
如果决策引擎不支持高效的面向集合的规则,那么此类业务规则就只能以复杂的迭代规则进行呈现,这对规则的管理将会是巨大的挑战,并不是业务人员可以处理的。
SMARTS明策智能决策引擎提供高层架构来完美支持面向集合的规则,让业务规则拥有类似SQL一样的表达能力,并且可以被友好的嵌入到规则管理系统中。