[gecode-users] Propagator return values
Christian Schulte
cschulte at kth.se
Tue May 26 10:52:02 CEST 2009
Well, you have to wait for the next part of the tutorial docs.
But actually, it is straightforward: ES_FIX is nothing but an optimization.
ES_NOFIX should be read as "I HAVE NO IDEA WHAT I COMPUTED". Whenever you
are unsure, just return ES_NOFIX. That's it. Then it's obvious what I said:
even if your propagator has no idea what it computed, it should not be
executed over and over again without doing anything.
The difference is actually whether the propagator was at fixpoint before it
is executed: then ES_NOFIX and ES_FIX are exactly the same.
If you want to know all the details, check this:
http://www.gecode.org/paper.html?id=SchulteStuckey:TOPLAS:2008
Christian
--
Christian Schulte, www.ict.kth.se/~cschulte/
-----Original Message-----
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Martin Mann
Sent: Tuesday, May 26, 2009 10:10 AM
To: gecode user list
Subject: [gecode-users] Propagator return values
> Christian Schulte (25.5.2009 16:31):
>> If no variables are modified by a propagator and the propagator says
>> ES_NOFIX, Gecode still knows that nothing has changed. So finding out
>> whether something has changed, and if yes reporting ES_NOFIX and
>> ES_FIX
>> otherwise is exactly the same than reporting ES_NOFIX.
ok ... now I am confused ... :)
So to say, if I am not changing the domains within my filtering it
doesnt matter what I return (ES_FIX or ES_NOFIX) ?
But isnt there a difference in the "meaning"? That is, either I want to
tell the engine I cannot do any filtering anymore (ES_FIX) or that only
a partial filtering of the domains was done?
"[..]
# ES_NOFIX: the propagator has done propagation
# ES_FIX: the propagator has done propagation and has computed a
fixpoint. That is, running the propagator immediately again will do nothing.
[..]" (from Gecode documentation)
So in a case I dont want to filter (e.g. due to too large domain sizes
etc.) what is better to return?
I would guess ES_FIX, because the propagator should not be called again
until another change of the domains has been done...
Or am I wrong about that?
Think the use cases / description of the ExecStatus possibilities is
quite short. Everytime I have to write a propagator I am a bit confused
what to return. Only the ES_FAILED and ES_SUBSUMED cases are totally
clear to me.. ;)
Thanks for your help to the eyeless user!
Martin
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
More information about the gecode-users
mailing list