[rules-users] Rule problem

Femke De Backere femmyke at gmail.com
Tue May 5 03:40:49 EDT 2009


The strange thing is that I already implemented a flow with over a 30  
components (in subflows) and it works perfectly. And such a simple  
example doesn't work... I don't use doubles anymore, just plain ints.

Femke

Op 5-mei-09 om 03:08 heeft Greg Barton <greg_barton at yahoo.com> het  
volgende geschreven:\

> 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 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: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 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, 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 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
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>
>
> <Sample.drl>
> <DroolsTest.java>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users



More information about the rules-users mailing list