龙源期刊网 http://www.qikan.com.cn
Drools规则引擎的发展及应用周里
作者:周里程 熊碧辉 裘瑞清 周后盘
来源:《电子技术与软件工程》2017年第21期
摘 要在现阶段下,Drools规则引擎技术发展的已经相对成熟,且非常具有吸引力,并广泛应用于制造业、娱乐业等各个行业。本文主要是对Drools规则引擎的研究背景、现状、概念以及其核心算法Rete及其实现原理等多方面进行阐述,旨在促进其技术应用的更加广泛。 【关键词】规则引擎 DroolsRete算法 1 规则引擎的产生背景
随着世界经济形势变化,市场竞争日趋激烈,为不断适应市场的各种变化,企业需要不断调整产品设计、生产制造、市场营销、内部管理等各个环节的管控方式和规则制度。故而支撑企业运作的管理系统亦应该予以随之调整,定期地维护并且更新程序的业务逻辑。在以往的系统设计架构里面,对每一回业务逻辑进行变更操作的时候,均需修改程序的源代码,重新予以编译并部署,容易导致系统不稳定,同时维护工作量大,维护成本居高不下。迫切需要将管理系统中内含的业务规则、业务逻辑出来,例如生产计划排程、风险控制规则、市场定价策略等,以解除其程序代码与业务规则的耦合性,通过调整修改业务规则来适应市场的变化。规则引擎就是解决此问题的方式之一。 2 Drools规则引擎的应用现状及分析
正因为Drools规则引擎技有着如此多优势特点,现今在许多行业都有着其身影。 2.1 Drools规则引擎在生产制造和产品设计中的应用
在传统的制造行业上,规则引擎就有着很好的应用。华中科技大学的闫欢,张宜生等在《规则引擎在制造企业MES中的研究与应用》一文中,提出了在MES中引入业务规则管理系统(Business Rule Management System),借助规则引擎Drools和其对应的规则语言,并契合企业的实际需求来制定业务规则,把程序代码和业务规则分离开来,使企业根据市场需求随时对企业的生产方针予以优化调整,从而能够加速MES系统的开发、升级与维护的过程,最终可大大增强了MES系统的灵活性、适应性。同时在基于BRMS和规则引擎的MES系统原型中,实现了生产计划的自动安排和生产计划调整过程中的设备负荷均衡处理。伴随工件的工序以及机床数量的增加,以Drools的规则为基础去定义文件的复杂性亦随之明显升高。Drools这些有关的问题均可运用Hadoop Map/Reduce的办法加以解决。Map/Reduce其实为一个处理并且生成超级数据集的算法模型,它可以借助较为低廉的计算资源达到大规模的并行运算,在解决大规模作业调试的方面有着非常大的潜力。不仅如此,浙江大学电气工程学院的郑春团队利用Drools规则引擎技术设计了一个丝绸辅助设计专家系统,用户可以通过Web访问本系统,
龙源期刊网 http://www.qikan.com.cn
输入需求信息,结合知识库中存储的模糊规则处理得到创意图。系统实现了丝绸产品设计的智能化和自动化,提高了产品设计效率。从而能够看出Drools规则引擎应用于传统制造行业,提高了工厂资源整体的利用率。
2.2 Drools规则引擎在政务服务中的应用
Drools规则引擎同样应用在政务服务当中,江苏大学的夏平平就将其应用于征税系统当中,在征税系统开发过程中,需要定义匹配的业务规则,比如企业名称的长度、合伙纳税人比例情况、外资企业比重情况等,虽然可以通过源代码的方式实现这些业务规则,但是随着国家税制的改革和完善,征税方面的业务规则势必会经常变化,必然导致程序需要二次修改和重新部署,给维护工作带来非常大的不便,使用Drools规则引擎很好的解决了上述问题。 2.3 Drools规则引擎在企业管理中的应用
Drools规则引擎在企业管理中也有应用,上海复旦大学的祝志飞团队设计了一套基于Drools规则引擎的自主管理会计系统,通过Drools Guvnor管理会计业务规则,以及通过Drools Expert将业务系统实时产生的单笔交易数据或历史批量数据转换成会计凭证和分录产生会计报表等核心内容,并将其应用在了志飞天下公司的管理会计系统中,彻底解决了志飞天下公司交易量大、需要适时自动记账的功能需求,了会计人员繁杂的手工记账,实时提供会计报表给公司管理人员,帮助管理人员及早做出商业决策。 2.4 Drools规则引擎在娱乐业的应用
在娱乐产业,Drools规则引擎也发挥了不小的作用。当今市场十分火热的桌游三国杀就运用到了规则引擎Drools,它选择游戏脚本的开发模式,将游戏的逻辑规则相关的部分放进脚本中来减少游戏各模块间的耦合度,方便游戏的测试、修改以及内容的升级与更新。这是未来游戏开发的一个全新的方向。Drools规则引擎在游戏中的引入,给其网络桌游的开发和维护带来了事半功倍的效果。
2.5 Drools规则引擎在电力行业的应用
在电力部门,Drools规则引擎同样有着很好的应用。国网电力科学研究院的李穆,文正其等针对变电站现有的变压器故障诊断系统普遍存在知识固化的问题,提出了一种基于Drools规则引擎的变压器故障诊断专家系统。利用Drools框架搭建变压器故障诊断专家系统的架构,实现规则文件与逻辑文件的分离;结合真实案例与权威专家的经验,确定故障模式,利用规则库实现变压器的故障诊断。并于2014年8月份开始在武汉某750kv变压器应用了此Drools规则引擎。实践证明,系统具有较快的反应能力和准确的诊断能力,具备很好的工程推广价值。
2.6 Drools规则引擎在数据清洗中的应用
龙源期刊网 http://www.qikan.com.cn
当今大数据的年代,Drools规则引擎为以动态可配置规则为基础的数据清洗打下了坚实的技术基础。武汉理工大学的曹永亮团队通过实例测试得出结论为:规则数量变化对Drools规则引擎性能的影响不是非常明显;在记录数很大的时候,运用Drools规则引擎跟运用硬编码清洗的时间的比值接近恒定。运用Drools规则引擎的清洗时长仅有运用硬编码的2/5左右,在性能方面的损失换来的是系统的通用性以及规则的动态可配置性上的提升。但规则引擎用于数据清洗技术发展的空间还很大,还有许多的工作要做,比如当前存在的一个突出问题,即是清洗规则是依赖于一些清洗算法的,因而嵌入进Drools规则引擎技术并没有降低数据清洗的算法复杂性,所以将Drools规则引擎的Rete算法与清洗算法整合,达到算法优化便是当前应用的一个发展方向。
3 Drools规则引擎的优化
随着Drools规则引擎技术不断的成熟,Drools的研究领域也出现了百家争鸣的现象,各专家提出了Drools规则引擎不同的优化点。
北京航空航天大学的牛凯团队借助Spring的IoC特性对Drools规则引擎进行了优化,从而实现了规则库的预先加载功能,并给出了相应的设计模型。使用预先加载规则库的方式来使用Drools规则引擎,这样就可以实现规则只加载一次,在J2EE系统服务器却可以多次使用规则。与实时读取规则文件加载规则的方式相比,系统开销更小,调用速度更快;与使用Java代码编写业务规则相比,使用Drools规则引擎消耗的时间略长,但是仍旧在可接受的范围之内。如此一来,无形中降低了J2EE系统更新的成本,减少了J2EE系统更新的不稳定性风险,提高了J2EE系统的灵活性。
浙江大学的何徐辉提出了支持时态数据的Rete算法。于Rete算法的形式化语言里面加进cron的表达式,借助对其表达式予以分析,得到输入的时态数据信息,继而再分析既有的时态数据结构,提出以适于计费服务的时间片的方法表示时态数据。同时Rete算法里面对数据对象的删除与添加的顺序相同,还存在着额外的查找操作,消耗了大量资源。他利用规则执行实例中的信息,直接来删除相应的规则实例,这样可以省去不必要的遍历和查找操作。 北京邮电大学的童毅采用了规则拆分策略对Rete算法进行了改进。他在其规则下引入了或逻辑、非逻辑以及存在量词以对规则表示能力进行了扩展,另外在不不提高算法复杂程度的基础上,对规则提出了拆分算法以及初始事实策略,这样就可以在功能性能方面改进了Rete算法。利用普通对象来代替规则引擎API的管理,从而在易整合性方面优化了Rete算法。而Rete算法中每当有一个标牌(Token)生成,就必然包含一次标牌栈操作和至少一次状态栈操作,因此系统运行中会产生大量的栈操作,可以通过取消标牌栈并将节点的标牌直接存入后继节点的存储区的方法来改进。
付一凡采用动态连接的方法来改进了Rete算法。在beta节点与a节点进行连接的时候,Rete算法有出现空连接的状况发生,因此,他就此提出了动态连接的方法,添加、删除空join节点通过动态的方法,这样就能够避免在匹配过程中出现空连接的情况,这样就缩短了匹配时
龙源期刊网 http://www.qikan.com.cn
间,并使得空间得到了节约,从而提高了推理的效率。Drool规则引擎在匹配的时候要占用的内存空间较大,因此系统配置要高。为此,尝试考虑利用外存以及分批载入的方式来节约内存,或者是利用性能好的数据缓存软件包来进行对应的缓存。
而汪成亮等提出了基于工业环境的Rete网络改进技术,通过建立算符机制来提高匹配效率。他提倡规则模式对逻辑运算模式和数算模式来进行沟通,利用常量与状态量的标识技术来增强空间的利用度,这样就能够很大限度的满足工业环境中大数据量的实际应用需求,采用增加预匹配节点来实现知识库的快速匹配,进而提高了规则系统的推理能力。Rete网具有其复杂的规则,因此,在工业应用中需要将其进行技术优化,进而来满足其结构变化慢,事实数据变化快的特点。
西北工业大学的刘杰采用云计算的理论来改进Rete算法。为提高Rete算法中的匹配效率,将云计算理论中的节点共享和索引查询优化技术引入到Rete匹配的算法中,这样就会出现这种根据云计算来改进的Rete业务规则匹配的算法。他首先构建了规则网络和事实,然后采用节点共享技术降低空间冗余,最后采用索引查询优化技术进行搜寻,遍历这个网络,从而提高匹配的效率。通过3个仿真对改进后的Rete算法性能进行测试,仿真结果表明,改进的Rete算法提高了业务规则匹配效率,解决了传统算法实时性差的问题,为企业优化管理提供了依据。
清华大学的张桂刚基于各种海量规则信息处理的需求,提出了一种海量规则模式匹配方法。海量规则模式匹配算法除了保留与传统规则网络相同的模式网外,它不需要事实表与一条条规则的条件进行比较,只需要与海量规则建立的海量规则网中的规则节点进行比较。将现有事实与海量规则网中各种事实节点进行匹配,若节点匹配成功,则触发相应的规则。在部分匹配过程中,Beta存储区的大部分信息已经体现在规则执行实例中,直接使用规则执行实例中的信息,这样就减少Beta存储区的数量,提高了规则引擎的匹配效率。 4 小结
从以上的文章不难看出来,通过Drools的规则引擎,可很好的实现业务规则跟基本技术之间的分离,它非常适合在业务规则方面较为复杂且又变动相对频繁的应用。跟以往的程序与业务规则紧耦合的系统比起来, Drools规则引擎不仅更为灵活一些,其在大规模规则集的条件下,亦可非常快速地实现Rete算法的规则匹配,从而可避免形成系统性能的瓶颈。 Java规则引擎工具正在逐步的完善和成熟中,这个技术必将在将来获得愈来愈广泛的推广和应用,必将会成为解决各个行业复杂业务规则的最佳工具。 参考文献
[1]郑春.基于Drools规则引擎的丝绸辅助设计Web专家系统[J].工业控制计算机,2015,28(03):42-44.
龙源期刊网 http://www.qikan.com.cn
[2]李穆,文正其,向冬冬.基于Drools的变压器故障诊断专家系统[J].水电能源科学,2015(09):188-191.
[3]牛凯.规则引擎Drools在制造业J2EE系统中的应用研究[J].成组技术与生产现代化,2014(02):7-13.
[4]祝志飞.基于Drools规则引擎的管理会计系统设计与实现[D].复旦大学,2014. [5]夏平平.可配置Drools规则引擎及其在征税系统应用研究[J].数字技术与应用,2013(11):60-60. 作者简介
周里程(1991-),男,湖南省郴州市人。硕士学位。现为杭州电子科技大学在读硕士。主要研究方向为智能制造。 作者单位
杭州电子科技大学智慧城市研究中心 浙江省杭州市 310018