[gecode-users] Generating constraints

Max chaosangel at gmx.de
Wed Oct 29 11:34:48 CET 2008


Sorry, it seems to me that i used minimodel functions or direct 
modellling or something.
How can i distinguish the function Gecode::plus/2IntVar from 
Gecode::plus/3IntVar and what is the difference.
And there exists no version of div returning an IntVar.
Mfg
Max

Max wrote:
> 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
>>
>>   
>>     
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
>   





More information about the gecode-users mailing list