2016-04-17 42 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 

使用兩個積累,你可以在一小時內對心率的心率平均一小時相關尖峯計數。

請注意,整個策略存在(微妙的)「模糊性」,因爲第一次峯值之前的平均值幾乎肯定低於第二次或第三次峯值之前的平均值,因爲這包括峯值的比率。理想情況下,從平均計算中可以省略這些。

我認爲避免窗口會更容易:時間和計算時間戳的所有內容,甚至可能會「手動」維持運行平均值。但是通過編寫包括測試用例在內的所有代碼來調查這一點,已經超出了我想要在這裏花費的時間。