[gecode-users] rtest_eq_dom doesnt lead to RT_TRUE !?!?!

Martin Mann mmann at informatik.uni-freiburg.de
Thu Jun 8 14:37:03 CEST 2006


Yes thats right, I only gave you a sketch about the problem. sorry! I am 
sure that the space and the variables are completly propagated when I 
check my isNQ var.
But Guido has been right about the RT_TRUE/RT_FALSE. I mixed it up due 
to the NegBoolView used for IRT_NQ in the rel function.

I updated my trunk version of Gecode and YESSS !!!!

;) everything is fine now! my variable is propagated as expected!

Thanks a lot for the fast help!

Martin


> While you were right about the implementation, there is a problem in your
> setup: direectly after posting a constraint, you can not be sure that it has
> been propagated. That is, your first have to propagate the space with
> applying status() for example. Maybe you did that and just don't mentioned
> it.
> 
> Christian
> 
> --
> Christian Schulte, http://www.imit.kth.se/~schulte/ 
> 
> -----Original Message-----
> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
> Of Martin Mann
> Sent: Thursday, June 08, 2006 1:14 PM
> To: gecode user list
> Subject: [gecode-users] rtest_eq_dom doesnt lead to RT_TRUE !?!?!
> 
> 
> Hi,
> 
> first of all: I am using the trunc version... but I checked and the 
> corresponding source for the stable version is the same!
> 
> I found a strange behavior of the Gecode::rel function using IRT_NQ as 
> an reified constraint.
> 
> I used 2 variables with the following domains:
> 
> d1 = (1)
> d2 = (0,2)
> 
> also I ve got a reified constraint like that
> 
> rel(home, d1, IRT_NQ, d2, isNQ, ICL_DOM)
> 
> so isNQ should be true if d1 an d2 are unequal!
> 
> BUT: isNQ is NOT assigned!
> 
> i dived into the source and followed the my instance of the rel function:
> 
> rel
> -> Rel::ReEqDom<IntView,NegBoolView>
> -> ReEqDom<View,CtrlView>::propagate()
> -> rtest_eq_dom()
> ->
> and found this...
> ===================================
>    template <class View>
>    forceinline RelTest
>    rtest_eq_dom(View x, View y) {
>      RelTest rt = rtest_eq_bnd(x,y);
>      if (rt != RT_MAYBE) return rt;
>      return (x.range() || y.range()) ? RT_MAYBE :
>         test_eq_dom_check(x,y);
>    }
> ==================================
>    template <class View>
>    RelTest
>    rtest_eq_dom_check(View x, View y) {
>      ViewRanges<View> rx(x), ry(y);
>      while (rx() && ry()) {
>        if (rx.max() < ry.min()) {
> 	++rx;
>        } else if (ry.max() < rx.min()) {
> 	++ry;
>        } else return RT_MAYBE;
>      }
>      return RT_FALSE;
>    }
> ==================================
>    template <class View>
>    forceinline RelTest
>    rtest_eq_bnd(View x, View y) {
>      if ((x.min() > y.max()) || (x.max() < y.min())) return RT_FALSE;
>      return (x.assigned() && y.assigned()) ? RT_TRUE : RT_MAYBE;
>    }
> ==================================
> 
> 
> if I m right... rtest_eq_dom will never return RT_TRUE if this cant be 
> determinated via bound constraint.... ???
> this is because the called rtest_eq_dom_check() function will never 
> return RT_TRUE ...
> 
> but this isnt what i expect if i am using ICL_DOM or?
> 
> in my case non of the 2 called functions lead to RT_TRUE but at least 
> one should do ...
> 
> is it a bug or a feature? ;)
> 
> thanks for a closer look
> 
> 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