[rules-users] Rule problem

Femke De Backere femmyke at gmail.com
Tue May 5 16:32:04 EDT 2009


I tried copying a project with a working ruleflow group and it still  
doesn't work :s. In the audit view I get the following:

So I think my rule is triggered. But I don't get the  
system.out.println. The flow contains an action, followed by a  
ruleflowgroup and another action. I get the following result in the  
console:
1241555272170340000

(which is the result of the first action)

I removed all doubles, so the problem can't be that.
#created on: 1-feb-2009
package masterproef.rules

import masterproef.rulerunner.BMIClass;

rule "Overgewicht"
	ruleflow-group "Check Temperature"
	when
		bmiClass : BMIClass(bmi >= 25, bmi < 30)
	then
		System.out.println(bmiClass + "\t U heeft overgewicht");
end

rule "Obesitas"
	ruleflow-group "Check Temperature"
	when
		bmiClass : BMIClass($bmi : bmi >= 30)
	then
		System.out.println(bmiClass + "\t U heeft obesitas");
end

rule "Ondergewicht"
	ruleflow-group "Check Temperature"
	when
		bmiClass : BMIClass($bmi : bmi < 18)
	then
		System.out.println(bmiClass + "\t U heeft ondergewicht");
end

rule "Normaal"
	ruleflow-group "Check Temperature"
	when
		bmiClass : BMIClass(bmi >= 18, bmi < 25)
	then
		System.out.println(bmiClass + "\t U heeft een normaal gewicht");
end

Anyone any ideas?

Femke

Op 5-mei-09, om 08:00 heeft Wolfgang Laun het volgende geschreven:

> 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
>
>
> _______________________________________________
> 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/949fbf82/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Afbeelding 1.png
Type: image/png
Size: 31580 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20090505/949fbf82/attachment.png 


More information about the rules-users mailing list