Ilog JRules 是最有名的商用BRMS,刚拿了JOLT;

Drools 是最活跃的开源规则引擎,一路高歌猛进;

Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表。

今天对比了一下这三个颇有代表性的规则引擎的规则语言。其中Ilog是商业产品,没有机会实战。

1.一样的If--Then 句式与Rete引擎

三者都邑把原本杂乱不勘的if---else---elseif----else,拆成N条带优先级的

"If  前提语句  then  实施语句" 的句式。

三者都主要使用foreward-chaining的Rete引擎,按优先级匹配条件语句,实施规则语句。

规则实施后会激发事实的变化,引擎又会重新进行条件匹配,直到不能再匹配为止,Rete的算法保证了服从的最高。

2.开辟人员操纵的规则语言

2.1 Drools的XML框架+Java/Groovy/Python嵌入语言

Drools的用XML的、节点表达If--Then句式,而里面可以嵌入上述语言的代码作为判断语句和实施语句。

其中Java代码会操纵Antlr进行解释,而Groovy和Python自己即是脚本语言,可以直接调用。

Drools的聪明之处在于,用XML节点来典型If--Then句式和事实定义,使引擎干起活来很舒服。

而操纵Java,Groovy等原生语言来做判断和执行语句,让程序员很轻易过渡、移植,学习曲线很低。

hello.equals("Hello")

helloWorld( hello );

2.2 ILog的IRL(ILog Rule Language)

IRL用When{}Then{}表达 If--Then句式

When

{

?customer: Customer(totalTime >=1000);

}

Then

{

execute {?customer.setAmount(getAmount()-20.00);

}

文档称IRL的语法是Java Syntax-like的,但我怎么也看不出两者是类似的。不过他因为是商业产品,有很强大的编辑器和管理工具,编写规则的速度应该有一定效率。

2.3 Jess的CLIPS

jess用  =>  表达 If-Then句式。 这CLIPS是真正的程序员专用语言,而且还若是很专业的程序员才习惯的工具。但这种原本即是用来做专家系统的AI语言,对规则的表达本事也应该是最强的。

教学一下下面这段代码,airplane有一个属性--name,有两个子类--喷气式和螺旋桨飞机,其中螺旋桨飞机可以适用任意跑道,而喷气式飞机不能使用Grass跑道。

; Fact templates

(deftemplate airplane (slot name))

(deftemplate jet extends airplane)

(deftemplate prop extends airplane) ;

Rules

(defrule can-use-grass-runway

(prop (name ?n))

=>

(printout t "Aircraft can use grass - " ?n crlf))

(defrule can-use-asphalt-runway

(airplane (name ?n))

=>

(printout t "Aircraft can use asphalt - " ?n crlf))

3.客户使用的规则语言

若是客户可以自己尽情编写规则,无疑是产品一个很大的卖点。大部分客户都爱这样的东西。而且也只有把规则编写交给客户,才达到了规则引擎的全数意义。

3.1 Drools的 DSL

Drools的最新版Drools2.0Rc2里,House和Conways game of Live两个例子有DSL的版本

对比一下Java版本,功效如下:

20

vs

room.getName( ).equals( "calvin" )

convertToCelsius( room.getTemperature() ) > 20

但这种XML Base的DSL语法实在好不了多少,而且实现的代价一点不少,要自己实现Conditons和Consequence Factory类,自行解释那段XML,根柢上没有什么便利的底层支持。

实在,一不做二不竭,爽性用Antlr来界说真正的DSL,同样是实现Conditons和Consequence Factory类概略更好。只不外解释XML谁都会,Antlr就没什么人用而已。

3.2 ILog的BAL(Business Action Language)--最完竣的王者?

没有现实用过,只能看文档过过瘾。从文档来看,配合Ilog的编纂器,简直即是很完美的规则语言了。

If

the call destination number is the preferred number

Then

apply the preferred number rate

3.3 其实文章到这里应该结束了,不过还是忍不住介绍一个国内的规则引擎:Visual Rules

对其免费版本下载和使用,根据实例做了一个简单的hello World,看来,和ILog实在差不多,但更本土化:

如果

用户名 = "admin"

那么

显示 = "你好," + 用户名

看着中文就是感觉亲切。喜欢的朋友可以下载免费版玩玩。旗正信息技术: http://www.flagleader.com/

python3 规则引擎_Ilog、Drools、Jess规则引擎的Rule Language 对比相关推荐

  1. Ilog、Drools、Jess规则引擎的Rule Language 对比

    Ilog JRules  是最有名的商用BRMS,刚拿了JOLT: Drools 是最活跃的开源规则引擎,一路高歌猛进: Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代 ...

  2. Ilog、Drools、Jess规则引擎的Rule Language 比对

    Ilog JRules 今天对比了一下这三个颇有代表性的规则引擎的规则语言.其中Ilog是商业产品,没有机会实战. 作者:江南白衣 1.一样的If--Then 句式与Rete引擎     三者都会把原 ...

  3. SpringBoot整合Drools规则引擎动态生成业务规则

    最近的项目中,使用的是flowable工作流来处理业务流程,但是在业务规则的配置中,是在代码中直接固定写死的,领导说这样不好,需要规则可以动态变化,可以通过页面去动态配置改变,所以就花了几天时间去研究 ...

  4. 规则引擎 Drools:规则引擎概述

    什么是规则引擎 规则引擎,全称为 业务规则管理系统,英文名为BRMS(即Business Rule Management System).规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用 ...

  5. [Drools]JAVA规则引擎 -- Drools

    Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效. 本文所使用的de ...

  6. jboss规则引擎KIE Drools 6.3.0 Final 教程(1)

    前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5 ...

  7. jboss规则引擎KIE Drools 6.3.0 Final 教程(2)

    使用JAVA程序调用规则-运行KIE-DROOLS上的规则 第一步:建立一个MAVEN的Java工程 POM.XML 给出pom.xml文件 <project xmlns="http: ...

  8. 规则引擎之Drools

    规则引擎之Drools Drools概述 规则引擎构成 规则文件构成 规则体语法结构 规则属性 比较操作符 Pattern模式匹配 执行指定规则 Drools内置方法 Drools的基本使用 添加依赖 ...

  9. 规则引擎JBoss Drools简介

    一.简介 项目官网:Drools - Drools - Business Rules Management System (Java™, Open Source) 源码:GitHub - kiegro ...

最新文章

  1. Java 处理0x00特殊字符
  2. nginx自定义http头
  3. unity android 启动,Android启动Unity
  4. python 如何暂停程序?程序阻塞 (input()、time.sleep()、os.s*stem(“pause))
  5. T6 s1 day19
  6. 分享网页加载速度优化的一些技巧?
  7. mysql慢查询工具
  8. MyEclipse快捷键两篇文章
  9. 从官网下载jdk1.6 1.7
  10. ipython安装过程_IPython安装过程 @win7 64bit
  11. 苹果录屏没声音_苹果iPhone手机没声音不会响 电话扬声器无法正常工作的修复方法...
  12. 微信红包封面免费送!!!
  13. android 一直开机画面,解决:Android模拟器一直停留在开机画面
  14. 记一次查询超时的解决方案The timeout period elapsed......
  15. Cadence OrCAD Capture 检索和定位功能的介绍图文视频教程
  16. 【Js逆向】__jsl_clearance ob混淆加速乐
  17. 蓝牙协议与普通网络协议的对比
  18. 判断Android Textview是否换行
  19. MySQL牛客网刷题3
  20. 老板为何喜欢坐头等舱,空姐透露的“潜规则”

热门文章

  1. numpy之标准差std()
  2. D3.js v5.0 旭日图
  3. 网络工程设计教程系统集成方法第3版-第1章 网络工程设计概述
  4. 上帝视角学JAVA- 基础07-类05【2021-08-06】
  5. 修改vscode左侧目录字体大小
  6. 深入浅出图神经网络【阅读笔记】
  7. 面试常问集锦——Java基础部分
  8. Day2--正则表达式
  9. FT60F011A/FT60F010A为辉芒微电子基本I/O型系列Flash单片机SOT23-6/SOP8
  10. 西电和杭电计算机考研,名师张雪峰:中国有四个电子科技大学,有一个很特别,考研要注意...