0

我有一个用例,其中我有一系列室温。流有每分钟的温度读数。我想计算每小时的平均温度,如果这一小时的平均温度超过上一小时的平均温度 5 度,则发出警报。

例如:我从下午 1:00 到下午 2:00 有读数...我计算了这一小时的平均温度。可以说A. 我从下午 2:00 到下午 3:00 有读数。我计算了这一小时的平均温度。让我们说它B。我需要发出警报,如果B-A >=5

我无法为此提供 DRL 文件。谁可以帮我这个事。

4

1 回答 1

1

这应该以滑动方式工作还是实际上逐小时工作?我假设第一种,但适应第二种情况应该不会太难。该解决方案基于Average 类的两个辅助对象,一个是OldAverage 子类,另一个是NewAverage 子类,要预先插入。前两个规则是针对前两个小时的积累。

rule "during first hour"
when
    $avg: OldAverage( size < 60 )
    $r: Reading()
then
    modify( $avg ){ addReading( $r ) }  // add $r to List<Reading>
    retract ( $r );
end

rule "during second hour"
when
    $old: OldAverage( size == 60 )
    $new: NewAverage( size < 60 )
    $r: Reading()
then
    modify( $new ){ addReading( $r ) }
    retract ( $r );
end

从现在开始,从 NewAverage 对象推出的 Reading 必须添加到 OldAverage 对象中。

rule "after two hours"
when
    $old: OldAverage( size == 60 )
    $new: NewAverage( size == 60 )
    $r: Reading()
then
    Reading r = $new.addReading( $r );  // addReading returns List.remove(0)
    modify( $old ){ addReading( r ) }
    update( $new );
    retract ( $r );
end

这是要检查的规则:

rule "check for increase"
when
    $old: OldAverage( size == 60, $oldAvg: average )
    $new: NewAverage( size == 60, average > $oldAvg + 5 )
then
    System.out.println( "average temperature increased by more than 5 degrees" );
end
于 2014-01-03T11:24:11.400 回答