我最近才开始流口水,我需要处理心率数据。我需要在 drools fusion 中创建一个规则,当心率数据中有 3 个或更多峰值超过过去一小时的平均值时,该规则会触发 60 或更多。下图是我喜欢在心率中发现的一个例子。
我的心率事件具有以下字段:
int heartRate;
Date timeStamp;
String macAddress;
我知道滑动时间窗口,但您只能使用基本功能,如 min、max、avg、...。有人可以解释我如何创建这个规则吗?
我最近才开始流口水,我需要处理心率数据。我需要在 drools fusion 中创建一个规则,当心率数据中有 3 个或更多峰值超过过去一小时的平均值时,该规则会触发 60 或更多。下图是我喜欢在心率中发现的一个例子。
我的心率事件具有以下字段:
int heartRate;
Date timeStamp;
String macAddress;
我知道滑动时间窗口,但您只能使用基本功能,如 min、max、avg、...。有人可以解释我如何创建这个规则吗?
编写检测尖峰并插入和更新尖峰事实的规则,具有以下属性:
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
使用两次累积,您可以将一小时内的峰值计数与一小时的心率平均值相关联。
请注意,整个策略有一个(微妙的)“模糊性”,因为第一个峰值之前的平均值几乎肯定低于第二个或第三个峰值之前的平均值,因为这包括峰值的速率。理想情况下,人们会从平均计算中忽略这些。
我认为避免 window:time 并根据时间戳计算所有内容会更容易,甚至可能“手动”保持运行平均值。但是通过编写所有代码(包括测试用例)来调查这一点,我不想在这里花费更多。