2016-10-24 31 views
0

这种计算每个传感器的平均温度:Drools的嵌套厚积薄发

rule "Average" 
when 
    $s : Sensor() 
    accumulate(Reading(sensor == $s, $temp : temperature); 
       $avg : average($temp) 
      ) 
then 
    // print average of EACH sensor 
end 

我当时想什么传感器具有最大“平均温度”,我想这样的事情,但它显然是不正确的:

rule "MaxAvg" 

when 
    accumulate ($s : Sensor() 
       accumulate(Reading(sensor == $s, $temp : temperature); 
          $avg : average($temp) 
         ); 
       &max : max($avg) 
      ) 
then 
    // print sensor with max "average temperature" 
end 

请大家帮忙。

回答

0

我认为如果您根据每个传感器的平均值创建事实数据并使用第二个规则确定最大值,那么您的状况会更好。

rule "Average" 
when 
    $s : Sensor() 
    accumulate(Reading(sensor == $s, $temp : temperature); 
       $avg : average($temp)) 
then 
    // print average of EACH sensor 
    insert(new Average($s, $ave)); 
end 

rule "maxAverage" 
    salience -100 
when 
    Average($s: sensor, $a: average) 
    not Average(average > $a) 
then 
    // sensor $s has max. average $a 
end 

第二条规则可能会重复触发,因为除非做了某些事情,否则插入平均对象。我已经使用了显着性,但还有其他方法。