`
- 浏览:
111687 次
- 性别:
- 来自:
广州
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- package org.drools.benchmark.manners
-
- # 从客人中找出一位放入第一个座位
- # 根据Drools引擎的特性,应当是最后一个加入的Guest
- # 利用Context.state属性控制该规则只执行一次
- rule assignFirstSeat
- when
- # Context用于流程控制
- context : Context( state == Context.START_UP )
- #
- # 原例中使用的是 Guest() , 获得最后插入的Fact,但是这样会引起之前提到的Bug
- # 因此在下面进行了改进,保证找出三个兴趣都有的客人
- #
- guest : Guest( $name:name , $hobby : hobby )
- Guest ( name == $name , hobby != $hobby , $hobby1 : hobby )
- Guest ( name == $name , hobby != $hobby , hobby != $hobby1 )
-
- count : Count()
- then
- String guestName = guest.getName();
-
- # Seating用于记录每个座位上的客人,是寻找下一个座位的客人的依据
- Seating seating = new Seating( count.getValue(), 1, true, 1, guestName, 1, guestName);
- insert( seating );
-
- # Path用来避免已经入座的客人再次被选中
- Path path = new Path( count.getValue(), 1, guestName );
- insert( path );
-
- # 用于计数,并作为Seating的ID
- count.setValue( count.getValue() + 1 );
- update( count );
-
- System.out.println( "assign first seat : " + seating + " : " + path );
-
- # 进入找下一个座位环节
- context.setState( Context.ASSIGN_SEATS );
- update( context );
- end
-
- # 寻找相邻的同伴
- rule findSeating
- when
- context : Context( state == Context.ASSIGN_SEATS )
- # 获得最近安排好座位的客人
- $s:Seating( seatingId:id, seatingPid:pid, pathDone == true, seatingRightSeat:rightSeat, seatingRightGuestName:rightGuestName )
- # 找到一位有共同兴趣但性别不同的相邻客人
- Guest( name == seatingRightGuestName, rightGuestSex:sex, rightGuestHobby:hobby )
- Guest( leftGuestName:name , sex != rightGuestSex, hobby == rightGuestHobby )
-
- count : Count()
- # 排除已经入座的客人
- #
- # 原例中使用了Path.id作为一个约束条件,而事实上要排除已经入座的客人只要判断guestName就可以了
- # 因此原例中的makePath规则如果注释掉,然后将下面的语句改为
- # not ( Path( guestName == leftGuestName) )
- # 执行后也可以得到完全相同的结果
- # Manners是作为规则引擎的测试基准发布的,因此这里完全按照标准实现,所以这里虽然
- # 可以进行改进,但是可能因为为了测试规则引擎,因此保留这种算法
- #
- not ( Path( id == seatingId, guestName == leftGuestName) )
-
- # 排除入座客人已经和使用过的兴趣,保证两边相邻的客人共同兴趣不一样
- not ( Chosen( id == seatingId, guestName == leftGuestName, hobby == rightGuestHobby) )
- then
- int rightSeat = seatingRightSeat;
- int seatId = seatingId;
- int countValue = count.getValue();
-
- # 安排一个新的座位
- Seating seating = new Seating( countValue, seatId, false, rightSeat, seatingRightGuestName, rightSeat + 1, leftGuestName );
- insert( seating );
- # 记录已经入座的客人
- Path path = new Path( countValue, rightSeat + 1, leftGuestName );
- insert( path );
- # 记录已经使用的兴趣爱好
- Chosen chosen = new Chosen( seatId, leftGuestName, rightGuestHobby );
- insert( chosen );
-
- System.err.println( "find seating : " + seating + " : " + path + " : " + chosen);
- count.setValue( countValue + 1 );
- update( count );
-
- context.setState( Context.MAKE_PATH );
- update( context );
-
- retract ( $s );
- end
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rule makePath
- when
- Context( state == Context.MAKE_PATH )
- Seating( seatingId:id, seatingPid:pid, pathDone == false )
- $path : Path( id == seatingPid, pathGuestName:guestName, pathSeat:seat )
- not Path( id == seatingId, guestName == pathGuestName )
- then
- System.out.println ( "makePath :" + $path );
- insert( new Path( seatingId, pathSeat, pathGuestName ) );
- end
-
- # 结束座位的路径设置
- rule pathDone
- when
- context : Context( state == Context.MAKE_PATH )
- seating : Seating( pathDone == false )
- then
- seating.setPathDone( true );
- update( seating );
-
- context.setState( Context.CHECK_DONE );
- update( context );
- end
-
- # 检查是否安排的客人座位已经到达指定人数,结束规则运算
- rule areWeDone
- when
- context : Context( state == Context.CHECK_DONE )
- LastSeat( lastSeat: seat )
- Seating( rightSeat == lastSeat )
- then
- context.setState(Context.PRINT_RESULTS );
- update( context );
- end
-
- # 如果之前的areWeDone规则没有允许,则继续座位查找
- rule continue
- when
- context : Context( state == Context.CHECK_DONE )
- then
- context.setState( Context.ASSIGN_SEATS );
- update( context );
- end
-
- # 打印完成提示
- rule allDone
- when
- context : Context( state == Context.PRINT_RESULTS )
- then
- System.out.println( "All Done" );
- end
-
-
-
-
-
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
标题 "Drools报错: The Eclipse JDT Core jar is not in the classpath" 提示了一个常见的编程问题,即在使用Drools规则引擎时,由于缺少Eclipse JDT(Java Development Tools)核心库,导致运行错误。这个问题涉及...
本示例旨在演示如何在Drools 5.1中使用规则流(Rule Flow)进行复杂的业务流程管理。规则流是Drools提供的一种工具,它允许用户通过图形化方式定义规则执行的顺序和条件,从而更好地控制业务逻辑的执行流程。 首先...
通过研究和理解Drools4Demo中的各个示例,开发者可以快速掌握Drools的用法,并将其应用于自己的业务场景,实现高效、灵活的业务规则管理。此外,Drools4Demo还提供了详细的文档和注释,帮助开发者更好地理解和学习...
4. **插入事实**:在示例中,可能会创建一个或多个`Customer`对象并将其插入到工作内存中,例如: ```java KieSession ksession = ...; // 初始化KieSession Customer customer = new Customer(); customer.set...
Drools是一款强大的规则引擎,它...通过分析和实践这个项目,开发者不仅可以掌握Drools的基本用法,还能了解如何在实际项目中灵活运用Drools,实现业务规则的动态管理。这将对提升企业的业务敏捷性和决策效率大有裨益。
【标题】"hellodrools:Drools 示例项目"是一个基于Drools规则引擎的实践教程,旨在帮助开发者了解和掌握如何在Java应用程序中使用Drools进行业务规则的管理和执行。 【描述】"你好,Drools 示例项目"表明这是一个...
这个“drools代码示例包”提供了与CSDN博客文章《Drools实战:一个详尽的指南》相关的示例代码,帮助读者深入理解Drools的工作原理和使用方法。 在Drools中,主要涉及以下几个核心概念: 1. **规则**:规则是...
Drools规则引擎是一种嵌套在应用程序中的组件, 是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。 它实现了将业务规则从程序代码忠分离出来,规则引擎使用特定的语法编写业务规则,规则引擎...
** drools-examples-master 文件夹内容分析 ** `drools-examples-master` 压缩包很可能包含了 Drools 的示例项目,这些示例通常会演示如何创建、加载和执行规则,以及如何处理事实和规则结果。项目可能包括以下内容...
4. drools-examples:这可能是一个包含drools使用示例的目录,帮助开发者理解如何在实际项目中应用drools,涵盖了各种规则的创建、加载和执行。 drools 使用DRL(Drools Rule Language)作为规则定义的语言,它支持...
4. **Drools Fusion**:专为事件处理和时间推理而设计,它能够实时分析和响应来自不同源的事件,适用于实时决策系统。 5. **Drools Planner**:这是一个自动规划引擎,用于解决复杂的优化问题,如车辆路线规划、...
在"压缩包子文件的文件名称列表"中,只提到了"Drools4Demo",这可能是整个示例项目的根目录。通常,这样的目录结构会包含以下部分: 1. **bin** 目录:可能包含可执行的Java程序或JAR文件,用于运行Drools示例。 2....
这部分可能包括各种Drools规则的语法示例,如条件语句(IF-THEN)、逻辑运算符、函数调用、事实模式、积累函数、约束条件等。通过这些例子,你可以了解到如何编写规则来匹配特定的事实对象,并在满足条件时执行相应...
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保险例子详解】 Drools4保险例子是一个基于Drools规则引擎的实战项目,展示了如何在J2EE环境下,特别是在使用JBoss应用服务器时,利用Drools进行业务规则管理。这个例子旨在帮助开发者理解如何将Drools...
标题 "drools:流量MVN的实现示例" 指涉的是使用 Drools 这一规则引擎来处理流量管理的场景,而该场景是通过 Maven(MVN)构建工具来实现的。Drools 是一个强大的业务规则管理系统,它允许开发者通过声明式的方式定义...
在这个"drools5 规则动态加载示例"中,我们将探讨如何在不重启服务的情况下,实现规则的热更新,即动态加载修改后的规则文件,使得业务逻辑能够实时适应变化。 在传统的软件开发中,一旦应用部署,若需更改业务规则...
4. **易于维护**:由于 drools 的规则独立于业务代码,更改规则无需重新编译整个项目,降低了维护成本。 总的来说,这个 drools7.5.0 和 spring 4.3.12 的集成示例提供了一个实用的方法,让开发者可以在 Spring ...
Drools4.x实例 Drools是一款强大的规则引擎,属于Java开源社区JBOSS的一部分。它基于Business Rule Management System (BRMS)的概念,帮助企业快速实施业务规则,从而提高业务决策的灵活性和效率。在Drools4.x版本...
《深入学习Drools:构建智能业务规则引擎》 Drools是一款强大的开源规则引擎,由Jboss(现为Red Hat)...在"Learning-Drools-master"这个项目中,你可以找到相关的示例代码和教程,进一步加深对Drools的理解和应用。