[gecode-users] help ----puzzles of defining Variable
Kayler Yao
risoay at gmail.com
Mon Aug 3 04:31:06 CEST 2009
hi Guido,
Thanks for your reply!
1. The second question is not a problem to me now, for your reminding. Yes.
As you said, if i want to multiply two variables, mult constraint is a
choose. Because of carelessness, i have to study manual of Gecode well
again.
2. But i still not understand your reply well about the first question.
whether your means are that distinct constraint is only used for IntVarArgs,
as written in the manual of Gecode ---
" void Gecode::distinct<mk:@MSITStore:D:\Program%20Files\Gecode\doc\GecodeReference.chm::/group__TaskModelIntDistinct.html#g5f4f4006b72f95618b3030815a8718a5>(Space
&home, const IntVarArgs &
x<mk:@MSITStore:D:\Program%20Files\Gecode\doc\GecodeReference.chm::/kakuro_8cpp.html#e928e6fd222358d27be0a56a8ade81ce>,
IntConLevel icl=ICL_DEF)"
But i found that i can also use IntVarArray in distinct constraint through
testing, and also see it in the example "money.cpp" supplied by the manual
of Gecode 3.1.0. As follows:
" IntVarArray le;
distinct(*this, le, opt.icl()) "
I know they are Array, from their definition i have no idea to understand
the reason why they can all be used in distinct constraint .
Look forward to your reply.
Thanks
Kayler
2009/8/2 Guido Tack <tack at ps.uni-sb.de>
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20090803/be64dc60/attachment.htm>
More information about the gecode-users
mailing list