[gecode-users] help ----puzzles of defining Variable

Guido Tack tack at ps.uni-sb.de
Sun Aug 2 16:33:19 CEST 2009


Kayler Yao wrote:
> 1. the difference bettween IntVarArray and IntVarArgs ,and how to  
> use them
>    As explained in the manual of Gecode,  IntVarArgs is Argument  
> array which is just good enough for passing arguments with automatic  
> memory management. IntVarArray is Variable array which can store  
> variables and be used for storing the variables being part of a  
> solution (script).
>  From these description,i can see that IntVarArgs can be used when i  
> need automatic memory management.But When i need automatic memory  
> management, i don't know. If you give me an simple example, i maybe  
> can understand it.

Take sudoku as an example.  It has 81 variables, one for each field,  
so you have an IntVarArray x for these variables.  Now you want to  
post the constraint that the first row, x[0],...,x[8] must be  
distinct.  So you create an IntVarArgs containing those variables and  
pass it to the distinct constraint.  You don't have to worry about  
memory management for that array.

>  2. how to post the constraint ----multiplication of two variable?
>    For instance ,
>              IntVarArry  x;
>               x(*this,4,1,6);
>           I want to have a constraint " x[0] * x[1] = x[2] ".when i  
> write " post(*this, x[0] * x[1]   ==  x[2],o pt.icl( ) );" in my  
> test program, errors come out.  I began to doubt that whether you  
> can use the sign of " * ".  After testing " post(*this, 2 * x[1]    
> ==  x[2],o pt.icl( )  );", i have know that i can use " * ". So, I  
> doubt that we can't multiply two variable with the sign " * ". Who  
> can tell me how to add this constraint ?

The minimodel library (which contains the post(...) functions) only  
supports linear expressions, i.e. multiplication with constants.  To  
multiply two variables, use the mult constraint.

Cheers,
	Guido





More information about the gecode-users mailing list