Hi!
Im a bit confused as to when exactly i should return the various
ExecStatus from my (n-ary) propagator.
I understand that ES_FAILED means that the propagation failed, ie it
signals a dead-end, so i return that whenever i completely empty a
domain.
Exactly.
I also understand ES_SUBSUMED which i return when my constraint is
entailed by the domains.
Yes.
However, ES_OK, ES_FIX and ES_NOFIX im not sure if i understand
correctly. If i have pruned all i can unless another propagator
removes more values (without reducing all domains to size 1 or
failing), what should i return? Also, should i return something
specific if i didnt prune any values?
You never return ES_OK, it is only used for the propagator post
functions, not for the propagate function itself. Your intuition
about FIX and NOFIX is basically correct: If you can guarantee that
after propagation, your propagator is at a fixpoint, i.e. running it
immediately again will not result in any pruning, you may return
ES_FIX. In all other cases, return ES_NOFIX. So it is always safe to
return NOFIX, but potentially less efficient than possible.
Not pruning anything is not a special case: if you know the
propagator is at a fixpoint, return ES_FIX, otherwise ES_NOFIX.
Christian has some slides dealing with fixpoints of propagators
(slide 40):
http://www.ict.kth.se/courses/2G1515/notes/2G1515-L05-1.pdf
Finally if all domains are reduced to size 1, should i return
ES_SUBSUMED, or something else?
You should return ES_SUBSUMED. This will guarantee that the
propagator is removed and its memory reclaimed. Our test suite, e.g.,
checks for all propagators that they are subsumed when all variables
are assigned.
On a related note, does a variable automatically switch to being
assigned when its domain is reduced to a single value?
Yes, you don't have to do anything about that. Actually, a variable
doesn't have a flag or anything that says that its assigned - it just
checks (in the case of integer variables) whether min=max.
Cheers,
Guido
--
Guido Tack
Programming Systems Lab, Saarland University, Germany
http://www.ps.uni-sb.de/~tack
_______________________________________________
Gecode users mailing list
[EMAIL PROTECTED]
https://www.gecode.org/mailman/listinfo/gecode-users