[gecode-users] Breaking symmetries with LDSB in Matrix model.

Chris Mears chris at cmears.id.au
Thu Oct 2 02:32:20 CEST 2014


On Mon, 29 Sep 2014 10:29:33 +0100
Bouchene Sabrina <genius_linda1987 at yahoo.fr> wrote:

> Symmetries s;
> 
> BoolVarArgs a;
>     for (int i = 0 ; i < (opt.cols/2-1); i++) {
>       a << p.col(i);
>     }
>     for (int i = (opt.col-1) ; i >= opt.col/2 ; i--) {
>       a << p.col(i);
>     }
>     s << VariableSequenceSymmetry(a, opt.cols*opt.rows); 

> if
> this part of code is correct so his effect is aquivalent to this
> function of Gecode: columns_reflect(): to specify that a matrix's
> columns can be reflected.

Yes, this should have the same effect as columns_reflect, but there are
a couple of problems with your code above.  The second argument to
VariableSequenceSymmetry should be the length of each sequence, not the
total length (in your example above, it should be
(opt.cols/2)*opt.rows).  Also, the bounds on your loops look wrong; I
think they should be:

  for (int i = 0 ; i < (opt.cols/2); i++) 
and
  for (int i = (opt.cols-1) ; i >= (opt.cols+1)/2 ; i--)


As for the second question, you can post a combination of symmetries by
adding another symmetry definition to the Symmetries object, e.g. in
the bibd example:

      Symmetries s;
      s << rows_interchange(p);
      s << columns_interchange(p);

The effect is that each symmetry is applied until a fixed point is
reached.  For example, if value "v" is deleted from the domain of the
variable p(1,1) by search, then according to the rows-interchange
symmetry "v" will be removed from p(1,2), p(1,3), p(1,4), etc.  Then
because "v" has been deleted from p(1,2), according to the column
symmetry "v" will be deleted from p(2,2), p(3,2), p(4,2), etc.  This
continues until there are no more values to delete due to symmetry.

This effect is an approximation of taking the product of the two
symmetry groups.  It's not possible to have each symmetry definition
act independently of the others, if that's what you mean by "Sym a +
Sym b".



More information about the users mailing list