锁定老帖子 主题:规则引擎
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-04-06
flyingbug 写道 Drools还是很有用处的
可就是不知道规则解析的效率如何? 我想,如果不是企业的所有规则都用同样一种方式处理。不需要专门的规则服务器。效率问题,其实可以忽略不计,对于简单的情况,硬编码也可以啊。 如果俺知其然,也知其所以然。那么规则引擎,就不会象想象的那么复杂。 研究中...... |
|
返回顶楼 | |
发表时间:2006-04-06
看了各位的高见,受益匪浅。。。以前曾经接触过一个排班系统,感觉可以用的上这个规则引擎,当时我们是用的算法来做的,不知道哪位达人有用规则引擎做过排班系统,俺对这个蛮感兴趣,不妨交流一下。。。
|
|
返回顶楼 | |
发表时间:2006-04-11
在drools里面如何指定规则的优先级呢
|
|
返回顶楼 | |
发表时间:2006-04-25
wyyhzc 写道 在drools里面如何指定规则的优先级呢
规则本身无所谓优先级,但是两个规则之间的执行结果有冲突,这时候才需要优先级 drools中指定的方式很多fifo lifo... http://drools.codehaus.org/Conflict+Resolution |
|
返回顶楼 | |
发表时间:2006-09-24
使用规则引擎执行业务逻辑与在JAVA中执行嵌入式脚本有什么不同?比如一段BeanShell代码。
|
|
返回顶楼 | |
发表时间:2006-11-12
我刚接触规则引擎,想请教两个问题:
1.规则引擎和专家系统有什么区别。有资料上说规则引擎是在基于规则的专家系统上发展起来的,我看二者的结构图和原理很像,那二者的区别是什么呢? 2.到哪下载DROOLS呢,是不是应该是个安装文件呢。我在labs.JBoss.com下了两个drools-2.5-final-javadoc.tar,drools-2.5-final-src文件,不知道有没有用,有什么用。 期待回复,万分感谢! |
|
返回顶楼 | |
发表时间:2006-11-12
云淡风轻 写道 我刚接触规则引擎,想请教两个问题:
1.规则引擎和专家系统有什么区别。有资料上说规则引擎是在基于规则的专家系统上发展起来的,我看二者的结构图和原理很像,那二者的区别是什么呢? 2.到哪下载DROOLS呢,是不是应该是个安装文件呢。我在labs.JBoss.com下了两个drools-2.5-final-javadoc.tar,drools-2.5-final-src文件,不知道有没有用,有什么用。 期待回覆,万分感谢! 说来话长,还是拿文档慢慢看吧。 http://labs.jboss.com/portal/jbossrules/docs 还有要提问题,重开贴,别再人家贴子里回 |
|
返回顶楼 | |
发表时间:2006-11-13
Godlikeme 写道 云淡风轻 写道 我刚接触规则引擎,想请教两个问题:
1.规则引擎和专家系统有什么区别。有资料上说规则引擎是在基于规则的专家系统上发展起来的,我看二者的结构图和原理很像,那二者的区别是什么呢? 2.到哪下载DROOLS呢,是不是应该是个安装文件呢。我在labs.JBoss.com下了两个drools-2.5-final-javadoc.tar,drools-2.5-final-src文件,不知道有没有用,有什么用。 期待回覆,万分感谢! 说来话长,还是拿文档慢慢看吧。 http://labs.jboss.com/portal/jbossrules/docs 还有要提问题,重开贴,别再人家贴子里回 Godlikeme,看了你的回复特别开心,给了我在论坛和别人交流的信心。 你提供的网址让我会认真研究的,不过难度是有地,从没正而八经地看过学术方面的英文资料昵。 最后谢谢你对一个新手的指点。 总之,特开心 谢谢你! 补充:刚发现邮箱里webmaster@iteye.com发来的主题为“您的JavaEye会员账号已经激活”的邮件,不知我违规了没有,以后一定会注意。 |
|
返回顶楼 | |
发表时间:2007-05-16
calvin 写道 比如有多种促销方案,
第一个方案是两个产品A+一个产品B,整单打8.2折,结果便宜10元 第二个方案是两个产品B+一个产品C,整单打8折, 结果便宜12元 现在买了两个产品A,一个产品B,一个产品C,规则引擎能够推理得出要执行方案2么? 刚开始看drools,不知道这样实现是否可以?根据优先级,先匹配规则2,但是calvin给出的确实是执行方案1啊。 package com.sample import com.sample.DroolsTest.*; rule "sales promotion-1" salience 10 when a : A(varCountA : count -> ((varCountA.intValue()>=2))); b : B(varCountB : count -> ((varCountB.intValue()>=1))); then System.out.println( "整单打8.2折,结果便宜10元" ); a.setCount(varCountA.intValue()-2); b.setCount(varCountB.intValue()-1); modify( a ); modify( b ); end rule "sales promotion-2" salience 20 when b : B(varCountB : count -> ((varCountB.intValue()>=2))); c : C(varCountC : count -> ((varCountC.intValue()>=1))); then System.out.println( "整单打8折,结果便宜12元" ); b.setCount(varCountB.intValue()-2); c.setCount(varCountC.intValue()-1); modify( b ); modify( c ); end |
|
返回顶楼 | |
发表时间:2007-08-19
ozzzzzz 写道 大概我在96-97年开始关注规则的问题,那个时候我还没有什么明显的开发方法的概念.即使到今天我对这个问题的研究也没有太多的答案,而是由太多太多的问题.既然大家讨论规则引擎,我就顺便把我对规则问题的思考和疑问介绍给大家.
首先明显的一点,使用规则会对你的需求了解的过程,造成深刻而无法预料的影响.因为使用了规则,所以你的程序中表达的业务就可以划分为业务数据对象和业务规则两个部分.需求分析阶段了解的主要部分则有传统的对于对于需求的全范围的建模变成对需求中的业务所表达的数据进行建模.而对于业务规则的建模在向后推延到实施阶段。 其次业务规则的定义将会给需求分析的方法带来根本性的改变。由于业务规则将成为一种可以动态调整的部分,从而在初期将这些部分从需求在程序中固化下来的部分进行区分就是完全必要的。而这些区分的原则将非常重要,并且也会非常微妙。这里我们可以分析一下前面那个例子: 引用 开车”的规则有说“如果绿灯亮,前进”,也有说“如果前方有人,停车”,那么既有绿灯又有行人时该怎么办呢?你就必须指定第二条规则优先级高。但这些都是在规则里面定义好的,你不应该在运行时干预规则引擎。
在这个例子中判断绿灯亮、前进、判断前方有人、停止、问候前方人的母亲,这些都是规则,但是这些部分基本不会发生变化,所以应该固化在程序内部。而实际上进一步,前方有人-停止和前方绿灯-前进,这两个规则也是基本不会被更改的,也是需要固化的。但是这种逻辑实际上还是有可能在某些情况下被更改的,这就需要对这些规则留下动态屏蔽的能力。而实际上经常进行改变的,是对于前面绿灯-前进和前面有人-停止,这两个规则优先次序的判断逻辑,这个部分无疑是应该完全用规则引擎来管理。然而实际应用的情况要复杂的多,比如一张订单可以包括10个货物栏。这个时候,首先我们要明确知道这个规定注定会影响数据的存储逻辑,而数据的存储逻辑实际上是应该放在数据访问层中的。下订单这个业务行为也非常难与定义为一种业务逻辑还是一种行为职责,也就是产生订单这个行为是用一个程序的动作去实现,还是用一个规则引擎的规则实现?当然你可以先使用一个程序的动作实现,然后确定一个屏蔽的方法调用。而实际上我们遇到的情况将比这个复杂的多,需要你作出非常多的权衡。而实际上确实存在这样的一种可能,也就是你的程序的业务层中将不会再有具体的业务行为的业务对象,而只是一些单纯的数据对象和一些的方法对象,而这两者之间的联系仅仅依靠规则引擎来连接。而我认为在这样的情况下kiss将是必须遵守的。
所以第一个问题的答案是:你不应该自己选择。如果你要自己选择,那不就回到了原来的做法、在程序里写一大堆if...else...吗?那还要规则引擎来干什么呢?还是用上面这个例子,你可以再加上一条规则:“如果(绿灯亮 并且 前方有人),问候车前行人的母亲”。 而实际上对于需求分析的影响将是使用规则引擎造成的一个最为值得关注的问题,需要使用更加新鲜的分析方法。原来的基于数据和过程的认识系统,必须将过程和过程中的逻辑判断区分开来,并且进一步将逻辑判断划分为规则和流程所自身私有的规则加以区分。实际上这就意味着工作流引擎应该和规则引擎互相的可以调用,也就是说在每一个流程的节点都可以植入一个规则引擎的接口。(而实际上我认为是有AOP来设计一种规则和流程公用的引擎将是一种思路。) 同时由于规则引擎的引入,将会给测试造成的影响也是非常多,这一点大家应该比较好理解。实际全面的应用规则引擎将给你的日记开发的全过程造成非常重要的影响,而首先要解决的问题就是你必须决定要把什么东西放到规则引擎去完成,基本上可以认为一个项目的成功与否在这样的情况下关键就在此。 说得非常得好,这将是一个革命性的思想,就是对象只提供它能做什么,即功能,而因何,何时调用这种功能则由规则引擎来控制,而规则则是最终用户随时可以修改的,那么应用程序就变成了可进化的。 关于工作流,实际上我认为工作流的核心就是规则引擎,当然工作流可以保留它自己的业务对象--数据和行为--而不包括业务逻辑。但这里关于业务逻辑就有了疑问,某个业务对象的方法中包括了对其他对象的方法的调用,但何时,因何对这些其他对象的方法进行调用就是业务逻辑,那么这些业务逻辑如何纳入进规则引擎呢?如果把所有--如果不是更多--业务对象的业务方法中的这种逻辑判断统统交给规则引擎,这恐怕不是AOP能够解决的吧?在这里,我认为区分把何种业务逻辑放入规则引擎,何种业务逻辑应该像现在OO那样写死在代码中,区分的标准就是:对于这种业务逻辑,最终用户是否需要自定义 我感觉在企业应用上运用规则引擎的话,只需要一个简简单单的脚本系统就可以了,应用系统向脚本系统传递POJO的引用,POJO提供getter方法供脚本系统调用,脚本系统替应用系统写if/else,应用系统自己不用再写,编写一个GUI来写脚本,GUI中的各种变量取自于应用系统。这样一个最大的好处是确定性,没有drools那样fire rule后workMemory改变然后再次增加或者删除Activation的不确定性所带来的烦恼。 |
|
返回顶楼 | |