我有一个用例,其中我有一系列室温。流有每分钟的温度读数。我想计算每小时的平均温度,如果这一小时的平均温度超过上一小时的平均温度 5 度,则发出警报。
例如:我从下午 1:00 到下午 2:00 有读数...我计算了这一小时的平均温度。可以说A.
我从下午 2:00 到下午 3:00 有读数。我计算了这一小时的平均温度。让我们说它B
。我需要发出警报,如果B-A >=5
我无法为此提供 DRL 文件。谁可以帮我这个事。
我有一个用例,其中我有一系列室温。流有每分钟的温度读数。我想计算每小时的平均温度,如果这一小时的平均温度超过上一小时的平均温度 5 度,则发出警报。
例如:我从下午 1:00 到下午 2:00 有读数...我计算了这一小时的平均温度。可以说A.
我从下午 2:00 到下午 3:00 有读数。我计算了这一小时的平均温度。让我们说它B
。我需要发出警报,如果B-A >=5
我无法为此提供 DRL 文件。谁可以帮我这个事。
这应该以滑动方式工作还是实际上逐小时工作?我假设第一种,但适应第二种情况应该不会太难。该解决方案基于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