[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