Op 07-12-11 16:44, guyramirez schreef:
Yes I am getting the same results with your recommended rule.
Also I wrote a Drools program that does not use Planner but instead performs
the initial insert of the ShiftAdjustment, then the 3 updates with the
firing of the rules at each insert/update, all in sequence, with the display
of the score after each firing (so no use of the Solution class). And I get
exactly the same erroneous results.
Then it's a bug in Drools Expert,
please create a jira at
issues.jboss.org/browse/JBRULES
and attach code to reproduce (or even better, create a pull request at
github.com/droolsjbpm with a regression test).
Also try running with the drools-core/compiler 5.4.0-SNAPSHOT's to see
if they have it too and report it in the issue.
I agree with you, it could be in the hashCode and/or equals methods.
I will
check them again against the examples. I have done it so many times already.
:)
> It's odd indeed that the tmp working memory is incorrect, instead of the
real one.
The real working memory is created everytime from scratch to check against
the presumed score, right?
in environment mode TRACE: yes
in environment mode DEBUG: yes, but not every move, but every step (it's
too slow otherwise)
Somehow the update of a fact (planning entity in
this case) does not yield the same result as a retract and then insert (or
plain insert in the case of the real working memory).
yes, there is statefull
working memory corruption.
We looked at the planning entity code earlier. Here is some code for
the
IntervalRequirement class that is being used to match against the
ShiftAssignment:
public class IntervalRequirement implements Comparable<IntervalRequirement>
{
private int dayAppliesTo;
private int interval;
private int intervalMinutes;
private Position position;
private int staffingRequired;
@Override
public int compareTo(IntervalRequirement other) {
return this.interval - other.interval;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
} else if (o instanceof IntervalRequirement) {
IntervalRequirement other = (IntervalRequirement) o;
return new EqualsBuilder()
.append(this.interval, other.interval)
.append(this.position, other.position)
.append(this.staffingRequired, other.staffingRequired)
.isEquals();
} else {
return false;
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(getClass())
.append(this.interval)
.append(this.position)
.append(this.staffingRequired)
.toHashCode();
}
...
}
Looks good, but I am talking about the cloneSolution() of the class that
implements Solution, not the planning entity.
--
View this message in context:
http://drools.46999.n3.nabble.com/Planner-5-3-Final-presumedScore-is-corr...
Sent from the Drools: User forum mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
With kind regards,
Geoffrey De Smet