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

Второе правило может срабатывать повторно, поскольку объекты Среднего значения вставляются, если что-то не сделано. Я использовал значимость, но есть и другие подходы.

 Смежные вопросы

  • Нет связанных вопросов^_^