2016-10-24 32 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 

第二條規則可能會重複觸發,因爲除非做了某些事情,否則插入平均對象。我已經使用了顯着性,但還有其他方法。