【采用】规则引擎Pyke与PyClips对比研究报告(高大上啊,第一次听说pyke和pyclips这俩词~)
1. 背景综述
规则引擎主要实现的功能是存储、分类和管理规则,执行规则、推断其它事实的应用程序。其中的规则主要是指企业或商务业务逻辑、法律条款等。在规则引擎发展的过程中,Rete算法和Prolog语言是两个重要的理论分支,多数规则引擎都是基于以上二者扩展而来的。在工业活动铸造中,发展时间较长、应用广泛的两个体系是Clips体系和Prolog体系。
Clips是美国航空航天局NASA- JOHNSON太空中心为弥补LISP 语言的不足而开发的C语言内核的专家系统。它的推理机是基于正向推理(Rete算法)的控制策略,即在事实的基础上通过设定的规则推演新的事实。因为LISP语言编写规则复杂、引擎不支持反向推理等原因也在一定程度限制了它的发展,但在其他语言开发(javaEE、Python等)的规则引擎仍有很多参考、引用了Clips,包括Drools、Jess、PyClips等。
Prolog语言基于谓词逻辑的理论。最基本的写法是定立物件与物件之间的关系,之后可以用询问目标的方式来查询各种物件之间的关系,进行匹配及回溯,找出所询问的答案。因而Prolog具备作为规则引擎的充分条件,也有若干开源项目(java为主)沿用其思路设计规则引擎,如tuProlog、jena等。下文所提到的Pyke,普遍说法其前身也是Prolog。此外,有文献提到prolog基于Markov算法。Markov算法可以作为规则引擎的基本准则,但是如果系统中存在着大量的规则,那么效率就会变低。
针对项目开发的实际需要,依据 “Python语言驱动引擎、规则语言语义全面、时间开销适中”的原则选取规则引擎,具体操作过程中选择了Pyke和PyClips分别进行研究,二者分别对应上文提到的Prolog体系和Clips体系,有一定代表性。经过手册研读和实验测试,目前可得到的结论是:PyClips在规则表达和性能效率方面优于Pyke,更符合应用开发的需要。具体分析见下文。
2.PyClips与Pyke的规则表达方式比较
2.1 Pyke的规则描述方式和特性
Pyke的优势、特点:
l 支持正向推理和反向推理两种推理方式,可以针对不同问题选用不同方式定义规则;
l 可以在规则中嵌入Python代码段补充描述;
l 专用谓词较多,如first,notany等可以简化表达。
Pyke的不便、局限:
l 数据倾倒方式单一,只显式支持将结果推送到控制台输出(只能间接从其内部取得数据List);
l 不支持批量的事实导入;
l 正反向推理不能在同一个规则库中并存。
2.2 PyClips的规则描述方式和特性
PyClips的优势、特点:
l 在规则定义环节,支持声明函数。支持OO(面向对象):包括类的定义,模板(类似C++中的template)的定义。针对未来复杂的规则描述可能适用;
l 规则定义时,支持事件触发;
l 支持动态地撤销事实或规则(不可逆,需谨慎)。
l 互动性良好,方法完全“继承”自0Clips。PyClips相当于对Clips做了Python的“客户端”封装。运行时,在内存中既有PyClips的存在,也有Clips的存在。因而只要Clips支持的功能,都可以由PyClips发送指令操作Clips。
PyClips的不便、局限:
l 规则描述使用LISP语言,上手难度较高(例如数值计算式的书写、各关键字的语法格式);
l 只显式支持正向推理。相关英文文献也指出Clips本身不能使用反向推理,只有部分中文文献给出了通过事件触发来自定义反向推理的方案,但可重现性都很差,没有一个完备的解决方案目前。所以保留意见认为,PyClips不支持反向推理;
l 不支持批量的事实或规则导入;
3. PyClips与Pyke的性能比较
3月20日-3月22日,Pyke性能测试数据截取,见表1、表2:
|
侧重较多事实 |
|
规则数 |
事实数 |
时间开销(秒) |
5 |
10000 |
21 |
10 |
10000 |
27 |
5 |
20000 |
65 |
10 |
20000 |
96 |
|
侧重较多规则 |
|
规则数 |
事实数 |
时间开销(秒) |
500 |
500 |
23 |
600 |
500 |
28 |
700 |
500 |
32 |
800 |
500 |
37 |
900 |
500 |
42 |
1000 |
500 |
46 |
1100 |
500 |
51 |
1200 |
500 |
55 |
|
均等 |
|
规则数 |
事实数 |
时间开销(秒) |
500 |
500 |
23 |
600 |
600 |
34 |
700 |
700 |
46 |
800 |
800 |
59 |
900 |
900 |
73 |
1000 |
1000 |
88 |
表1
规则数 |
事实数 (运行时加载) |
事实 加载时间(秒) |
反向推理 时间(秒) |
1 |
20000 |
16.656 |
1.18 |
5 |
20000 |
16.828 |
1.40 |
10 |
20000 |
18.588 |
1.678 |
15 |
20000 |
17.996 |
1.92 |
20 |
20000 |
17.987 |
2.324 |
25 |
20000 |
16.021 |
2.434 |
30 |
20000 |
15.959 |
2.699 |
表2
3月27日,PyClips性能测试,见表3:
规则数 |
事实数 (运行时加载) |
事实 加载时间(秒) |
正向推理 时间(秒) |
1 |
20000 |
3.516 |
5.514 |
5 |
20000 |
3.314 |
6.024 |
10 |
20000 |
2.892 |
6.566 |
15 |
20000 |
2.934 |
7.244 |
20 |
20000 |
3.445 |
7.472 |
25 |
20000 |
2.832 |
7.918 |
30 |
20000 |
3.116 |
9.168 |
表3
将3张表中红色的数据行进行对比可以发现:
l 在事实加载环节上,两种引擎都只能逐条加载, PyClips的加载效率远高于Pyke;
l 客观环境不变,推理方式及引擎算法不同的情况下,推理效率排序应为:
Pyke反向推理时间开销 < PyClips正向推理时间开销 << Pyke正向推理时间开销
虽然Pyke在推理阶段(2万条事实数据)可以通过推理方式同比节约4-6秒,但它在事实加载阶段比PyClips慢12-14秒。
时间开销应是所有环节消耗时间的总和,故而在实际使用中能明显感觉到PyClips的运行速度优于Pyke。
原文链接:https://blog.csdn.net/u010159842/article/details/78889576
【采用】规则引擎Pyke与PyClips对比研究报告(高大上啊,第一次听说pyke和pyclips这俩词~)相关推荐
- python规则引擎pyke_规则引擎Pyke与PyClips对比研究报告
1. 背景综述 规则引擎主要实现的功能是存储.分类和管理规则,执行规则.推断其它事实的应用程序.其中的规则主要是指企业或商务业务逻辑.法律条款等.在规则引擎发展的过程中,Rete算法和Prolog语言 ...
- python3 规则引擎_Ilog、Drools、Jess规则引擎的Rule Language 对比
Ilog JRules 是最有名的商用BRMS,刚拿了JOLT: Drools 是最活跃的开源规则引擎,一路高歌猛进: Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表 ...
- Ilog、Drools、Jess规则引擎的Rule Language 对比
Ilog JRules 是最有名的商用BRMS,刚拿了JOLT: Drools 是最活跃的开源规则引擎,一路高歌猛进: Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代 ...
- 调研规则引擎用于八字命理
熟悉命理书的朋友都知道,书上计划都是一些条文组成的断语,从下表可以看到,命理大师们习惯描述什么条件,会出现什么样的情况,这样看起来是不是很像规则引擎的职能呢?于是我就想调研一下java相关的规则引擎, ...
- 几个常见规则引擎的简单介绍和演示
Ilog JRules 是最有名的商用BRMS: Drools 是最活跃的开源规则引擎: Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表: Visual Rules( ...
- 规则引擎:大厂营销系统资格设计全解
业务进行营销活动目的是用最少的钱实现更好的营销效果,此时就需要针对营销活动的资格进行控制,其中就包括了用户身份.用户所处的环境等等一系列因素的考虑,且为了防止恶意套取营销费用和做到营销效果的持续性,会 ...
- python3 规则引擎_几个常见规则引擎的简单介绍和演示
Ilog JRules 是最有名的商用BRMS: Drools 是最活跃的开源规则引擎: Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表: Visual Rules( ...
- 旗正规则引擎的产品设计
什么是规则引擎: 规则引擎是一种采用人类能理解的术语(简称类自然语言)来描述业务逻辑(如各类公式.算法.策略.流程等)并且解析执行的软件程序.对于一般的数据处理逻辑以及判断逻辑,规则引擎可以直接采用业 ...
- springboot之ice规则引擎探索
突然发现一个非常棒的框架,迫不及待的想要和大家分享一下 规则引擎 什么是规则引擎 规则引擎是一种工具,它使得这种计算模型编程变得更容易.它可能是一个完整的开发环境,或者一个可以在传统平台上工作的框架. ...
最新文章
- html辅助方法引入验证类后怎么写,Html辅助方法
- Python-EEG工具库MNE中文教程(8)-参考电极简介
- 【机器学习】5行代码在小数据集上涨点
- tomcat配置https,单方验证,并自动将http请求转成https
- 浅学JavaScript
- 什么是 TypeScript 的 Module Augmentation
- 一建机电实务教材电子版_必背!一建《机电实务》高频考点,每日一背
- LeetCode 2134. 最少交换次数来组合所有的 1 II(数组*2 + 滑动窗口)
- 工具对比_模拟慢网速环境
- Standard Deviation Normal Distribution
- VM 与 与 Linux 的安装
- Web开发中常用的linux命令 详解
- 关于setTimeout的面试题
- 倒计时按钮_倒计时牌都不会做,妹子何必嫁这货
- 模电Aus,Uo/Us,童诗白例2.3.3。
- Qt + OpenGL 教程(三):线
- 二阶齐次线性微分方程的通解公式_二阶常系数齐次线性微分方程通解
- 什么是 P2P、P2C 、O2O 、B2C、B2B、 C2C
- Ubuntu 制作离线软件安装包
- 计算机视觉之目标检测(object detection)《1》
热门文章
- Linux文件IO深入剖析
- 科罗拉多州立大学计算机科学专业,美国科罗拉多州立大学有哪些好专业?
- bio linux 创建_不断升级,Java之BIO、NIO、AIO的演变
- svn: Can't convert string from 'UTF-8' to native encoding
- 贷款违约预测--赛题理解
- c++ 递增一个指针
- kali安装步骤失败 选择并安装软件_Pycharm2019.3.3软件安装步骤
- 最大值减去最小值小于或等于num的子数组数量
- 文巾解题 231. 2的幂
- 从C语言的角度重构数据结构系列(三)- 顺序存储结构和链式存储结构之顺序表