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(a)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(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