我是一个流口水的新手(6.3版),我很难想出一个具体的规则。我有一个名为Steps的类,只有一个简单的字段双步骤
。每个步骤事件表示自上一个事件以来所采取的步骤,我有一条工作规则,规定当您在最后一个小时内没有完成50个步骤时,您需要开始行动:
declare Steps
@role(event)
end
rule "STEPS RULE"
when
$totalSteps : Number( doubleValue < 50 ) from accumulate(
Steps( stepsCount : steps ) over window:time( 1h ) from entry-point
"entrySteps", sum( stepsCount ) )
then
System.out.println("STEPS RULE: get moving!");
end
现在,每个事件都是自上一个事件以来采取的步骤,我希望它们代表累积步骤。所以如果一个事件有50个步骤,而你采取了20个步骤,那么我希望下一个事件有70个步骤。问题是我如何改变我的规则,这样它仍然有效?
对于计步器,您需要另一个不同于步骤的类,即事件类。更新计步器的规则很简单。
rule "create pedometer"
when
Steps( $s: steps )
not Pedometer()
then
insert( new Pedometer( $s ) );
end
rule "update pedometer"
no-loop
when
Steps( $s: steps )
$p: Pedometer( $r: readout )
then
modify( $p ){
setReadout( $r + $s )
}
end
编辑如果步骤已经包含累积值,它会稍微复杂一点,因为您需要计算窗口中第一个和最后一个计步器读数之间的差异。
rule "ACC STEPS RULE"
when
accumulate( Steps( $s : steps )
over window:time( 1h ) from entry-point "entrySteps";
$fst: min( $s ), $lst: max( $s );
$lst - $fst < 50 )
then
System.out.println("STEPS RULE: get moving!");
end
应至少每小时有一次读数或另一条规则检测到这种情况。
我正在使用drools fusion,我想根据实现的规则数测试这个cep系统的性能。现在,我有了一个简单的规则文件。drl扩展。我想动态生成大约1000条规则。那么,如何在不让他们在中创建一对一的情况下自动完成此操作呢。drl文件?
我是Drools Fusion的新手,我想知道为什么我的规则不总是被取消。我用的是Drools 6.3。以下是我要插入的事件: 这是我的规则文件: 这是我的输出: 我预计我的规则将触发2次,并给出以下输出: 我可能忽略了一些事情,但我没有找到关于我的问题的太多信息。有人能解释一下这里到底发生了什么吗?非常感谢。
我正在制作一个应用程序,其中通过每5秒一次的间隔HTTP请求收集来自虚拟机的与CPU使用、内存使用、磁盘使用等相关的数据。收集的数据如下所示: 我在Drools Fusion上创建了一些规则,试图看到以下内容:例如,当CPU使用率在过去10秒内达到10%以上时,然后在屏幕上打印一些东西,但我的问题是,即使我在规则中输入了命令,即使尚未通过,规则仍然被触发。这是CPU使用率的规则: 是从HTTP响应
我想在Esper中编写一条规则,当过去15分钟内的步数为0且心率高于120时触发。我想出了以下规则: 我的心率类别有以下字段: 我的Steps类有以下字段: 我面临的问题是,我只想在过去15分钟内没有采取任何措施的情况下启动规则。现在,当两个步骤事件的步骤数相同时,它将激发。我知道我可能必须使用计时器。但是我不知道如何写这个规则。谁能帮帮我吗?
我最近开始研究口水。我只是设计了一个简单的应用程序来更好地理解它。 谢谢。
Thx回答。