我有一个用例,我有一股室温流。该流每分钟都读取温度。我想计算每小时的平均温度,如果这小时的平均温度超过最后一小时的平均温度5度,就会发出警报。
例如:
我的读数从下午1点到下午2点......我计算了这小时的平均温度。让我们说A.
我的读数是从下午2点到下午3点。我计算了这个小时的平均温度。让我们说B
。
如果B-A >=5
我无法为此提出DRL文件。谁可以帮我这个事。
答案 0 :(得分: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