[gecode-users] Problem with constraint

Guido Tack tack at ps.uni-sb.de
Mon Aug 11 09:03:06 CEST 2008


Hi.

As you've already found out, you have to use domain consistent  
propagation (ICL_DOM) to get the result you want.  You should be able  
to use post(space, new Expr(space.variable1), IRT_EQ, new  
Expr(space.variable2), ICL_DOM) to get the desired result.  I'm not  
100% sure, but I think your solution that uses e=variable1-variable2,  
e=0 doesn't work because only the e=0 is propagated to domain  
consistency, while e=variable1-variable2 still only achieves bounds  
consistency.

Cheers,
	Guido

Ujhelyi Zoltan wrote:

> Hello again,
>
> I have been experimenting with the questions raised in my previous  
> mail.
>
> I created a small Gecode space to be able to test the problem in a
> smaller scale, where I did use two variables (variable1, variable2,
> both IntVars with the domain {0,5}) and three constraints: variable1
> equals variable2, and variable2 cannot have the values 2 and 4.
>
> In all of my tests the latter two constraints are described like that:
>
> post(space, new BExpr(space.variable1, IRT_NQ, 2));
> post(space, new BExpr(space.variable1, IRT_NQ, 4));
>
> For the third constraint I had several tries. When I was using the
> rel() clause to write the constraint, I got the expected result:
>
> Variable #1: {0..1,3,5}
> Variable #2: {0..1,3,5}
>
> But when using a similar construct I would like to use in the static
> verifier, I got no result for the second variable, it can has all
> values from it's domain.
>
> post(space, new BExpr(space.variable1, IRT_EQ, space.variable2));
>
> Reading about different propagators, I have been able to get the
> expected result with the use of the ICL_DOM propagator, but only if I
> was posting the constraint directly, like that:
>
> post(space, new Expr(space.variable1), IRT_EQ, new
> Expr(space.variable2),org.gecode.GecodeEnumConstants.ICL_DOM);
>
> But if I tried to translate the a BExprs to that form, I did not
> succeed:
>
> 	    Expr expression = new Expr(new
> Expr(space.variable2).minus(space.variable1));
> 	    post(space, new Expr(expression), IRT_EQ, 0,
> org.gecode.GecodeEnumConstants.ICL_DOM);
>
> Can you tell me a way how to enable this strong ICL_DOM propagators
> meanwhile using the BExpr form, if it is possible? It would help our
> project a lot, it would simplify it's code.
>
> Thank you for your help,
> Zoltán Ujhelyi
> On 2008.08.09., at 18:30, Ujhelyi Zoltan wrote:
>
>> Hello all,
>>
>> we are currently trying to build a static checker system on top of
>> Gecode/J 2.1.1. (in an Eclipse environment), and we have found an
>> interesting case.
>>
>> In order to allow us greater flexibility we try to use the Expression
>> API (it allows us to build constraints in a hierarchical manner).
>>
>> I was testing the implementation, and found an interesting final
>> result: there were to IntVars, which were supposed to be the same,  
>> did
>> not have the same final ranges: one of them had {2,4}, but the other
>> had {2,3,4}. I tried to trace back the code to look whether the
>> constraints were wrong or not, and found the following expression
>> building term:
>>
>> BExpr expression = new BExpr(new Expr(variable1),relation, new
>> Expr(variable2));
>>
>> Tracing the variables variable1 was a new variable, it hadn't been
>> constrained yet, while variable2's domain had been limited to the
>> values 2 and 4 (and they were the variables mentioned before in this
>> letter), while the relation had the value IRT_EQ.
>>
>> I tried a post of the expression right after it's construction to see
>> whether it helps or not:
>> org.gecode.Gecode.post(space, expression);
>>
>> It did not solve the problem, but when I replaced the post method to
>> the following rel call, the constraint handling was working as I
>> expected it before.
>>
>> rel(space, variable1, IntRelType.IRT_EQ, variable2);
>>
>> I would like to know, whether this phenomenon is the intentional
>> (maybe I do not understand something under the hood), or not. And if
>> you could tell me a way to avoid it, I would be very glad.
>>
>> Thank you very much in advance for your help,
>> Zoltán Ujhelyi
>> _______________________________________________
>> Gecode users mailing list
>> users at gecode.org
>> https://www.gecode.org/mailman/listinfo/gecode-users
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users





More information about the gecode-users mailing list