Drools Nested Accumulate

时间:2016-10-24 14:51:21

标签: 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

请帮忙。

1 个答案:

答案 0 :(得分: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

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