Hi Tim
> I am convinced that:
> 2) Penalty's equals/hashcode uses both "cause" and
"weight"?
> then 3) happens: Keep Penalty(10), add Penalty(5)
> is an issue in drools core and instead 2) should happen:
> Remove Penalty(10), add Penalty(5)
> because Penalty(10) is no longer true
exactly!
that is the behavior i was expecting. it took me quite some time
to find out why my program did not find a solution.
I made a testcase and Edson might look into it :)
Watch this issue
https://jira.jboss.org/jira/browse/JBRULES-1804
Once it's resolved, I 'll made the necessary adjustments in the
equals/hashcode of the ConstraintOccurrence implementations.
With kind regards,
Geoffrey De Smet
tim tim schreef:
> I am going to make a testcase to isolate the problem and make it more
> transparent that it is indeed an issue. And then try to convince Mark and
> Edson that it's an issue :)
maybe there could be a switch, to tell drools which mode
is prefered? then they could keep the strange behavior in the engine ;-)
> which the HACK indeed that you quothed below:
> the hack causes the rule to no longer apply (retracting the
> ConstraintOccurrence), after which it then refires.
argh, you are right! i didnt see that it gets retracted. i still have
to get used
to the drools way..
best, tim
>> i solved the problem of improving constraints for the same causes that
>> differ in hashCode by retracting the old fact before inserting the new
>> one.
>> but it takes quite some overhead to be able to do so. i could post my
>> code if anyone is interested.
>>
>> unfortunately i could not find in your samples how you handle such a
>> scenario.
>>
>> does the "HACK" part of this rule have something to do with it?
>>
>> from curriculumCourseScoreRules.drl
>>
>> // MinimumWorkingDays: The lectures of each course must be spread into
>> a minimum number of days.
>> // Each day below the minimum counts as 5 points of penalty.
>> rule "minimumWorkingDays"
>> when
>> $course : Course($minWorkingDaySize : minWorkingDaySize);
>> $dayCount : Number(intValue < $minWorkingDaySize) from accumulate(
>> $day : Day()
>> and exists Lecture(course == $course, day == $day),
>> count($day)
>> );
>> // HACK to fix wierd truth maintance behavior in drools
>> // because making weight part of the equals/hashcode doesn't cut it
>> not IntConstraintOccurrence(
>> ruleId == "minimumWorkingDays",
>> constraintType == ConstraintType.NEGATIVE_SOFT,
>> causes contains $course,
>> eval(weight != (($minWorkingDaySize - $dayCount.intValue()) *
>> 5))
>> );
>> // An uninitialized schedule should have no constraints broken
>> exists Lecture(course == $course);
>> then
>> insertLogical(new
>> IntConstraintOccurrence("minimumWorkingDays",
>> ConstraintType.NEGATIVE_SOFT,
>> (($minWorkingDaySize - $dayCount.intValue()) * 5),
>> $course));
>> end
>>
>> but the hack makes the rule not fire at all, when it had fired before.
>> even if the error has improved by now.
>>
> Feed back is always welcome :)
>
> With kind regards,
> Geoffrey De Smet
>
> _______________________________________________
> 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