2016-04-17 17 views
0

私は最近、droolsで始まったばかりで、心拍データを処理する必要があります。私は、1時間以上平均して60以上の心拍数データに3つ以上のスパイクがあるときに発火する脱臼融合のルールを作成する必要があります。以下の画像は、私が心拍数で発見したいものの例です。心拍数のスパイクのドロールルール

enter image description here

私の心拍数のイベントは次のフィールドがあります

int heartRate; 
Date timeStamp; 
String macAddress; 

、AVG、私がスライドする時間窓を知っていますが、唯一の最小値、最大値などの基本的な機能を使用することができます...。誰かがこのルールをどのように作成することができるか私に説明できますか?スパイクを検出し、プロパティで、スパイクの事実を挿入し、更新

+1

「スパイク」を定義します。それはavg + 60を超える単一イベントではありません(最初のスパイク参照)。どのように高値の実行スパイクを中止する必要がありますか? 1つのイベントをカウントすると、ダイアグラムの00:28に3つが超過することに注意してください。 – laune

+0

@launeはいそうです。スパイクの定義は、1分以上のイベントが平均+60を超える1分の時間ウィンドウです。このスパイクの後、新たなスパイクが検出される前に、心拍数を平均値まで再び減少させる必要がある。 – 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 

2を使用して、あなたが一時間の心拍数の心拍数の平均を1時間以内にスパイクの数を関連付けることができます蓄積。

最初のスパイク前の平均値は2番目または3番目のスパイク前の平均値よりも明らかに低いため、戦略全体に(微妙な)「あいまいさ」があることに注意してください。理想的には、平均計算からこれらを省略します。

私は、ウィンドウを回避する方が簡単だと思います。タイムスタンプからすべてを計算し、実行中の平均を「手動で」維持することさえ可能です。しかし、テストケースを含め、すべてのコードを記述してこれを調べることは、ここで費やしたいこと以上のものです。

関連する問題