2016-04-17 43 views
0

我最近才开始使用Drools,我需要处理心率数据。我需要创建一个drools融合规则,当60或更多的心率数据中有3个或更多的峰值,然后是最近一小时内的平均值时,会发生这种情况。下面的图片是我喜欢在心率上发现的一个例子。Drools对心率的峰值规则

enter image description here

我的心率事件有以下字段:

int heartRate; 
Date timeStamp; 
String macAddress; 

我知道的滑动时间窗口,但你只能使用像最小值,最大值基本功能,AVG,...。有人能解释我如何创建这个规则?该检测穗并插入和更新穗事实上,随着性能

+1

定义“秒杀”。这不是一个超过avg + 60的事件(见第一次秒杀)。高利率运行需要多久才能停止上涨?请注意,如果您计算单个事件,则会在图中00:28处超过三个。 – laune

+0

@laune是的,你是对的。秒杀的定义是:1分钟的时间窗口,其中一个或多个事件超过avg + 60。在此峰值之后,在检测到新的峰值之前,心率需要再次降低至平均水平。 – Tim

回答

1

编写规则:

declare Spike 
    @role(event) 
    int maxHeartRate; ## max/avg rate from events of this spike 
    Date startTS;  ## from first HeartRate to exceed avg+60 
    Date lastTS;  ## from last HeartRate to exceed avg+60 
    String macAddress; 
end 

使用两个积累,你可以在一小时内对心率的心率平均一小时相关尖峰计数。

请注意,整个策略存在(微妙的)“模糊性”,因为第一次峰值之前的平均值几乎肯定低于第二次或第三次峰值之前的平均值,因为这包括峰值的比率。理想情况下,从平均计算中可以省略这些。

我认为避免窗口会更容易:时间和计算时间戳的所有内容,甚至可能会“手动”维持运行平均值。但是通过编写包括测试用例在内的所有代码来调查这一点,已经超出了我想要在这里花费的时间。