[gecode-users] counting constraint with BoolVarArgs

Guido Tack tack at gecode.org
Wed Aug 7 01:53:07 CEST 2013


Hi Philippe,

counting ones in BoolVar arrays is the same as the sum over the array, so just use linear with BoolVar arguments.

Cheers,
Guido

On 06/08/2013, at 11:46 PM, Philippe <aqwzsxaqwzsx at orange.fr> wrote:

> Hello Everybody,
> 
> I need to count the number of 'true' values stored in a BoolVarArray
> (accessed through a Matrix<BoolVarArgs>). However, the counting constraint
> (as described page 63 of gecode 4.2.0 manual) only takes integer variables.
> Thus, the following pseudo-code doesn't work :
> 
> BoolVarArray _FPR(*this, _Na, _Ne);
> IntVarArray _NFPR(*this, _Na);
> Matrix<BoolVarArgs> fpr(_FPR, _Na, _Ne);
> 
> for(int i = 0 ; i < _Na ; ++i)
>  {
>   // after count's call, 
>   // _NFPR[i] = number of 'true' in fpr.row(i)
>   count(*this, fpr.row(i), true, IRT_EQ, _NFPR[i]);
>  }
> 
> 
> 1) What is the reason to forbide BoolVar in count ?
> 
> 2) Is it legal (don't think so) to write :
> 
> Matrix<IntVarArgs> fpr(_FPR, _Na, _Ne);
> 
> for(int i = 0 ; i < _Na ; ++i)
>  count(*this, fpr.row(i), 1, IRT_EQ, _NFPR[i]);
> 
> 3) Or do I need to replace fpr's definition by :
> 
> Matrix<IntVarArgs> fpr(_FPR, _Na, _Ne); 
> 
> 4) Or, do I need to use channeling ?
>   But i don't find the way to express it
>   It seems that the tips page 67 is not relevant here. 
>   help please !
> 
> 5) Or something else ?
> 
> Thanks for any help,
> Philippe
> 
> 
> 
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users




More information about the users mailing list