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: [email protected] 
[mailto:[email protected]] 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) <[email protected]>
        

                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
                [email protected]
                https://lists.jboss.org/mailman/listinfo/rules-users
                
                


_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to