Ilog JRules 是最有名的商用BRMS;
Drools 是最活跃的开源规则引擎;
Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表;

Visual Rules(旗正规则引擎)国内商业规则引擎品牌。

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

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)-已改名ODM,最强王者
  从文档来看,配合Ilog的编纂器,简直即是很完美的规则语言了,价格贵了点。

If
    the call destination number is the preferred number
Then
     apply the preferred number rate

3.3 Visual Rules(旗正规则引擎)--国内商业规则引擎代表:

完全本土化的国内规则引擎,有自主知识产权,全中文操作,比较适合国人习惯,在处理速度、内存占用方面都拥有一定的优势,感觉有些ILOG的翻译版本的意思,算是良心之作了。看看表现形式:

如果

用户名 = "admin"

那么

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

全中文操作界面,看起来比较亲切,规则表现形式也更为简洁。因为收费,所以没有太多资料展示,希望商家能提供基础功能版本供大家免费使用。

http://www.cnblogs.com/mshf521/tag/%E8%A7%84%E5%88%99%E5%BC%95%E6%93%8E/

几个常见规则引擎的简单介绍和演示相关推荐

  1. python3 规则引擎_几个常见规则引擎的简单介绍和演示

    Ilog JRules 是最有名的商用BRMS: Drools 是最活跃的开源规则引擎: Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表: Visual Rules( ...

  2. 规则引擎Drools详细介绍

    规则引擎Drools详细介绍 一. 规则引擎概述 1.1 什么是规则引擎 1.2 使用规则引擎的优势 1.3 规则引擎应用场景 1.4 Drools介绍 二. Drools使用与说明 2.1 Droo ...

  3. 常见服务器类型及其简单介绍

    网站服务器分为多少个类型呢? 网站服务器主要分为塔式.机架.刀片三种服务器类型,其实无论去到那里服务器的类型都是这三种为主.  塔式.机架及刀片服务器作为企业最常选购的基础硬件设备,一间中小企业采购几 ...

  4. 模板引擎ejs简单介绍

    模板引擎: 将数据与标签分离开来,这样就不需要前面写的学生管理系统那样,在页面显示信息通过字符串的拼接的方式,而是直接用ejs模板引擎,将服务器端传过来的数据在页面直接显示出来,不会那样的麻烦了. e ...

  5. 常见的规则引擎(Drools,RuleBook,Easy Rules等)对比

    参考文章: https://www.jianshu.com/p/96cd60059aae 规则引擎调研 - 人在江湖之诗和远方 - 博客园 java开源规则引擎比较_常用规则引擎比较分析_学校砍了我的 ...

  6. Golang 规则引擎原理及实战

    本文主要介绍规则引擎在 golang 中的使用,将首先介绍 golang 中主要的规则引擎框架,然后利用 golang 原生的 parser 搭建一个简单的规则引擎实现基本的 bool 表达式解析工作 ...

  7. 大数据风控项目实战 Drools规则引擎

    可以借鉴的干货 1,统一存储服务,包含:多种存储库连接封装和服务封装 在统一存储服务 2.获取配置的环境 类:EnvVariable 一.风控项目介绍 对一个复杂支付系统提供统一.全面.高效的风险控制 ...

  8. 现实 虚拟世界_现实世界的规则引擎

    现实 虚拟世界 对于许多开发人员而言,规则引擎是流行语或体系结构图上的黑匣子:远远地值得人们敬畏或赞赏的事物,但尚不可理解. 顺便说一句,这是技术的22个陷阱之一: 在拥有一些第一手的现实世界经验之前 ...

  9. groovy 规则引擎 java_Java内嵌Groovy脚本引擎进行业务规则剥离(一)

    一些常见商业应用程序或企业应用,大多都会遇上业务规则在一定的条件下,允许进行一些灵活的配置,以满足业务变化的需要. 解决的方式大致有以下几个方面: 最为传统的方式是java程序直接写死提供几个可调节的 ...

最新文章

  1. IOS开发-通知与消息机制
  2. VB.NET 开发ColorPicker例子
  3. 试图加载格式不正确的程序
  4. 计算机网络 —— 计算机网络的性能指标
  5. 渗透测试流程信息收集
  6. JavaScript 设计模式之代理模式
  7. 新浪微博 sso 登录 iOS遇到的几个问题
  8. java并发编程(7)-- 线程 自旋锁
  9. Google工程师多图详解Android架构
  10. Adminlte数据分页设置
  11. 你要如何衡量你的人生
  12. 怎样利用超图客户端打点_SuperMap iClient 7C - 网络客户端GIS开发平台
  13. 401.3 您未被授权查看该页 错误原因和解决方案
  14. (附源码)SSM学科竞赛管理JAVA计算机毕业设计项目
  15. css中div怎么飞翔
  16. 在linux上gc日志详解,JVM Parallel Scavenge GC日志详解
  17. 全连接层tf.keras.layers.Dense()介绍
  18. 守护进程--day33
  19. Android LVDS格式(JEIDA与VESA)
  20. 如何获取每个月的天数

热门文章

  1. Android 6.0 以及HttpClient
  2. 关于Hibernate中No row with the given identifier exists问题的原因及解决
  3. C++ STL之map常用指令
  4. shell脚本的执行方式及区别
  5. Solr调优参考-续
  6. SAP公司的一些大概介绍
  7. 设计模式之Dynamic Proxy-动态代理
  8. DB time抖动的原因分析
  9. 从SEO效果看谷歌百度360搜狗有道bing技术现状
  10. iOS 本地时间与GMT时间相互转换