zoukankan      html  css  js  c++  java
  • 几个常见规则引擎的简单介绍和演示

    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/
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 交换Easy
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
    QT中给各控件增加背景图片(可缩放可旋转)的几种方法
    回调函数实现类似QT中信号机制
    std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)
  • 原文地址:https://www.cnblogs.com/duanxz/p/9307958.html
Copyright © 2011-2022 走看看