当前位置: 首页 > 知识库问答 >
问题:

Drools融合规则语言:计步器规则

薄龙光
2023-03-14

我是一个流口水的新手(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个步骤。问题是我如何改变我的规则,这样它仍然有效?


共有1个答案

郎和通
2023-03-14

对于计步器,您需要另一个不同于步骤的类,即事件类。更新计步器的规则很简单。

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分钟内没有采取任何措施的情况下启动规则。现在,当两个步骤事件的步骤数相同时,它将激发。我知道我可能必须使用计时器。但是我不知道如何写这个规则。谁能帮帮我吗?

  • 我最近开始研究口水。我只是设计了一个简单的应用程序来更好地理解它。 谢谢。