[rules-users] Better way to find rule with max value

Enda J Diggins ejdiggins at gmail.com
Fri Mar 12 05:06:30 EST 2010


Hi Guarav,

I might not be understanding your problem, but think you might be making the
problem more complicated than it needs to be. Could you try something like
the following:

$ruleToChoose : RoutingRule (listPriceFrom <= $tssListPrice, listPriceTo >
$tssListPrice
                                && discountPriceFrom <= $tssDisc,
discountPriceTo >  $tssDisc,
                                nonStdTerm =="TSS", $nodeOfRule :
nodeOfRule) from $tssRoutingRuleList

not RoutingRule (listPriceFrom <= $tssListPrice, listPriceTo > $tssListPrice
                                , discountPriceFrom <= $tssDisc,
discountPriceTo >  $tssDisc,
                                nonStdTerm =="TSS", nodeOfRule >
$nodeOfRule) from $tssRoutingRuleList

Note that this logic states:
 Assign to $ruleToChoose a RoutingRule that satisfies our conditions when
there is no other RoutingRule that also satisfies our conditions but has a
higher nodeOfRule value.

Also note that I removed you "&&" operators and replaced them with ","
(comma).

Let me know if I have misunderstood your problem.

Hope it helps!

Enda

On Thu, Mar 11, 2010 at 5:47 PM, Gaurav <gaurav.goyal123 at gmail.com> wrote:

>
> Hi All,
>
> I have aother question on drools.
> There can le level1 to level6 present in a rule and we need to pick always
> the highest level rule which satisfied list price and discount comdition.
>
> Following code is giving me expected results but do we have any better way
> to implement the same. Can I avoid last 2 iternations and combine it to
> first one iteration.
>
> RoutingRule.java
> ----------------
>        private String level1 = "";
>        private String level2 = "";
>        private String level3 = "";
>        private String level4 = "";
>        private String level5 = "";
>        private String level6 = "";
>        private String serviceSalesPath = "";
>        private String productSalesPath = "";
>        private String nonStdTerm = "";
>        private String currency = "";
>        private double listPriceFrom = Double.MAX_VALUE ;
>        private double listPriceTo = Double.MAX_VALUE ;
>        private double discountPriceFrom = 100;
>        private double discountPriceTo = 100 ;
>        private double nodeOfRule =0;
>
> Rule
> -----
>
> $selectedTSSRulesWithOutHier : ArrayList()
>                from collect ($routingRule : RoutingRule(currency == $curr
>                && (
>                        listPriceFrom <= $tssListPrice && listPriceTo >
> $tssListPrice
>                        && discountPriceFrom <= $tssDisc && discountPriceTo
> >  $tssDisc &&
> nonStdTerm =="TSS" )
>                )
>                from $tssRoutingRuleList)
>
>                $lowestNodeTSS : Double(intValue > 0)
>                from accumulate ( RoutingRule($nodeOfRule : nodeOfRule)
>                from $selectedTSSRulesWithOutHier, max($nodeOfRule))
>
>                $lowestNodeTSSRule : ArrayList()
>                from collect( $ruleObj : RoutingRule( eval(nodeOfRule ==
> $lowestNodeTSS) )
>                from $selectedTSSRulesWithOutHier )
>
> Many thanks in advance,
> Gaurav
> --
> View this message in context:
> http://n3.nabble.com/Better-way-to-find-rule-with-max-value-tp442484p442484.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
>



-- 
Enda J Diggins
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100312/a304f9a9/attachment.html 


More information about the rules-users mailing list