Tag: drools

Drools Fusion支持持久,长时间运行的事件

我正在考虑使用Drools Fusion来实现以下示例性规则: 如果顾客在一年内购买了两件相同的产品,她将免费获得第三件 在最多连续三次交易中花费超过200美元的客户可获得折扣 当客户处于非活动状态超过一年时,会生成提醒 当单个订单大于最后六个monhts内的平均订单价值时,将通知主管 ……等等,这些只是我头脑中的例子 所有这些规则都可以使用Drools Fusion轻松表达。 然而,在创建原型并查看文档之后,似乎该产品更适合短期,瞬态事件(股票市场,实时决策)。 问题是: 是否需要将所有事件存储在内存中? (可能有数百万的旧购买)。 此外,Drools Fusion可以存储事件,以便它们在服务器重启后能够存活吗 (理想情况下在数据库中)。 我知道Drools Fusion事件只是Drools Expert中的事实,所以也许这个问题可以扩展到: Drools Expert能否坚持并懒惰加载事实?

drools中是否有任何API通过传递值动态创建drl文件?

我知道如何使用所有方法在KIE工作台中创建DRL文件。 但是我的问题是没有使用KIE工作台,我们可以使用我们要求的值创建.drl文件。如果有任何可能性,请建议我。 同样的方式建议我任何API都与此有关。 提前致谢。

Drools KnowledgeBase已弃用

我正在将Drools Rules引擎集成到我的应用程序中。 我发现开始的99%的例子看起来像: KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newUrlResource( url ), ResourceType.DRL ); if ( kbuilder.hasErrors() ) { System.err.println( builder.getErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( builder.getKnowledgePackages() ); StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession(); ksession.insert( new Fibonacci( 10 ) ); ksession.fireAllRules(); ksession.dispose(); 我有类似的工作,但我的问题是KnowledgeBase被标记为已弃用,这对我来说是一个红旗,我做错了。 现在, KnowledgeBaseFactory.newKnowledgeBase()未标记为已弃用,但它也返回KnowledgeBase类型。 那么,由于不推荐使用KnowledgeBase,我应该使用什么?

在Drools 6中以编程方式创建新drools规则的新方法是什么?

简而言之,我想在运行时从规则库创建,编辑和删除规则。 我很难弄清楚如何在流氓6+中做到这一点。 我知道在先前版本的drools(<= 5.6)中,有一个.drl文件的XML表示和一个用于它的API: https ://docs.jboss.org/drools/release/5.6.0 .Final / drools-expert-docs / html / ch04.html#d0e8052 。 从5.6开始的drools文档表明这已被弃用,它似乎在6处被完全删除。我不想使用已知没有直接升级路径的API。 由于工作流程要求以及Web用户界面的复杂性,将Guvnor或Workbench UI公开给用户以进行规则编辑也不太合适。 我想从Java代码创建和管理规则。 我想要一个比.rrl文件的字符串模板更好的方法来创建新规则和修改规则。 从Java以编程方式创建新规则的用途是什么? 我做了很多搜索,但似乎无法为此找到一组Java API调用。

决策树和规则引擎(Drools)

在我正在进行的应用程序中,我需要定期检查成千上万个对象的资格,以获得某种服务。 决策图本身采用以下forms,只是更大: 在每个端节点(圆圈)中,我需要运行一个动作(更改对象的字段,日志信息等)。 我尝试使用Drool Expert框架,但在这种情况下,我需要为图中的每个路径编写一条长规则,从而导致结束节点。 Drools Flow似乎也没有为这样的用例构建 – 我拿一个对象,然后,根据一路上的决定,我最终进入一个终端节点; 然后再次为另一个对象。 或者是吗? 你能给我一些这些解决方案的例子/链接吗? 更新: Drools Flow调用可能如下所示: // load up the knowledge base KnowledgeBase kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); Map params = new HashMap(); for(int i = 0; i < 10000; i++) { Application app = somehowGetAppById(i); // insert app into working memory FactHandle appHandle […]

Drools-如何找出所有规则匹配?

我有一个.DRL文件,它说了10个规则。 一旦我插入事实,可能会匹配一些规则 – 如何找出以编程方式匹配的规则?

在Drools 6中从数据库加载和更新规则

如何在启动时从数据库表加载规则并从Drools 6.2.0中的同一个表更新它们? 我找到了一个使用Drools 5的例子 ,我可以将其从Scala转换为Java,但看起来API已经发生了巨大变化……例如,我没有看到RuleBaseFactory类。 任何样品或文件将不胜感激。

如何以及如何整合Java Webapp + drools + Guvnor?

我计划引入Java规则,目前正在评估Drools以从应用程序外部化(物理地和逻辑地)业务规则。 由于这些业务规则通常由业务部门进行,我希望业务部门通过GUI对规则进行必要的更改。 我已经谷歌搜索集成java Web应用程序+ Drools + Guvnor,我没有得到任何地方。 我的问题: Drools是否支持轻量级GUI来编辑规则? Drools Guvnor是一个轻量级的GUI,还是有办法让它失败? 将应用程序集成到Guvnor以阅读规则有多容易? 关于通常简单实现集成Java Application + Drools + Guvnor的任何其他建议都会很棒。 任何指向教程的指针也会为我做。

使用Optaplanner解决VRPTWPD

我是optaplanner的新手,我希望用它来解决拾取和交付的VRPTW问题(VRPTWPD)。 我首先从示例repo中获取VRPTW代码 。 我想添加它来解决我的问题。 但是,我无法返回一个符合优先级/车辆限制的解决方案(必须在交付之前完成拾取,并且两者都必须由同一车辆完成)。 我一直在返回一个解决方案,其中硬分数是我期望的这样一个解决方案(即我可以在一个小样本问题中加上所有违规,并看到硬分数与我为这些违规分配的处罚相匹配)。 我尝试的第一种方法是遵循Geoffrey De Smet在此处概述的步骤 – https://stackoverflow.com/a/19087210/351400 每个Customer都有一个变量customerType ,描述它是皮卡(PU)还是交付(DO)。 它还有一个名为parcelId的变量,用于指示正​​在拾取或交付的包裹。 我向名为parcelIdsOnboard的Customer添加了一个shadow变量。 这是一个HashSet,它包含驱动程序在访问给定Customer时所拥有的所有parcelId。 保持parcelIdsOnboard更新的我的VariableListener如下所示: public void afterEntityAdded(ScoreDirector scoreDirector, Customer customer) { if (customer instanceof TimeWindowedCustomer) { updateParcelsOnboard(scoreDirector, (TimeWindowedCustomer) customer); } } public void afterVariableChanged(ScoreDirector scoreDirector, Customer customer) { if (customer instanceof TimeWindowedCustomer) { updateParcelsOnboard(scoreDirector, (TimeWindowedCustomer) customer); } } protected void updateParcelsOnboard(ScoreDirector scoreDirector, […]

将Spring drools-context.xml从5.0迁移到6.0

在drools 6中, Spring集成发生了一些变化,因此不再指定资源。 我如何在版本6中指定它们呢?