我们正在制定一项规则,其结构如下:
当我们想要更新元素的原始ArrayList时,问题就出现了。我们需要能够在工作内存中的原始ArrayList中更新刚刚经过验证的未验证元素,以便循环可以考虑“刷新的”ArrayList。
三个问题:
首先,在Drools中使用modify和update的确切区别是什么。根据Drools文件:
“在规则的右侧,建议使用modifystatement,因为它在单个语句中进行更改并通知引擎。”
所以两者之间的区别只是简单的语义学,比如:
modify( $sprinkler ) { setOn( true ) };
和
$sprinkler.setOn(true);
update($sprinkler);
这个假设正确吗?
其次,是否可以在Drools中的工作内存中更新或修改ArrayList中的特定元素,而无需使用普通Java迭代器(“for”)。在我们的例子中,每个元素都使用我们从列表中获得的唯一ID来标识,因此我们将有一个有效的引用来更新其状态(已验证或未验证)。
最后,我们知道更新工作内存会导致规则再次触发。假设我们有一个包含两个未验证项的ArrayList。如果我们要获取所有未验证的项目来验证它们,我将创建一个规则“first”,该规则将触发两次,每个未验证的项目触发一次:
rule "first"
when
$listOfElements : java.util.ArrayList ( )
$itemsToValidate : Element ( status == "not validated" ) from $listOfElements
then
//do something or not
end
如果在第二条规则中,我将验证某些项目,并希望在工作内存中将未验证元素的状态更改为已验证,如下所示:
rule "second" extends "first"
when
//we validate attributes of the non-validated element against attributes of the validated elements
then
//my second question is if something like this is actually possible (solution without Java iterator)
$itemsToValidate.setStatus("validated")
modify ($listOfElements) { $itemsToValidate };
end
这将如何影响整个过程?工作记忆的实现将促使人们重新评估第一条规则。由于遇到了两个未验证的元素,此规则已经启动了两次。剩下的元素将只评估一次还是多次?
第一个问题的答案是,这两个片段之间没有区别。(第二条中的两条之间插入的语句会影响我的回答。)
第二个问题的场景不使用相同形式的更新。将列表作为事实插入但对列表元素进行操作通常被认为是不好的。插入列表元素。容器作为将列表元素保存到一个事务或其他事务的容器可能有用,也可能不有用。
想想有没有一种方法可以使用Drools API将drl文件转换为excel工作表? 我们目前使用的是Drools 5.3,但实际上可以使用任何版本。 提前感谢
问题内容: 在启动时如何从数据库表中加载规则并从Drools 6.2.0中的同一表中更新规则呢?我找到了一个使用Drools 5 的示例,我可能可以将它从Scala转换为Java,但看起来API发生了巨大变化……例如,我看不到RuleBaseFactory类。 任何样品或文件将不胜感激。 问题答案: 我不确定从哪儿拿来的。以下是在Drools 5.3(可能更早)至5.6中的完成方式: 省略号指示用
任何关于这个或者如何使用drools api修改drools规则的想法都将是有用的。 注意:我不想为修改规则做字符串替换。
在为我的项目实现了一些规则之后,我做了一个“ScoreConsistencyCheck”,以确保规则得到了正确的实现。 表示实现我自己的方法,该方法将在我提前终止求解或通过配置终止后调用,输出预期分数。该方法的参数是一个实例,基于解决方案的状态计算预期分数,然后将其与来自解决方案实例的“分数”变量的分数进行比较。 当我使用时,它不会抛出异常,但是当我这样尝试时,我有时会在构建启发式或本地搜索的特定
请帮助我下面的代码,我得到相同的输出,即使改变值 值9未更新。
我对口水和探索完全陌生。到目前为止,我一直在使用一个规则和withing,我们使用if条件,就像Java一样。 2.我会使用函数,我知道的是用java编写函数并导入它们。 3.是否有可能在Drools中创建函数,并像在Java中一样使用? 我并没有以它应该使用的方式使用Drools,但到目前为止,规则还没有我们现在使用的规则那么复杂。任何帮助对我都是有用的。