我们使用Drools和一个用户可以更新/编辑规则的界面。然后将这些规则存储(并进行版本控制)到数据库中。之后,再次从数据库中提取规则,并按照以下方式逐个添加:
for (Rule rule ...) {
knowledgeBuilder.add(ResourceFactory.newByteArrayResource(rule.getRuleContent().getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) { throw
我有一个用例,在这个用例中,我有一个即将到来的室温流。水流每分钟有一个温度读数。我想计算每小时的平均温度,如果这一小时的平均温度超过最后一小时的平均温度5度,我会发出警报
例如:
我有下午1:00到2:00的读数…我计算了这一小时的平均温度。让我们说它是A.
我从下午2点到3点有读数。。我计算这一小时的平均温度。比如说它的B。
如果B-A>=5
我无法拿出这个DRL文件。有人能帮我吗 这应该是以滑动方式工作还是一小时一小时地工作?我假设是第一种情况,但适应第二种情况应该不会太困难。该解决方案基于
我正在使用Drools 5.5.0 Final Expert做报警关联。我试图把事实收集到ArrayList集合中。我的drl文件如下所示。根据规则,我调用Java方法来访问收集的事实
rule "Rule [Alarm Collection]"
no-loop
when
$alarmColl : ArrayList() from collect(Alarm
(
JustInserted == true;
))
我是drools新手,目前我们在项目中使用drools 5.4.0。
目前,我们正在使用Drools 5.4.0的RuleCompiler.java和PackageBuilder.java类编译.xls文件并创建ruleSetObject。代码片段如下所示
String drlFromFile = null;
if (Pattern.matches(regexPattern, file.getName())) {
if (file.getName().contains("csv") ||
我正在试验Drools反向链接机制和一些简单的Web本体语言(OWL)-RL逻辑。OWL支持反向属性,这意味着我必须从TBox生成递归查询。Drools文档声明“算法使用堆栈来处理递归,因此方法堆栈不会爆炸。”,但当调用我的查询时,CPU使用率将达到100%,堆栈将无限增长。我对两个逆属性“tsEquivalen”和“phxeequivalent”有三个查询。调用的查询是“bind\u tsEquivalent\u value”查询
我的ObjectPropertyQueryResult如下所示
标签: Drools
optaplannerkie-workbench
我有一个基于Optaplanner的应用程序(基于web),它从类路径中的静态.drl文件中读取评分约束以解决问题。但是,我现在尝试允许客户通过Drools Workbench产品创建/更改规则。我没有找到任何与将使用Workbench创建的规则集成到我的应用程序相关的文档或示例。据我所知,Workbench的输出是一个jar文件
如何在Optaplanner中动态使用该jar来解决jar文件中的规则问题
有没有我遗漏的例子
我读了杰弗里·德斯米特(Geoffrey De Smet)的这篇博
已经存在用于控制规则的UI。并使用drl文件执行CRUD等操作,甚至使用dsl来简化为非技术人员制定此类操作的drl规则。那么,有没有其他方法可以创建我们自己的网页来控制这些规则,从而使其更易于使用呢
是否有任何方法可以编辑可用工作台UI的源代码?Drools是开源的,您可以根据需要修改UI。您还可以通过将Drool包装到服务中并通过自己的简化API调用它,将其视为体系结构中的组件。然后,您可以从自己的web前端调用API。我不确定是否理解您的问题。Drools是开源的-您可以根据许可证使用它。
我觉得这个问题可能没有一个简单的答案
假设这是我的决策表,它对一个名为“input”的对象实例进行操作
我的例子是,如果a不是1,b不是在(5,6)中,那么将c设置为11。
但是,如果b为6,第一条规则仍将触发,因为b不是5,因此将c设置为11
我希望保持列的组织,而不必在一列中放入多个值
问题:我是否可以使用某种类型的标题,基本上将决策表转换为单个规则,其中b不在a为1的任何行中?还是其他方法
我很想否定这个规则:
CONDITION CONDITION ACTION
a =
在Drools中,最好将声明的对象保留在工作内存中,或者在完成后立即删除它们
以简化的规则文件为例(假设已声明对象等)
规则“获取红色结果”
什么时候
所有结果
然后
/*从AllResults中获取红色结果*/
插入(新的红色结果)
结束
规则“获得蓝色结果”
什么时候
所有结果
然后
/*从AllResults获取蓝色结果*/
插入(新结果)
结束
/*这条规则是最佳实践还是增加了会话执行时间*/
规则“删除不再需要的所有结果”
什么时候
红色结果
蓝色结果
所有结果
然后
删除(所有结果
我是第一次使用Drools。在累积函数中,我有一个场景来检查java的(!=null)特性。但在口水中我发现了不起作用
什么时候
)
非常感谢您的帮助。编辑规则如下:
Person(adresses !=null) && $addr : String(length > 0) from accumulate(
$person : Person(),
action(
$addre
我正在运行tomcat上的Drools 7.7.0.KIE服务器。我在通过RESTful调用KIE服务器启动容器时看到了这种行为
容器永远不会被创建,RESTful调用将无限期挂起。当我查询服务器时,我看到容器卡在“status=“Creating”中
这种情况并不总是发生。这似乎取决于规则。在大多数情况下,我的LHS(when子句)的格式为
myObject((field1!=null)和&field2)。。。等
..其中字段2是布尔值
当我尝试一些复杂的事情,比如
myObject(json
在下面的规则中,then部分中的逻辑将对通过给定条件的所有子对象执行,我想在逻辑之后中断循环
在这种情况下,该部分只执行一次,如何做到这一点
rule "test"
when
Parent( $childList : childList != null, childList.empty == false)
Child('testing'.equalsIgnoreCase(attribute)) from $c
标签: Drools
optaplannertimetable
我正在研究一个流口水的时间表问题。我有一个规则,强制解算器总是在前一个时间段(给定课程)上讲课,至少从第一个时间段(索引=0)开始。示例:如果您在周一从时间段0到4连续上课,您就可以了;但是,例如,如果你没有关于时隙2的讲座,那么你的硬分数是-1
// PeriodsWithoutLectures: All the periods must have consecutive lectures, at least since the 0 index timeslot onwards
rule "p
我正在创建一个DMN,在一个数据类型中包含大约43个输入字段。但是,当创建包含26行项目的两个DMN表时,验证需要花费大量时间(10分钟以上)。如何解决此问题?您可以提供一些问题代码吗?您是否使用Business Central?你能在drools使用论坛上分享DMN模型吗?
这是我的optaplanner配置的一部分
<solutionClass>com.core.domain.schedule.WorkSchedule</solutionClass>
<entityClass>com.core.domain.Arrange.IWorkArrange</entityClass>
<entityClass>com.core.domain.BasicConstru
标签: Drools
drools-guvnordrools-plannerdrools-flow
我看到像org.drools.lang.api.PackageDescrBuilder和org.drools.lang.api.impl.RuleDescrBuilderImpl这样的类以编程方式创建规则,但我没有看到任何这样的示例
基本上,用户将创建一个规则并将文件上载到一个位置。我已经阅读了这些规则文件,并设置了生效日期、过期日期、启用日期等规则属性
根据org.drools.rule.ruleapi,可以设置一些方法,但我不知道如何读取rule.drl文件并将其转换为org.drools.
我正在使用Optaplanner 6.2.0.CR4和Drools对解决方案进行增量评分,以完成一个顶点项目。这个问题与Optaplanner的护士排班示例非常相似,只是增加了一点复杂性。我想知道是否有一些常见的陷阱可以减缓我在代码中寻找的流口水。解算器非常快地运行构建阶段,但当它到达本地搜索阶段时,会碰到一堵墙。Drools加入了很多额外的东西,比如计算每个发薪期的工作日,每个发薪期的特定时间段空闲时间,等等,我想我写规则的方式可能是问题所在。参见文档。尤其要注意你的“每秒平均分数计算计数”。
我正在使用KIE Drools工作台(与Tomcat7一起使用)。
这是一个即将到来的项目的口水评估过程的一部分
我有以下疑问:
在这里的Data Modeler选项中,我想知道是否可以向Java对象添加方法
Drools工作台将所有项目工作存储到GIT存储库中。我可以切断这个GIT连接并将所有项目工作直接保存到我的文件中吗
提前感谢您的帮助。1-是的,在社区版本6.2中,您可以在drools wb和kie wb中添加自己的方法。为了做到这一点,你基本上有两个选择
1.1: use the so
下面是dsl的一些简单示例。假设在WHEN块中,true是“city==“NY”,那么在“then”块中,有没有办法知道哪个条件是true
rule "First Promotion"
when
m : Promotion( city == "NY" || products == "SCHERP_S" || assignedProduct == "SCHERP_XL" )
then
**//Here I have to know what was true in
现在我想在blot中使用Drools,它在LocalCluster中正常工作,但是当我把它放到生产集群中时,它出现了错误。
污点是:
public class DealLostBolt extends BaseRichBolt {
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LoggerFactory.getLogger("DEAL_LOST
在Drools中考虑以下场景:
我们有一个规则,将a和B类型的对象相互匹配
rule 1
when
$a : A()
$b : B($a.matches($b), flagged == false)
then
mofidy($b) { flag($a) }
end
但是,A对象有一个名为priority的字段,当AB到达工作内存时,具有最高优先级的匹配A应该首先标记它,而不是所有其他匹配的As。
这在口水里怎么可能?它是如何影响性
你好,流口水的家伙
我正在使用下面提到的api从字符串加载规则
https://stackoverflow.com/questions/42927331/how-to-load-rules-from-a-string-in-drools-6-5
然而,我发现它是在内存中创建的,而不是写入硬盘上的文件
是否有api来获取这种行为
干杯 Drools API解决的问题与在OS文件系统上创建资源不同
KIE虚拟文件系统KIE文件系统来构建项目
KieFileSystem是框架提供的内存中文件系统
我正在尝试使用Business Central/Workbench模块。按照jBPM的[入门][1]中提供的说明进行操作。我尝试了所有预定义的登录。什么都不管用。
它抛出
我还试图查看应用程序角色.properties和应用程序用户.properties文件。两者似乎都是空的(只有注释)
该错误类似于:
ERROR [io.undertow.request] (default task-5) UT005023: Exception handling request to /business-c
在“新样式”测试场景下,是否有方法填充正在测试的对象的列表属性
我看到一些“遗留”测试用例似乎实现了这一点,因此我想知道新样式的测试场景是否能够处理这一点
我将列表模型添加到我的测试用例中,这使我能够展开对象的子属性,但是那里只有一个字段可用,“empty”(布尔值)。有没有办法在这里添加对象?如果有什么不同,那么该模型就是一个外部java依赖项
更新
我无法添加对象列表的原因是,我没有显式地将该对象依赖项导入测试。导入后,您可以按照下面答案中给出的步骤进行操作。在测试场景编辑器下管理列表属性绝
我们需要一个系统来证明这样的定理:
(A+B)。(C+D)+E+C.(E+D)=A.C+A.D+B.C+B.D+E+C.E+C.D
这些可能更加复杂
如何使用Drools为此制作程序
尝试使用update-modify方法创建搜索树,但不知何故没有成功。与其他Drools项目一样:
确定您的需求
在每个规则的一个简短的、易读的简单句子中定义您的业务规则
确定你的事实是什么
滴水器
你是认真的吗?你想让我们同时解决一个学术性的复杂问题吗?您甚至还没有指定正式系统的公理或任何其他有关如何操作其字符串
我正在尝试从guvnor web应用程序运行drl文件
调用guvnor的程序如下所示
public class RunGuvnorRules {
public static final void main(String[] args) {
try {
// load up the knowledge base
KnowledgeBuilderConfiguration kbuilderconfiguration = KnowledgeBuilderFac
如果我有一个查询(比如使用$invar和$outvar),我可以很容易地获得Java中$outvar的列表。但是,有没有一种方法可以在规则中收集这些信息?稍后,我可以通过引用$outvar单独获得一个结果,但如果可能,我希望使用collect、accumulate或from
谢谢
(编辑:展开)
以$subject为未绑定变量的查询为例(按约定)
这可以简单地用在规则中
rule blah
when
$item: Datum( "name"; )
find
假设我有一个函数来检查某个对象在Drools中是否无效。
当满足某一组条件时,我根据规则调用此函数。如果函数返回true,那么我将从drools收回消息
我们可以在drools函数或规则中添加日志语句吗
例如
你为什么不试试看会发生什么?书中说,右边的代码是用Java编写的,函数体也是如此。@laune这里真正的问题可能是如何将Log4j这样的记录器添加到Drools工作内存中并有效地执行它?还有一些特定的日志框架更适合Drools吗?@kaskelotti如果是,应该问一下。
rule "Va
我对这条规则很感兴趣
global String ipv4regex;
rule "Initialize global"
salience 1000
when
then
drools.getWorkingMemory().setGlobal( "ipv4regex", "\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4]
我需要帮助检索drools中drl文件的when子句中的查询结果
具有查询的示例规则文件:
query getUsersForCard (Long ipCardNumber)
$listOfUsers : UsersList()
$listOfUserCards : User(cardNumber == ipCardNumber, $cardNum : cardNumber) from $listOfUsers.user_list
end
rule "matchUser"
w
我正在尝试打包多个drl文件,每个文件都有多个扩展同一父规则BaseRule的规则
调用时获取NullPointerException
kbuilder.add(ResourceFactory.newFileResource(file), ResourceType.DRL);
在KnowledgeBuilderImpl-SorturesByDependency()中,下面使用的逻辑似乎不正确。
for(RuleDescr-RuleDescr:packageDescr.getRules()){
标签: Drools
executionrulesevaluation
我知道Drools中的“显著性”提供了规则执行顺序下的控制。但上面是一个例子,当“显著性”不能再帮助我了,我已经面临的问题
在这里,我有三条规则一条接一条地执行:
rule "Rule 1"
salience 30
when
then
Resource resource1 = new Resource();
resource1.setName("Resource 1");
resource1.setAmount("5");
insert(resource1);
drl:
爪哇:
下面是确切的错误消息
public class LectureOfEduClass{
// ...
//omitted others
public Day getDay(){
if(period == null){
return null;
}
return period.getDay();
}
public int getTimeslotIndex() {
有人知道有没有一种方法可以治疗口水循环吗
我正在尝试循环浏览字符串列表,以查看其中一个字符串是否与模式匹配,例如
def listOfStrings = ['a','a.b','a.b.c']
for(String s:listOfStrings){
if(s matches "^a.b.*$"){
return true
}
}
我根据我能找到的文档编写了以下规则,但我认为语法不正确
rule "Matcher"
when
TestClass : TestClas
我们正在试验Drools来处理来自日志文件的大量文本数据。我试图理解如何正确测量事件时间
有问题的事件从一个日志行开始,但可能通过成功完成或异常中止来完成。这就是我在捕捉时遇到的问题。以下是日志条目的外观(当过滤掉其他日志行时):
我正在尝试创建将Jan 24 06:50:29调用与07:19:27终止、Jan 25 06:09:01调用与06:09:24失败等链接起来的规则。我下面的规则不会创建具有我想要的正确开始/结束时间的call()对象
以下是我的代码概要:
rule "Found Ca
我想知道如何修改列表中的对象。我试着跟随,但它给出了一个错误
when
Category( $bookList : books )
UserProfile( profile == UserProfile.STUDENT )
$book : Book( student == true )
$category : Category( books contains $group )
then
modify( $cate
是否可以将when/condition语句重用为DSL文件中的另一个when/condition语句
例如,我有两个条件:
[condition][]The client is invalid = Client( name == null || email == null )
[condition][]All the clients are invalid = forall( Client( name == null || email == null ) )
注意,forall命令的第二个条件
标签: Drools
ruleskiedrools-flow
是否可以将规则导入或导出到KIE工作台?我正在使用KIE workbench处理Drools。在我的文章中,我解释了KIE workbench如何使用Git作为其所有资产(规则、决策表、流程等)的存储库。这个答案还显示了如何获得该存储库的克隆,对其进行一些更改,并将这些更改推回到Kie工作台
如果您计划以.drl格式上载规则,这可能是最简单的方法
希望有帮助
我正在做一个项目,试图评估Drools和Activiti。
我知道有jBPM支持,但我的客户需要Activiti来管理业务流程,我需要使用rule engin来评估一些案例。
那么,是否有可能将流口水和活动结合起来呢。任何指针都会有帮助 正如我在Gitter频道中提到的,这是完全可能的。
我建议你做一个小的PoC(概念验证)来真正理解它的细节。人们通常低估了Drools等规则引擎的复杂性。别误会,我喜欢流口水,但我建议你检查一下医生和他们的一本书;) 查看Tijs Rademaker的书《行动中
我的用例是,当在drools中匹配下面的内容时
Person(name=="A.P.J abdul kalam")
此匹配应适用于以下所有数据
1. A.P.J Abdul Kalam
2. A.P.J. Abdul Kalam
3. APJ Abdul Kalam
这样的事情可以在drools中完成吗?只要您可以将需求表示为正则表达式,就可以使用操作符来完成
规则应类似于此:
rule 'Match APJ Abdul Kalam'
Person(name matches "A
我希望在excel(首选)或drl文件中创建一些drools规则,其中我有一个具有6-10个属性的对象,每个属性都有一个测试条件。我两端都有问题的地方是我需要另一个条件来评估是否触发了某个百分比的规则。例如,一个对象有10个条件,我需要检查其中5个或更多的条件是否为真,然后做什么。这是一件容易做到的事情吗?我的想法是,当计算结果为true时,为每个条件创建一个触发器,并使用另一个规则检查为原始对象创建了多少个触发器,或者是否有更简单的方法来执行此操作
下面是一个例子,如果其中两个或多个条件为真,
我在以前的项目中分别使用了SpringBatch和drools。在我当前的项目中,我有一个设计,需要处理多达500k个xml对象,将它们转换为jaxB,在每个对象上应用规则(规则本身相当简单:比较属性并更新“通知”对象中的两个标志),最后发送一个事件,以便SpringWebFlowViewModel(可以是侦听器)更新自身。这不是设计的要求,但我已经实现了:
1) 项目阅读器(JaxB)
2) ItemProcessor:-映射到ksession(有状态)并基于drl文件触发规则。
3) Ite
我正在寻找一个好的规则引擎
我看到它存在两个好项目:JBPM和Drools
我真的不明白两者之间的区别,也不知道什么是最理想的工具
请您向我提供更多信息和您在其中一个方面的经验,以及您认为管理业务规则的最佳方法。Drools是一个Rete规则引擎,可进行正向和反向导入。您可以在一个小环境中使用它来进行本地决策,这些决策只需要一些规则,或者像保险中的承保决策引擎那样大的东西
jBPM是一个企业单例,它可以帮助您将人和服务之间的交互连接到一个状态机中,以实现定义良好的复杂业务流程。想想GoF中的中介
我的工作记忆中有很多SomeObject,我想写一条规则,检查一个对象是否在这些对象中出现两次。(它不是一个列表,它只是工作记忆中的一些单独对象)
提前感谢您至少可以使用收集作为
when
$n: ArrayList( size > 1 ) from collect( SomeObject() )
then:
// do some action
end
您还可以为要匹配的某些对象设置条件 谢谢你的快速回复,现在我有问题的包含和不包含在口水。。。您是否有SomeObject列表的包
我使用KIE Workbench 6.5.0.Final创建了一个解算器配置,如下所示:
<solver xStreamId="1">
<scanAnnotatedClasses xStreamId="2"/>
<scoreDirectorFactory xStreamId="3">
<scoreDefinitionType>HARD_SOFT</scoreDefinitionType>
<ksession
我有一些困难做流口水运行在伪时钟。
我在流模式下配置我的引擎,并通过realMode属性选择我使用的时钟类型
Date refDate = new Date(System.currentTimeMillis());
boolean realMode = false;
SessionPseudoClock clock = null;
KieServices ks = KieServices.Factory.get();
KieSessionConfigu
我可以在Drools决策表(.xls文件)中使用域特定语言(DSL)吗
我为决策表创建了一个.dsl文件,但每当我尝试在决策表中使用“别名”时,就会出现Drools语法错误
# Simple DSL example file
[keyword]avoid looping=no-loop true
[when]There is a Customer=$c:Customer()
[when]- with age between {low:\d*} and {high:\d*}=age &g
标签: Drools
optaplannerdrools-guvnordrools-planner
当在解决约束时使用drl文件时,可以使用insertLogical(),它只在drools工作内存中插入事实,并且在解决方案完成之前不能收回(对于该insertLogical(),LHS永远保持为真)。当我们从Optaplanner的solver.solve()中获得解决方案时,我们会收到自己的解决方案类选项,如Nurservester、CloudBalance。但我怎样才能找回那些留在流涎工作记忆中的事实,直到我的解决方案保留下来,这样我才能看到是什么导致了解决方案
我要找的东西是:
solv
我使用drools规则已经有一段时间了,最近刚刚开始使用dsl,以使最终用户更容易编写规则。虽然我已经能够像预期的那样定义一个简单的dsl并正确地编译成drl,但我无法让dsl的“向以前的表达式添加约束”功能发挥作用。
我甚至在尝试drools dsl指南中最简单的示例,这不会将我定义的以“-”开头的条件编译到前面的表达式中。在编译规则“Rule1Sample_0”时,我一直收到一个“不匹配的输入”价格错误。
正如我所说的,我对简单的条件表达式和结果表达式进行了研究。但是,在文档之后添加约束根本
“如果需要多个会话,您可以决定创建多个会话
可伸缩性原因的会话“
我不太确定这里的可伸缩性指的是什么。是关于kie会议中插入的事实数量吗?还是关于规则的数量?或者仅仅是通过为每个客户机分配1个kie会话来运行同一个项目,但针对不同的客户机
试图了解在drools项目中何时应使用多个会话
有状态会话要求每个客户端为重复请求单独会话(有状态意味着会话保留数据);无状态会话不存在
试图了解在drools项目中何时应使用多个会话
有状态会话要求每个客户端为重复请求单独会话(有状态意味着会话保留数据);无
1 2 3 4 5 6 ...
下一页 最后一页 共 22 页