Not really. :) I don't work with ruleflows.
Attached is an implementation using BigDecimal. It should avoid any floating point
problems. Make sure and use BigDecimal with the pure java version if you want a true
measure of relative performance.
--- On Mon, 5/4/09, Femke De Backere <femmyke(a)gmail.com> wrote:
From: Femke De Backere <femmyke(a)gmail.com>
Subject: Re: [rules-users] Rule problem
To: "Rules Users List" <rules-users(a)lists.jboss.org>
Date: Monday, May 4, 2009, 6:00 PM
I have another little problem. I try to do the same with a
ruleflow
(and BMI rules in ruleflow group) and my ruleflow starts
running and
the rules are triggered, but I get no
system.out.println(...) and mijn
flow doesn't continue to the next node.
Any suggestions?
Femke
Op 4-mei-09, om 23:30 heeft Greg Barton het volgende
geschreven:
>
> I wonder if there's some way to introduce strictfp
into the drl.
> (I'm not even sure if that would even solve the
problem. But I
> figure it'd get you in the ballpark.) But I think
it would be
> useful to be able to inject strictfp into the
declarations of any
> generated drools classes.
>
> --- On Mon, 5/4/09, Femke De Backere
<femmyke(a)gmail.com> wrote:
>
>> From: Femke De Backere <femmyke(a)gmail.com>
>> Subject: Re: [rules-users] Rule problem
>> To: "Rules Users List"
<rules-users(a)lists.jboss.org>
>> Date: Monday, May 4, 2009, 4:11 PM
>> 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(a)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(a)gmail.com> wrote:
>>>>
>>>>> From: Femke De Backere
>> <femmyke(a)gmail.com>
>>>>> Subject: Re: [rules-users] Rule
problem
>>>>> To: "Rules Users List"
>> <rules-users(a)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(a)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(a)gmail.com> wrote:
>>>>>>
>>>>>> From: Femke De Backere
>> <femmyke(a)gmail.com>
>>>>>> Subject: Re: [rules-users] Rule
problem
>>>>>> To: "Rules Users List"
>>>>> <rules-users(a)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(a)lists.jboss.org
>>>>>>
>>>>>>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>> _______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users(a)lists.jboss.org
>>>>>>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>> _______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users(a)lists.jboss.org
>>>>>>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>> <
>>>>>> DroolsTest
>>>>>>
>>>>>
>>
.java><Sample.drl>_______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users(a)lists.jboss.org
>>>>>>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>>
>> _______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users(a)lists.jboss.org
>>>>>>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>>
>> _______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users(a)lists.jboss.org
>>>>>>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>>
>> _______________________________________________
>>>>> rules-users mailing list
>>>>> rules-users(a)lists.jboss.org
>>>>>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>>
>>>>
_______________________________________________
>>>> rules-users mailing list
>>>> rules-users(a)lists.jboss.org
>>>>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>
_______________________________________________
>>> rules-users mailing list
>>> rules-users(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>
_______________________________________________
>>> rules-users mailing list
>>> rules-users(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users