[rules-users] CEP + prevent consequences from triggering multiple times?

Paul R. reverselogic at gmail.com
Thu Dec 3 16:10:38 EST 2009


Hi Greg,

Thanks for the response. Unfortunately your example doesn't appear to work,
the SpeedIndicator doesn't get retracted, causing the consequence to only
ever trigger once. However, I could add another rule to remove the
SpeedingIndicator - meaning I no longer have to use the nasty global "state"
object from my example.

Any other suggestions greatly appreciated.

Cheers,

Paul

On Thu, Dec 3, 2009 at 7:14 PM, Greg Barton <greg_barton at yahoo.com> wrote:

> Have you tried truth maintenance? (i.e. insertLogical)
>
> rule "OverSpeedLimit" no-loop true
> when
>     not SpeedingIndicator();
>    $minSpeed : Double(doubleValue > 100) from accumulate(
>         $speedingEvent : SpeedingEvent ($speed : speed)
>            over window:time( 30s )
>            from entry-point SpeedingStream,
>        min($speed)
>    );
> then
>    insertLogical(new SpeedingIndicator());
> end
>
> Though I'm not sure this will work, because inserting the SpeedingIndicator
> negates the first condition, probably causing the SpeedingIndicator to be
> retracted automatically. :)  But it's worth a try just to see if no-loop
> would override that somehow.
>
> Apart from that, note that you can test the results of an accumulate in the
> returned value. (The "Double(doubleValue > 100)" part.)  YOu don't need the
> eval.
>
> Also, where is the "state" object coming from?  If it's a global, it's not
> a good idea to use them in the conditions of your rules.  Changes to them
> are not tracked by the rete.
>
> --- On Thu, 12/3/09, reverselogic <reverselogic at gmail.com> wrote:
>
> > From: reverselogic <reverselogic at gmail.com>
> > Subject: [rules-users] CEP + prevent consequences from triggering
> multiple times?
> > To: rules-users at lists.jboss.org
> > Date: Thursday, December 3, 2009, 12:41 PM
> >
> > Hi,
> >
> > I'm trying to write a rule in drools, which triggers once
> > some condition is
> > active for a specified time interval. For example, if a
> > vehicle is over a
> > speed limit (100 mph) for 30 seconds, I want to trigger an
> > action. However,
> > once this rule has fired, I don't want it to fire again
> > until the vehicle
> > has dropped below the speed limit (and gone over the limit
> > again). The only
> > way I've managed to model this is by defining two rules;
> > one for determining
> > when the vehicle is speeding and one for determining when
> > it is not speeding
> > and using a global object to track the state of the vehicle
> > (see rules
> > below).
> >
> > rule "OverSpeedLimit" no-loop true
> > when
> >     $minSpeed : Double() from accumulate(
> >         $speedingEvent :
> > SpeedingEvent ($speed : speed)
> >
> > over window:time( 30s )
> >
> > from entry-point SpeedingStream,
> >         min($speed)
> >     );
> >
> >     eval ($minSpeed > 100.0 &&
> > !state.speeding)
> > then
> >     state.speeding = true
> > end
> >
> > rule "!OverSpeedLimit" no-loop true
> > when
> >     $speedingEvent : SpeedingEvent()
> >         from entry-point
> > SpeedingStream
> >     eval ($speedingEvent.speed <= 100.0)
> > then
> >     state.speeding = false
> > end
> >
> > My questions is: Is there a better way to model the above
> > behaviour,
> > preferably as a single rule? The reason I ask is because I
> > believe it would
> > be too complicated for my users to define rules like this.
> > Ideally, I would
> > like to be able to create a DSL such as: "when Speed is
> > above X for Y
> > seconds then ..."
> >
> > Any help greatly appreciated.
> >
> > Thanks,
> >
> > Paul
> >
> >
> >
> >
> > --
> > View this message in context:
> http://n3.nabble.com/CEP-prevent-consequences-from-triggering-multiple-times-tp67424p67424.html
> > Sent from the Drools - User mailing list archive at
> > Nabble.com.
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091203/fe6a4a75/attachment.html 


More information about the rules-users mailing list