明策智能决策引擎:编写更简洁的规则

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一样的表达能力,并且可以被友好的嵌入到规则管理系统中。

你可能感兴趣的:(明策智能决策引擎:编写更简洁的规则)