`
hxpwork
  • 浏览: 111698 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Drools4:对Golfer示例的分析

阅读更多
  1. /*  
  2.     规则引擎的强大就在于它可以解决使用普通的编程方法难以解决的问题  
  3.     例如对于下面一个问题的求解,用编程方法很难给出合适的解决方案  
  4.       
  5.     问题:高尔夫球员的位置?  
  6.     已经知道有四个高尔夫球员,他们的名字是Fred,Joe,Bob,Tom;  
  7.     今天他们分别穿着红色,蓝色,橙色以及格子衣服。并按照从左往右的顺序站成一排。  
  8.     我们将最左边的位置定位1,最右边的位置定为4,中间依次是2,3位置。  
  9.     现在我们已经了解的情况是:  
  10.         1)高尔夫球员Fred,目前不知道他的位置和衣服颜色  
  11.         2)Fred紧挨的右边球员穿蓝色的衣服  
  12.         3)Joe排在第2个位置  
  13.         4)Bob穿着格子短裤  
  14.         5)Tom没有排在第1位或第4位,也没有穿橙色衣服  
  15.     现在要求你根据上述条件获得四个球员分别的位置和穿着。  
  16.       
  17.     如果要求使用编程方式获得结果,这显然是一个很有挑战性的工作,你可以思考一下。  
  18.       
  19.     而使用规则引擎的方式来思考问题,我们其实是要从各种可能的排列中将需要的结果挑出来  
  20.     因此我们只需要将球员所有可能的排列组合(位置及颜色)出来,放入Working Memory中  
  21.     然后让规则引擎帮我们挑出来就可以了。  
  22.       
  23.     另外在这个例子中也要注意规则引发的潜在规则,可以从下面规则的说明中了解详情。  
  24. */  

1、Fact设置

  1. String[] names = new String[] { "Fred""Joe""Bob""Tom" };   
  2. String[] colors = new String[] { "red""blue""plaid""orange" };   
  3. int[] positions = new int[] { 1234 };   
  4.   
  5. for ( int n = 0; n < names.length; n++ ) {   
  6.     for ( int c = 0; c < colors.length; c++ ) {   
  7.         for ( int p = 0; p < positions.length; p++ ) {   
  8.             session.insert( new Golfer( names[n], colors[c], positions[p]) );   
  9.         }                   
  10.     }               
  11. }   

2、Golfer对象

  1. public class Golfer {   
  2.     private String name;   
  3.     private String color;   
  4.     private int position;   
  5.        
  6.     public Golfer() {   
  7.            
  8.     }   
  9.        
  10.     public Golfer(String name,   
  11.                   String color,   
  12.                   int position) {   
  13.         super();   
  14.         this.name = name;   
  15.         this.color = color;   
  16.         this.position = position;   
  17.     }   
  18.     /**  
  19.      * @return the color  
  20.      */  
  21.     public String getColor() {   
  22.         return this.color;   
  23.     }   
  24.     /**  
  25.      * @return the name  
  26.      */  
  27.     public String getName() {   
  28.         return this.name;   
  29.     }   
  30.        
  31.     /**  
  32.      * @return the name  
  33.      */  
  34.     public int getPosition() {   
  35.         return this.position;   
  36.     }           
  37.        
  38. }   

3、规则

  1. rule "find solution"  
  2.     when   
  3.         # 规则:高尔夫球员Fred,目前不知道他的位置和衣服颜色   
  4.         Golfer( $fredsName : name == "Fred",    
  5.                 $fredsPosition : position,    
  6.                 $fredsColor : color  )   
  7.   
  8.         # 规则:Fred的右边球员穿蓝色的衣服   
  9.         # 潜在规则:该球员的衣服颜色和Fred不一样,名字不是Fred   
  10.         Golfer( $unknownsName : name != "Fred",    
  11.                 $unknownsPosition :  position == ( $fredsPosition + 1 ),   
  12.                 $unknownsColor : color == "blue",   
  13.                 color != $fredsColor )   
  14.   
  15.         # Joe排在第2个位置   
  16.         # 潜在规则:Joe的位置不是Fred的位置,Joe的衣服颜色不是Fred的颜色                     
  17.         Golfer( $joesName : name == "Joe",    
  18.                 $joesPosition  : position == 2,    
  19.                 position != $fredsPosition,   
  20.                 $joesColor : color != $fredsColor )   
  21.   
  22.         # Bob穿着格子短裤   
  23.         # 潜在规则:Bob的名字与穿蓝衣服的球员名字不同,Bob的位置和Fred,Joe,以及蓝衣球员的位置都不同   
  24.         #         Bob的颜色也于之前三个球员不同           
  25.         Golfer( $bobsName : name == "Bob",    
  26.                 name != $unknownsName,   
  27.                 $bobsPosition : position != $fredsPosition,   
  28.                 position != $unknownsPosition,                 
  29.                 position != $joesPosition,                                                     
  30.                 $bobsColor : color == "plaid",   
  31.                 color != $fredsColor,   
  32.                 color != $joesColor,   
  33.                 color != $unknownsColor )   
  34.                    
  35.         # Tom没有排在第1位或第4位,也没有穿橙色衣服   
  36.         # 潜在规则:Tom的位置与Fred,Joe,Bob的位置不同;Tom的衣服颜色不是橙色和蓝色,并于另外三人不同   
  37.         Golfer( $tomsName : name == "Tom",    
  38.                 $tomsPosition : position != 1,   
  39.                 position != 4,   
  40.                 position != $fredsPosition,   
  41.                 position != $joesPosition,    
  42.                 position != $bobsPosition,                                   
  43.                 $tomsColor : color != "orange",   
  44.                 color != "blue",   
  45.                 color != $fredsColor,   
  46.                 color != $joesColor,   
  47.                 color != $bobsColor )                   
  48.     then   
  49.         System.out.println( "Fred " + $fredsPosition + " " + $fredsColor );   
  50.         System.out.println( "Joe " + $joesPosition + " " + $joesColor );   
  51.         System.out.println( "Bob " + $bobsPosition + " " + $bobsColor );   
  52.         System.out.println( "Tom " + $tomsPosition + " " + $tomsColor );      
  53. end       

注:按照上面的方法会得到两个相同的结果,也就是规则被成功匹配两次,但结果相同。为何产生这个问题我暂时还没有想清楚,如果有谁了解问题的原因,请留言指点,谢谢!

 

分享到:
评论
1 楼 dong_ta 2008-06-23  
对,确实是这样

相关推荐

    Drools报错:The Eclipse JDT Core jar is not in the classpath

    - janino-2.5.16.jar:这是一个轻量级的Java源代码编译器,Drools可能用它作为替代编译器,特别是在对Eclipse JDT Core有特殊需求或者无法使用的情况下。 - droolsjbpm-ide-common.jar:这个文件可能包含了Drools与...

    Drools4Demo 示例 非常不错

    通过研究和理解Drools4Demo中的各个示例,开发者可以快速掌握Drools的用法,并将其应用于自己的业务场景,实现高效、灵活的业务规则管理。此外,Drools4Demo还提供了详细的文档和注释,帮助开发者更好地理解和学习...

    drools的使用示例代码

    Drools是一款强大的规则引擎,它...通过分析和实践这个项目,开发者不仅可以掌握Drools的基本用法,还能了解如何在实际项目中灵活运用Drools,实现业务规则的动态管理。这将对提升企业的业务敏捷性和决策效率大有裨益。

    drools5.1 规则流示例

    本示例旨在演示如何在Drools 5.1中使用规则流(Rule Flow)进行复杂的业务流程管理。规则流是Drools提供的一种工具,它允许用户通过图形化方式定义规则执行的顺序和条件,从而更好地控制业务逻辑的执行流程。 首先...

    drools5 规则动态加载示例

    在这个"drools5 规则动态加载示例"中,我们将探讨如何在不重启服务的情况下,实现规则的热更新,即动态加载修改后的规则文件,使得业务逻辑能够实时适应变化。 在传统的软件开发中,一旦应用部署,若需更改业务规则...

    Drools入门-环境搭建,分析及示例.docx

    4. **Drools Fusion**:专为事件处理和时间推理而设计,它能够实时分析和响应来自不同源的事件,适用于实时决策系统。 5. **Drools Planner**:这是一个自动规划引擎,用于解决复杂的优化问题,如车辆路线规划、...

    drools代码示例包

    这个“drools代码示例包”提供了与CSDN博客文章《Drools实战:一个详尽的指南》相关的示例代码,帮助读者深入理解Drools的工作原理和使用方法。 在Drools中,主要涉及以下几个核心概念: 1. **规则**:规则是...

    drools drools drools drools drools

    4. drools-examples:这可能是一个包含drools使用示例的目录,帮助开发者理解如何在实际项目中应用drools,涵盖了各种规则的创建、加载和执行。 drools 使用DRL(Drools Rule Language)作为规则定义的语言,它支持...

    drools6学习例子

    这部分可能包括各种Drools规则的语法示例,如条件语句(IF-THEN)、逻辑运算符、函数调用、事实模式、积累函数、约束条件等。通过这些例子,你可以了解到如何编写规则来匹配特定的事实对象,并在满足条件时执行相应...

    Drools规则引擎实现原理及示例

    Drools规则引擎是一种嵌套在应用程序中的组件, 是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。 它实现了将业务规则从程序代码忠分离出来,规则引擎使用特定的语法编写业务规则,规则引擎...

    Drools规则引擎实现示例

    4. **插入事实**:在示例中,可能会创建一个或多个`Customer`对象并将其插入到工作内存中,例如: ```java KieSession ksession = ...; // 初始化KieSession Customer customer = new Customer(); customer.set...

    drools-示例:Drools:规则引擎

    ** drools-examples-master 文件夹内容分析 ** `drools-examples-master` 压缩包很可能包含了 Drools 的示例项目,这些示例通常会演示如何创建、加载和执行规则,以及如何处理事实和规则结果。项目可能包括以下内容...

    Drools4Demo.rar

    在"压缩包子文件的文件名称列表"中,只提到了"Drools4Demo",这可能是整个示例项目的根目录。通常,这样的目录结构会包含以下部分: 1. **bin** 目录:可能包含可执行的Java程序或JAR文件,用于运行Drools示例。 2....

    drools7.5.0和spring 4.3.12集成示例

    在这个集成示例中,"drools7.5.0" 是 Drools 的一个特定版本,它包含了对规则定义、解析和执行的改进。"spring 4.3.12" 是 Spring 框架的一个稳定版本,提供了大量的增强和修复,包括对 Java 8 的全面支持。 集成...

    drools:流量MVN的实现示例

    标题 "drools:流量MVN的实现示例" 指涉的是使用 Drools 这一规则引擎来处理流量管理的场景,而该场景是通过 Maven(MVN)构建工具来实现的。Drools 是一个强大的业务规则管理系统,它允许开发者通过声明式的方式定义...

    drools使用的jar包

    drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行...

    Drools4 insurance例子

    【Drools4保险例子详解】 Drools4保险例子是一个基于Drools规则引擎的实战项目,展示了如何在J2EE环境下,特别是在使用JBoss应用服务器时,利用Drools进行业务规则管理。这个例子旨在帮助开发者理解如何将Drools...

    hellodrools:Drools 示例项目

    【标题】"hellodrools:Drools 示例项目"是一个基于Drools规则引擎的实践教程,旨在帮助开发者了解和掌握如何在Java应用程序中使用Drools进行业务规则的管理和执行。 【描述】"你好,Drools 示例项目"表明这是一个...

    Drools4.x实例

    7. 性能优化:在Drools4.x中,对性能进行了优化,包括更快的规则匹配和执行,以及更有效的内存管理。这使得Drools能够在处理大规模数据和复杂规则时仍然保持高效。 8. 社区支持:Drools拥有活跃的开发社区,提供了...

    drools7.25中文文档+drools技术指南.zip

    10. **案例研究与示例**:为了更好地理解和应用Drools,文档通常会包含多个实际的案例和示例,让你能够动手实践。 "Drools技术指南"可能会更深入地探讨上述某些主题,或者涵盖更高级的特性,如事件处理、规则流、...

Global site tag (gtag.js) - Google Analytics