`
zhangcheng
  • 浏览: 120081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用JBoss Drools实现Hanoi Tower程序

阅读更多
最近在学习规则推理引擎,主要是在看JBoss Drools,有了一点点入门,自己写个例子练习一下,同时也和初学的同学们分享交流。
规则定义的代码如下:Hanoi.drl
package com.sample.hanoi

/*

	

*/
#list any import classes here.


#declare any global variables here

rule "apply for the n=1"
	when
		#conditions
		h : Hanoi( sequence == 1 )
	then 
		#actions
		System.out.println( h.getOne() + " -> " + h.getThree() );
		
end


rule "apply for the n>1."
	#include attributes such as "salience" here...
	when
		#conditions
		h : Hanoi( sequence > 1 )
	then 
		#actions
		insert( new Hanoi( h.getSequence() - 1,h.getTwo(),h.getOne(),h.getThree() ) );
		insert( new Hanoi( 1, h.getOne(), h.getTwo(), h.getThree()) );
		insert( new Hanoi( h.getSequence() - 1,h.getOne(),h.getThree(),h.getTwo() ) );
		
end


以上是Hanoi算法的规则表示,是比较简单的,主要注意两个问题:
首先,我采用的是Drools官方示例中的Fibonacci的例子的解决办法,引入了一个sequence的变量,这个变量是来记录有多少层塔的。
其次,大家在看代码的时候,可能注意到了,在"apply for the n>1."规则的后件中的顺序与我们平常写得Hanoi程序正好相反,这是为什么呢?原来这是Drools冲突解决策略的一种方案。
Drools的冲突解决的方案主要两种:
第一种:Salience,即优先级策略。用户可以为某个 rule 指定一个高一点的优先级(通过附给它一个比较大的数字)。高 Salience 的 rule 将会被优先激发。
第二种:LIFO,当规则的salience相同,又出现执行顺序冲突时,按照LIFO(后进先出)策略
我这里是利用了第二种策略,所以顺序正好相反。
下面是Hanoi的Bean类和程序的主类:
public class Hanoi {

	private String one;
	private String two;
	private String three;
	
	private int sequence;

	public Hanoi() {
		super();
	}

	public Hanoi(int sequence) {
		super();
		this.sequence = sequence;
	}
	
	

	public Hanoi(int sequence, String one, String two, String three ) {
		super();
		this.one = one;
		this.two = two;
		this.three = three;
		this.sequence = sequence;
	}

	/**
	 * @return the sequence
	 */
	public int getSequence() {
		return sequence;
	}

	/**
	 * @param sequence the sequence to set
	 */
	public void setSequence(int sequence) {
		this.sequence = sequence;
	}

	/**
	 * @return the one
	 */
	public String getOne() {
		return one;
	}

	/**
	 * @param one the one to set
	 */
	public void setOne(String one) {
		this.one = one;
	}

	/**
	 * @return the two
	 */
	public String getTwo() {
		return two;
	}

	/**
	 * @param two the two to set
	 */
	public void setTwo(String two) {
		this.two = two;
	}

	/**
	 * @return the three
	 */
	public String getThree() {
		return three;
	}

	/**
	 * @param three the three to set
	 */
	public void setThree(String three) {
		this.three = three;
	}
	
	
}

public class HanoiExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception  {
		final PackageBuilder builder = new PackageBuilder();
        builder.addPackageFromDrl( new InputStreamReader( FibonacciExample.class.getResourceAsStream( "/Hanoi.drl" ) ) );

        final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
        ruleBase.addPackage( builder.getPackage() );

        final StatefulSession session = ruleBase.newStatefulSession();
        
        session.insert( new Hanoi( 4, "A", "B", "C" ) );

        session.fireAllRules();

        session.dispose(); // Stateful rule session must always be disposed when finished
	}


这是我自己尝试的第一个例子,在写规则的时候,我觉还是有很多问题的,最主要的就是:如何更好的里利用drools提供的功能,写出精炼的规则?还有很多的隐藏的规则如何发现?这些都是需要多多经验的,希望能够和大家讨论,共同进步。

分享到:
评论
1 楼 huming_h 2009-03-13  
谢谢分享。。。

相关推荐

    jboss drools5.5 规则流完整代码

    **JBoss Drools 5.5 规则流完整代码详解** JBoss Drools 是一个开源的业务规则管理系统(BRMS),它允许开发者通过规则语言(如DRL)来定义和执行业务规则。在5.5版本中,Drools 提供了强大的规则流(Rule Flow)...

    jboss drools 书籍源码

    jboss drools programer guider书籍源码

    Mastering JBoss Drools 6 for Developers

    《掌握JBoss Drools 6》这本书为读者提供了深入理解Drools项目原理的机会,通过学习如何利用业务规则的力量来构建更智能的应用程序。该书不仅介绍了Drools规则语法、运行时配置等基础知识,还深入探讨了规则引擎内部...

    Mastering JBoss Drools 6 for Developers_And_SourceCode.zip

    Mastering JBoss Drools 6 will provide you with the knowledge to develop applications involving complex scenarios. You will learn how to use KIE modules to create and execute Business Rules, and how ...

    Mastering JBoss Drools 6 for Developers 无水印pdf 0分

    Mastering JBoss Drools 6 for Developers 英文无水印pdf pdf使用FoxitReader和PDF-XChangeViewer测试可以打开

    myeclipse8.6安装jboss drools 6.0规则引擎插件

    本文将详细介绍如何在MyEclipse 8.6中安装和配置JBoss Drools 6.0规则引擎插件,这是一款强大的业务规则管理系统,用于编写和执行复杂的业务规则。遵循以下步骤,您可以轻松地在开发环境中集成Drools: 1. 首先,您...

    JBoss Drools培训.pptx

    **JBoss Drools**是Red Hat公司的开源业务规则管理系统(BRMS),它是JBoss企业级中间件套件的一部分。Drools提供了一种强大的规则引擎,用于实施和管理业务规则,使得开发人员能够以声明式的方式编写规则,而无需...

    jboss 规则引擎 drools库 drools-compiler-5.1.1.jar

    jboss 规则引擎 drools库。 api,core,compiler,jsr94 drools-compiler-5.1.1.jar

    JBoss_Drools教程

    **JBoss Drools 教程** **Drools 简介** Drools 是 Red Hat 公司 JBoss 业务逻辑智能模块,主要用于处理业务规则。作为一个强大的规则引擎,Drools 提供了一种声明式的编程方式,使得开发者可以专注于描述“做什么...

    JAVA规则引擎JBOSS RULES(DROOLS 6.5) 动态规则

    JAVA规则引擎JBOSS RULES,也被称为DROOLS,是一种强大的业务规则管理系统,它允许开发者用自然语言来编写业务规则,并在运行时执行这些规则。DROOLS 6.5是该规则引擎的一个版本,提供了许多改进和新特性,以提高...

    JBoss Drools 5

    此外,Drools还可以与其他JBoss产品(如JBoss AS、JBoss BPM Suite等)一起使用,以构建完整的业务解决方案。 **5. 开发规则驱动的应用程序** - **定义规则**:使用Drools提供的工具和技术定义具体的业务规则。 - ...

    FuzzyReasoningDemo:使用Jboss drools规则引擎实现的模糊推理演示

    使用 Jboss drools 规则引擎实现的模糊推理演示。 第一次后的rete加载时间短而稳定。 不管你的规则有多少,加载时间只会增加一点。 您可以使用编码来创建规则文件 (.drl)。 其中,规则0是控制循环的规则。 其他...

    Drools规则引擎开发实例+源码

    在" Drools规则引擎开发案例 "中,你可能会学到如何设置和配置Drools环境,创建并加载规则文件,以及如何在Java应用程序中使用Drools API来操作规则。你还会看到如何插入事实,触发规则执行,以及如何查看和分析执行...

    droolsworkflow:使用 jboss drools 的生物信息学工作流程。 来自 Ekrame Jacobi Genoscope Evry 的想法

    总结来说,"droolsworkflow"项目展示了如何利用JBoss Drools作为规则引擎,实现高效、可扩展的生物信息学工作流程。这种创新的实践方式不仅提升了生物信息学的分析效率,也为其他领域的复杂数据处理提供了新的思路。...

    Eclipse3.7集成JbossTools+Drools

    8. **实战应用**:具备了JBossTools和Drools的Eclipse3.7可以用于构建基于规则的业务应用,例如自动化决策系统、风险管理平台等,通过规则引擎实现动态和灵活的业务逻辑处理。 总结:Eclipse3.7集成JbossTools+...

    springdrools:带有 JBoss Drools 和 KIE 的 Spring Boot 示例项目

    《Spring Boot结合JBoss Drools实现智能决策系统详解》 在现代企业级应用开发中,规则引擎成为处理复杂业务逻辑的重要工具,其中JBoss Drools是业界广泛应用的规则引擎之一。Spring Boot以其轻量级、快速启动和丰富...

    Drools Developer’s Cookbook

    本书籍页数为310页,语言为英语,提供了超过40个使用JBoss Drools规则引擎创建强大业务规则实现的配方(或解决方案)。书籍的ISBN-10为***,ISBN-13为978-***,书籍尺寸为0.6 x 7.4 x 9.1英寸。书籍不仅介绍了如何在...

Global site tag (gtag.js) - Google Analytics