[rules-users] Rule problem

Wolfgang Laun wolfgang.laun at gmail.com
Tue May 5 02:00:40 EDT 2009


One thing you ought to observe is a strict textual identity of all literals.
So, the limit "thirty-point-zero" shouldn't be written as "30.0" in one
place and "30" in another if a seamless or non-overlapping set of intervals
[x,30[ and [30,y] is desired.

(There ought to s.th. like "const" or "final static" in DRL so you could
create named constants. As it is, one might import them from a Java class.)

Also, avoid conversions from int to double at different times, i.e., compile
time vs. runtime, or similar.

All of this isn't a peculiarity of Drools - it's the general "blessing" that
comes with floating point.

BTW, I recall vaguely that your Java code creates another session for each
insert of a BMIClass fact in the 10000 loop. As you are comparing execution
speeds, it isn't fair to include this start-up call in the evaluation of
rule firing.

-W


2009/5/4 Femke De Backere <femmyke at gmail.com>

> I solved the problem by removing every double in the sample.drl. How van I
> fix the double problem if I really wanted to :)? In this case it is
> unnecassary but there must be a solution?
> Thanks for all the help!
>
> Femke
>
> Op 4-mei-09, om 21:48 heeft Wolfgang Laun het volgende geschreven:
>
> Don't use doubles. Try the same thing, scaling the random weights with 10
> (or 100) convert to int, and use suitably scaled integer limits for your
> weight classes.
>
> I'm not at all sure, what various JVM versions and/or Rand generators could
> produce.
>
> The javadoc for java.lang.Math is an indicator that things might not be as
> simple as they ought to be.
>
> I could reproduce the problem this afternoon, but now I can't any more, on
> the same machine, same JVM and same Drools version.
>
> -W
>
>
> 2009/5/4 Femke De Backere <femmyke at gmail.com>
>
>> So, I did as you suggested, with the following as result:BMI of 10 U
>> heeft ondergewicht: 10
>> BMI of 30 U heeft ondergewicht: 30
>> BMI of 30 U heeft obesitas: 30
>> BMI of 20 U heeft ondergewicht: 20
>>
>> So, I really don't get it, I used exactly the same code as you.
>>
>> Femke
>>
>> Op 4-mei-09, om 17:11 heeft Greg Barton het volgende geschreven:
>>
>>
>> Well, approach this systematically, then: Create a new Drools project in
>> Eclipse and replace the DroolsTest.java and Sample.drl with the ones I sent
>> before.  What results do you get?  If they are correct, modify the project
>> one step at a time until the problem is uncovered.
>>
>> One place to focus on: you're using rule flows.  I have no idea how that
>> could cause a false positive result like you've seen, but you never know.
>>
>> Finally, if you're comparing performance of rules vs plain java, plain
>> java will easily win in this case.  The rule of thumb is this: if you can
>> easily write a plain non-rules algorithm it will outperform the rules
>> solution.
>>
>> --- On Mon, 5/4/09, Femke De Backere <femmyke at gmail.com> wrote:
>>
>> From: Femke De Backere <femmyke at gmail.com>
>>
>> Subject: Re: [rules-users] Rule problem
>>
>> To: "Rules Users List" <rules-users at lists.jboss.org>
>>
>> Date: Monday, May 4, 2009, 6:53 AM
>>
>> I'm using this:
>>
>> package bmi
>>
>>
>> import bmi.DroolsTest.BMIClass;
>>
>>
>> rule "Overgewicht"
>>
>>  ruleflow-group "BMIrules"
>>
>> when
>>
>>  bmiClass : BMIClass($bmi: bmi >= 25, bmi < 30)
>>
>> then
>>
>>  System.out.println("U heeft overgewicht: " +
>>
>> $bmi);
>>
>> end
>>
>>
>> rule "Obesitas"
>>
>>  ruleflow-group "BMIrules"
>>
>> when
>>
>>  bmiClass : BMIClass($bmi : bmi >= 30)
>>
>> then
>>
>>  System.out.println("U heeft obesitas: " +
>>
>> $bmi);
>>
>> end
>>
>>
>>
>> rule "Ondergewicht"
>>
>> ruleflow-group "BMIrules"
>>
>> when
>>
>>  bmiClass : BMIClass($bmi : bmi < 18.5)
>>
>> then
>>
>>  System.out.println("U heeft ondergewicht: " +
>>
>> $bmi);
>>
>> end
>>
>>
>>
>> rule "Normaal"
>>
>> ruleflow-group "BMIrules"
>>
>> when
>>
>>  bmiClass : BMIClass($bmi : bmi >= 18.5, bmi < 25)
>>
>> then
>>
>>  System.out.println("U heeft een normaal gewicht:
>>
>> " + $bmi);
>>
>> end
>>
>>
>> But in essence it is the same as Greg's. I get outputs
>>
>> as:
>>
>>
>> U heeft ondergewicht: 25.0
>>
>> U heeft overgewicht: 25.0
>>
>>
>> But I really don't see the problem.
>>
>>
>> Femke
>>
>>
>> Op 4-mei-09, om 13:25 heeft Wolfgang Laun het volgende
>>
>> geschreven:
>>
>>
>> I cannot reproduce your findings.
>>
>> Which bmi values cause the firing of two rules?
>>
>> Are you using exactly the same .drl file Greg sent?
>>
>> -W
>>
>>
>> 2009/5/4 Femke De Backere <femmyke at gmail.com>
>>
>> Thanks for the answer! But I sometimes get 2 rules
>>
>> that are correct,
>>
>> and that is impossible. I embedded Greg's
>>
>> DroolsTest class in my
>>
>> class (I am doing some test on performance and
>>
>> studying the
>>
>> difference between performance with a plain java
>>
>> class), and it
>>
>> still doesn't work, and I really don't see
>>
>> why. Anyone any
>>
>> suggestions, in attachement, my class.
>>
>>
>> Thx,
>>
>>
>> Femke
>>
>>
>>
>>
>>
>> Op 4-mei-09, om 02:47 heeft Greg Barton het volgende
>>
>> geschreven:
>>
>>
>> Try the attached code.
>>
>>
>> --- On Sun, 5/3/09, Femke De Backere
>>
>> <femmyke at gmail.com> wrote:
>>
>>
>> From: Femke De Backere <femmyke at gmail.com>
>>
>> Subject: Re: [rules-users] Rule problem
>>
>> To: "Rules Users List"
>>
>> <rules-users at lists.jboss.org>
>>
>> Date: Sunday, May 3, 2009, 6:18 PM
>>
>> Thx for the answer. I tried this but I doesn't
>>
>> seem to
>>
>> work. For a BMI of 20, i get the result
>>
>> "ondergewicht", and it should be
>>
>> "normal".
>>
>>
>> Op 4-mei-09, om 01:04 heeft Ingomar Otter het volgende
>>
>> geschreven:
>>
>>
>> Femke,
>>
>> The "Overgewicht| rule matches for _two_ BMIClass
>>
>> facts, one with bmi >- 25 and one for BMIClass
>>
>> <30.
>>
>> If you want to apply multiple  constraints to a single
>>
>> fact you have to list them as such:
>>
>>
>> rule "Overgewicht"
>>
>>        when
>>
>>               bmiClass : BMIClass(bmi >= 25
>>
>> && bmi
>>
>> <30)
>>
>>       then
>>
>>               System.out.println("U heeft
>>
>> overgewicht");
>>
>> end
>>
>>
>>
>> Cheers,
>>
>> Ingomar
>>
>>
>>
>> Am 04.05.2009 um 00:48 schrieb Femke De Backere:
>>
>>
>> Hi!
>>
>>
>> I want to make en BMI rule application, so I need
>>
>> to test the BMI values. But in rule
>>
>> "Overgewicht"
>>
>> and "Normaal", I need to use an AND, but it
>>
>> doesn't seem to work in any way I tried.
>>
>>
>> Does anybody see the problem? The rest of the
>>
>> application is based on de sample project (created
>>
>> when
>>
>> making a new Drools project).
>>
>>
>> Thx,
>>
>>
>> Femke
>>
>>
>> package bmi
>>
>>
>> import bmi.DroolsTest.BMIClass;
>>
>>
>> rule "Overgewicht"
>>
>>        when
>>
>>               bmiClass : BMIClass(bmi >= 25)
>>
>>               bmiClass : BMIClass(bmi < 30)
>>
>>       then
>>
>>               System.out.println("U heeft
>>
>> overgewicht");
>>
>> end
>>
>>
>> rule "Obesitas"
>>
>>       when
>>
>>                bmiClass : BMIClass($bmi : bmi >=
>>
>> 30)
>>
>>       then
>>
>>               System.out.println("U heeft
>>
>> obesitas");
>>
>> end
>>
>>
>> rule "Ondergewicht"
>>
>>       when
>>
>>               bmiClass : BMIClass($bmi : bmi <
>>
>> 18.5)
>>
>>       then
>>
>>               System.out.println("U heeft
>>
>> ondergewicht");
>>
>> end
>>
>>
>> rule "Normaal"
>>
>>       when
>>
>>                bmiClass : BMIClass(bmi >= 18.5)
>>
>>               bmiClass : BMIClass(bmi < 25)
>>
>>       then
>>
>>               System.out.println("U heeft een
>>
>> normaal
>>
>> gewicht");
>>
>>
>> end
>>
>> _______________________________________________
>>
>> 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
>>
>>
>> _______________________________________________
>>
>> rules-users mailing list
>>
>> rules-users at lists.jboss.org
>>
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>
>> <
>>
>> DroolsTest
>>
>>
>> .java><Sample.drl>_______________________________________________
>>
>> 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
>>
>>
>>
>> _______________________________________________
>>
>> 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
>>
>>
>>
>>
>> _______________________________________________
>> 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
>>
>>
> _______________________________________________
> 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/20090505/1194d30f/attachment.html 


More information about the rules-users mailing list