[ library(ic_global_gac) | Reference Manual | Alphabetic Index ]

# gcc_matrix(++RowBounds, ++ColBounds, +Matrix)

Constrain the cardinality of values taken in the rows and columns of Matrix as specified by RowBounds and ColBounds, respectively

RowBounds
  A list of M sublists with elements of the form gcc(Low,High,Value), where Low, High and Value are integers, and High and Low are non-negative (High >= Low), and Value must be different from other Values in RowBounds
ColBounds
  A list of N sublists with elements of the form gcc(Low,High,Value), where Low, High and Value are integers, and High and Low are non-negative (High >= Low), and Value must be different from other Values in ColBounds
Matrix
  A two dimensional MxN matrix of Variables or integer

## Description

This constraint ensures that the cardinality (the number of occurrences) of values in each row and column of Matrix conforms to the specifications in RowBounds and ColBounds, respectively. RowBounds and ColBounds are lists of triples in the form gcc(Low,High,Value) where Value is an integer, a value that Vars is to be assigned to, and must occur only once as a Value in the row/column, and whose cardinality |Value| is specified by Low =< |Value| =< High, where Low and High are non-negative integers. Vars cannot take values not specified in a gcc triplet. This constraint is logically equivalent to imposing M+N individual gcc constraints on each row and column of Matrix, but allows more reasoning because of the interaction of the values between the rows and columns. The gcc used is from lib(ic_global_gac), but the extra inferences performed between the rows and columns themselves may be not fully domain consistent.

This is currently a prototype -- the constraint has not been tested very extensively and little effort has been spent to optimise performance. We welcome any feedback on using this constraint.

This constraint is described in J.-C. Regin and C. Gomes, 'The Cardinality Matrix Constraint', CP 2004.

## See Also

gcc / 2