[gecode-users] Generating constraints

Christian Schulte cschulte at kth.se
Thu Oct 30 12:05:08 CET 2008


Please do the following: familiarize yourself somehwat with what constraints
Gecode actually implements. That's well documented. Look to the examples
that come with Gecode.

Then, creating additional integer variables that are just constants is no
problem, the constants will be eliminated automatically if possible.

Then, what is more important (and that was what I referred to in my previous
email): make sure that you do not decompose a constraint into several
smaller constraints if not necessary. That is, you have to read how linear
works as opposed to plus and minus.

Cheers
Christian

--
Christian Schulte, www.ict.kth.se/~cschulte/


-----Original Message-----
From: Max [mailto:chaosangel at gmx.de] 
Sent: Wednesday, October 29, 2008 11:25 AM
To: Christian Schulte
Cc: 'Mikael Zayenz Lagerkvist'; users at gecode.org; Guido Tack
Subject: Re: [gecode-users] Generating constraints

I habe a little problem now with the operators.
Now i do not want to use the minimodel part und tried to convert my tree 
the long/boring way.
There is a little problem, all arithmetic functions seem to be 
implemented for variables only.
So  plus(this, v1,v2); is ok, but  plus(this, 5,v2); or plus(this, 
v1,5); is not.
Now Guido Tack somewhen wrote:

div(this, x0, x1, IntVar(this, 42, 42));
There's no specialized version for constant integers (yet).


But as i wanted to do something similiar, Christian Schulte answered:

Yes, it is even worse: it sacrifices propagation! 


So how can i post constants, not using minimodel. Is this the right way 
? (IntVar(this, 42,42))

Mfg
Max





Christian Schulte wrote:
> Yes, it is even worse: it sacrifices propagation! 
>
> If you need to get started look to the code that posts propagators based
on
> LinExpr and LinRel values. That is actually nothing but a tree analyzer
> posting the minimal number of required propagators for linear relations.
>
> Cheers
> 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 Max
> Sent: Tuesday, October 28, 2008 1:56 PM
> To: Mikael Zayenz Lagerkvist
> Cc: users at gecode.org
> Subject: Re: [gecode-users] Generating constraints
>
> I have no problem in writing a tree analyzer but i looked for a uniform 
> representation of the variables, operators, relations and constants, so 
> i do not have to write an extra function for all of them.
> I want to write
>
> recursive_function_call rfc(X):
> IntVar temp;
> //switch for operator
> add(rfc(x1), ADD, rfc(x2), temp);
> return temp;
>
> I don't want to distinguish the leafs of the node at this step. So i 
> need a uniform return value.
> PS: Does it influence the performance if i use temporary variables for 
> my constants.
>
> IntVar x(this, 5,5);
>
>
>
>
> Mikael Zayenz Lagerkvist wrote:
>   
>> Hi,
>>
>> If you have a tree representing an expression, then you should write a
>> tree-analyzer (a tree-walker for example) that posts constraints that
>> correspond to the tree. This is how the linear expressions in Gecodes
>> MiniModel works. For more information on writing tree analyzers, see a
>> compiler text as it corresponds to instruction selection.
>>
>> There is no way to undo a tell - you have to copy the space.
>>
>> Cheers,
>> Mikael
>>
>>
>> On Tue, Oct 28, 2008 at 12:58 PM, Max <chaosangel at gmx.de> wrote:
>>   
>>     
>>> Hello all,
>>>
>>> i currently try to post constraints and need your help.
>>> I have my constraints not in a textual format, but in a self made tree
>>> structure of the form
>>>
>>>
>>>                              rel">="
>>>                             /         \
>>>                           op+      const=5
>>>                        /       \
>>>                var=x       const=7
>>>
>>>
>>> (i hope this is readable)
>>>
>>> Now i want to generate and post a gecode constraint of it.
>>> Is there an easy way to recursivly define a constraint, because it seems
>>> to me that there is no baseclass or something that can be used.
>>>
>>> I wanted to to something of the form
>>>
>>> GeCodeConstraint recursive_converter(MyConstraint)
>>> {
>>>       if "variable" return x;
>>>       if "constant" return 5;
>>>       if "op+" return recursive_converter(left_node) +
>>> recursive_converter(right_node);
>>>       if "rel>=" return recursive_converter(left_node) >=
>>> recursive_converter(right_node);
>>> }
>>>
>>>
>>> I i found for GeCodeConstraint was MiniModel::LinRel<>, is there
>>> something more uniform, because i want to use boolean and integer
>>> variables (reified constraints) and stuff.
>>> (the arithmetic functions seem very generic returning a variable, but
>>> then a lot of extra variables would have to be generated)
>>>
>>>
>>> Any ideas ?
>>>
>>> 2nd question:
>>>
>>> Is there a way to post the value of a variable not in form of a
>>> constraint, so "branch" on a boolean variable but being able to undo it
>>>       
> so
>   
>>> so
>>> b[0].set(0);
>>> //after some time
>>> b[0].set(1);
>>>
>>> without copying the whole space?
>>>
>>> Thank you a lot.
>>>
>>> Max
>>>
>>> _______________________________________________
>>> 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
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
>   






More information about the gecode-users mailing list