What steps will reproduce the problem?
The planning problem in System/test/merge-with-open-domain.nddl exhibits the issue.
What is the expected output? What do you see instead?
Planning should complete. Instead, when compiled in debug mode, the following checkError is hit:
ConstraintEngine/base/ConstrainedVariable.cc:529: Error: isValid() is false
as a result of relaxing the string parameter after un-merging. The part of the isValid() check that is failing is the check to make sure that the last domain is a subset of the base domain. The last domain has been re-opened, causing it to not be a subset of the base.
Comment #1
Posted on Nov 15, 2012 by Happy OxI'm looking at this in the debugger. The problem seems to be originated in a piece of code in TokenVariable::handleReset that has been touched several times in the past, I'll have to spend some time making sure I get it right this time.
Mike, for the particular example that you provided, it looks like that assertion failure may be benign, I just need to make sure that the restricted base domain is reinstated before the split operation completes, are you seeing any problems when running optimized?
Comment #2
Posted on Nov 16, 2012 by Happy OxI dug some more today. Looks like the following:
predicate Predicate { string parameter; parameter = "foo"; }
correctly closes the derived domain for "parameter" upon initialization for a master token, but it incorrectly leaves it open for a slave token, so there may be a bug in the europa runtime when dealing with the creation of slave tokens.
I have to take a break from this now but will follow this lead as soon as I get a chance.
Comment #3
Posted on Nov 16, 2012 by Happy OxMike, I've committed a fix for this, please verify and let me know if you still see any problems.
Comment #4
Posted on Nov 16, 2012 by Happy Ox(No comment was entered for this change.)
Status: Fixed
Labels:
Type-Defect
Priority-Critical
OpSys-All
Milestone-EUROPA-2.7
Component-ConstraintEngine
Usability