[rules-users] Specific Agenda strategy to control which rulesto fire

Wolfgang Laun wolfgang.laun at gmail.com
Thu Oct 29 06:55:35 EDT 2009


Yes, probably the constructor should set level's initial value, unless it is
OK to have it as a constant, initializing the field directly.

Thanks for pointing is out.
-W

2009/10/29 Anstis, Michael (M.) <manstis1 at ford.com>

>  Hi Wolfgang,
>
> I'm interested with your reply and am trying to better understand it
> (although the use-case has nothing to do with what I do!)
>
> The Score class has a constructor taking Deal and level (assume to be akin
> to "priority" in the original post); however your example Fact insertions
> exclude level for the Score Fact.
>
> I assume Score's level should be initially set to the highest (most
> granular) level; e.g. 2 in the example cited (ranging from 0-2)?
>
> It's good to see and understand other's approaches.
>
> Cheers,
>
> Mike
>
>  ------------------------------
> *From:* rules-users-bounces at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] *On Behalf Of *Wolfgang Laun
> *Sent:* 29 October 2009 07:09
> *To:* Rules Users List
> *Subject:* Re: [rules-users] Specific Agenda strategy to control which
> rulesto fire
>
> I don't think you should consider an agenda strategy for this.
>
> Add a simple class:
>    class Score{
>      int level; int coun; Deal deal; Book book;
>      Score( Deal deal, int level ){...}
>   }
>
> and insert an instance along with the Deal to be classified:
>
> insert( deal );
> insert( new Score( deal ) );
>
> Rules for level 2 would be written according to:
>
> rule "trader and product"
> salience 10
> when
>    $s : Score( level == 2, $d : deal )
>     Deal( this == $d, trader=="Alex", product == "GOOG" )
> then
>    $s.setCount( $s.getCount() + 1 );
>    $s.setBook( "B2" );
> end
>
> Then you'll need a couple of rules handling success and failure:
>
> rule "post level success"
> salience 5
> when
>    $s : Score( $l : level, count == 1, $d : deal, $b : book )
> then
>    assign $d to $b, retract $d
>    retract( $s );
> end
>
> rule "post level failure"
> salience 5
> when
>    $s : Score( $l : level, count != 1 )
> then
>    modify( $s ){
>        setLevel( $l - 1 );
>    }
> end
>
> Rules for level 1 would also be at salience 10.
>
> A rule for level == 0 should catch Deals "gone down" through all levels.
>
> -W
>
>
>
> 2009/10/28 Costigliola Joel (EXT) <joel.costigliola-ext at natixis.com>
>
>>   Hello all,
>>
>>
>>
>> I need some help to to set a specific Agenda strategy in order to control
>> finely which activated rules will be fired.
>>
>>
>>
>> Problem context :
>>
>> -----------------
>>
>> My company is a bank where traders are making deals on markets, these
>> deals must be classified in book, this is what we call “booking process”.
>>
>> Booking is done according to booking criteria : which trader has made the
>> deal ? on which product ? wich market ? etc …
>>
>> A booking rule defines a set of criteria and the target book where the
>> deal will classified, it also has a priority, note that it is ok that two
>> booking rule have same priority.
>>
>> I want to implement booking rule as Drools rule.
>>
>> Several booking rule can be applied to a deal, in that case choosing the
>> right booking rule to fire depends on the following algorithm :
>>
>> - look all the activated booking rule of the highest priority,
>>
>> --- if there is a unique rule apply it
>>
>> --- if there is no unique rule (0 rule or more than one), look at rules of
>> a lesser priority and apply the same logic.
>>
>>
>>
>> Next section is an example that will clear things (I hope).
>>
>>
>>
>> Example :
>>
>> ---------
>>
>> A deal D1 has been done by Alex on NY market to buy Google stocks.
>>
>> We have 3 booking rules :
>>
>> - BR1 : criteria = trader=Alex / book = B1
>>
>> - BR2 : criteria = trader=Alex and product = google stock / book = B2
>>
>> As BR2 is more precise than BR1, il will matches the deal and book it in
>> B1
>>
>> If the deal was on another product, BR1 would have been applied.
>>
>>
>>
>> Things gets more complicated when 2 rules of same priority can be applied.
>>
>>
>> Let's imagine we add the following booking rule
>>
>> - BR3 : criteria = trader=Alex and market = NY / book = B3
>>
>> We have a problem to book D1 since BR2 and BR3 can be applied but have
>> same priority.
>>
>> We can't choose one over the other thus we must apply a less
>> precise/prioritary rule (if unique at its own precision level).
>>
>> In my example, that would lead to apply BR1.
>>
>>
>>
>> Question :
>>
>> ----------
>>
>> If I define BR1,BR2,BR3 as Drools rules, how can I tell Drools :
>>
>> - to execute a rule only if there is no other active rule with same
>> precision that could be applied ?
>>
>> - to look for a unique matching rule with less precision level ?
>>
>>
>>
>> I think it's the Agenda responsibility to take this decision, but I don't
>> know how implement that.
>>
>> Can you give some advices on that ?
>>
>>
>>
>> Thanks for your lights in advance,
>>
>> Regards,
>>
>>
>>
>> Joel
>>
>>
>>
>>
>>  ------------------------------
>>
>> Ce courriel et toutes les pièces jointes sont confidentiels et peuvent
>> être couverts par un privilège ou une protection légale. Il est établi à
>> l’attention exclusive de ses destinataires. Toute utilisation de ce courriel
>> non conforme à sa destination, toute diffusion ou toute publication, totale
>> ou partielle, est interdite, sauf autorisation expresse préalable. Toutes
>> opinions exprimées dans ce courriel ne sauraient nécessairement refléter
>> celle de Natixis, de ses filiales. Elles sont aussi susceptibles de
>> modification sans notification préalable. Si vous recevez ce courriel par
>> erreur, merci de le détruire et d’en avertir immédiatement l’expéditeur.
>> L’Internet ne permettant pas d’assurer l’intégrité de ce courriel, Natixis
>> décline toute responsabilité s’il a été altéré, déformé ou falsifié et
>> chaque destinataire qui utilise ce mode de communication est supposé en
>> accepter les risques.
>>
>> This email and any attachment are confidential and may be legally
>> privileged or otherwise protected from disclosure. It is intended only for
>> the stated addressee(s) and access to it by any other person(s) is
>> unauthorised. Any use, dissemination or disclosure not in accordance with
>> its purpose, either in whole or in part, is prohibited without our prior
>> formal approval. Any opinion expressed in this email may not necessarily
>> reflect the opinion of Natixis, its affiliates. It may also be subject to
>> change without prior notice. If you are not an addressee, you must not
>> disclose, copy, circulate or in any other way use or rely on the information
>> contained in this email. If you have received it in error, please inform us
>> immediately and delete all copies. The Internet can not guarantee the
>> integrity of this email therefore Natixis shall not be liable for the email
>> if altered, changed or falsified and anyone who communicates with us by
>> e-mail is taken to accept these risks.
>>
>> ------------------------------
>>
>>
>> _______________________________________________
>> 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/20091029/d467e08e/attachment.html 


More information about the rules-users mailing list