文章发布于公号【数智物语】 (ID:decision_engine),关注公号不错过每一篇干货。
来源 | 上海交通大学计算机科学与工程系
作者 | 余锴
摘要:规则引擎起源于基于规则的专家系统,属于人工智能的范畴,通过模仿人类的推理方式,通过试探性推理,使用人类能够理解的方式证明其结论。规则引擎在现实应用中实现了业务和代码分离,通过代理的方式将业务语言定义传递到系统中,维护和管理复杂的业务规则,从而起到支撑业务灵活多变的作用。本文提出一种新的轻型规则引擎,旨在及时交付并提供更为灵活和复杂的逻辑控制功能,并且能基于类似随机森林的方法优化业务规则,可以应用在自动化信贷审批。
关键词:规则引擎;信贷审批;随机森林;
01
引言
规则引擎起源于基于规则的专家系统(CLIPS:源于1984年NASA的人工智能项目),规则引擎通过模拟人类的思考方式,使用试探性推理方法得到结果,并使用人类能够理解的方式证明其结论。
规则引擎自80年代至今,已经产生了多种商业及开源的产品,基本上都是基于Java开发, 既有商业产品,也有开源项目,其中最出名的是Drools。
目前绝大部分规则引擎都基于RETE算法设计,RETE算法是一种归纳法推理算法,主要由规则库,工作内存和推理引擎三部分组成,通过构建网络保存中间信息,能极大的提高规则匹配的效率。自1982年Forgy提出该算法以来经过几次优化,受到广泛的认可,其他还有一些匹配算法比如LFA,TREAI,LEAPS,但效率比不上RETE。
规则引擎目前主要的应用场景是CRM和审批系统。通过规则引擎企业得以快速灵活的制定和实施业务规则,从而快速的对市场做出反应或者是对审批流程进行快速的调整。
近年来经济形势的发展要求企业提高更快更好的服务,而且同时需要控制快速上涨的人力成本,越来越多的企业正在引入人工智能技术,其中之一就是规则引擎。目前规则引擎基本是使用Java构建的,一般只有大型企业才有技术和资金实力来构建这样的系统。本文以信贷审批作为默认的业务场景,提出一种新的灵活的规则引擎设计,完全使用Python实现。
规则引擎把复杂、冗余的业务规则与程序分离,做到架构的可复用移植。通过约定好的规范,接受用户的输入,解析用户的业务规则,最后执行解析好的业务规则作出决策。
一般情况下,所有的业务规则都可以表达成类似IF … THEN的条件语句,但由于企业的快速发展,业务规则会迅速增加,维护和管理这些业务规则会变得越来越困难,而规则引擎将至少具有三个作用:
(1)管理复杂的规则
(2)使用过程不再需要二次编程
(3)知识的管理和发现
以上三方面可以使得业务人员把注意力放到真正有意义的领域,减少重复性工作。从业务的角度上说,重要的是知识的获取和复用,由于规则引擎将规则逻辑从代码中分离,使得业务人员可以着重考虑规则中蕴含的知识,而规则引擎的推理和运行机制又解放了维护人员浪费大量的时间在逻辑判断代码上,在实际应用中起到了巨大的作用。
本文第一节进行概述,第二节简单介绍RETE算法及设计的动机,第三节具体介绍AJIT规则引擎结构的设计,第四节介绍引擎核心的三个算法,第五节将对本文做总结。
02
RETE算法
2.1 算法介绍
RETE算法是1982年由卡内基大学的Forgy提出的一种高效的模式匹配方法。由于其推理的效率很高,因为不少优秀的规则引擎都是基于RETE或者RETE的改良算法设计的。
RETE采用了一种基于树排序的方式,将规则的LHS(左手边条件)进行网络编码,在初次编译的时候保存推理的信息路径,而在运行时只需要去查询和匹配这些结果就完成了推理,从而大大节约了推理的时间。