On Tue, 23 Apr 2013 10:55:08 +0200 Martin Mann <mm...@informatik.uni-freiburg.de> wrote:
> I have a symmetry function "s" that can generate for each solution > "a" the set of symmetric assignments on X1 and on X2 (independently). > The problem is defined in a way that all symmetries from X1 are > theoretically combineable with symmetric assignments on X2. > > Thus I would like to do something like that: > > - for each assignment a1 on X1 > + find assignment a2 on X2 > + ensure during remaining search implication > if(a1) --> [X2 not s(a2)] for all symmetries of a2 > + ensure during remaining search > [X1 not s(a1)] for all symmetries of a1 > + continue search Hi Martin, I'm not sure I understand exactly what you are trying to do. Say you have a model like this: class TwoPhase : public Script { protected: IntVarArray x; IntVarArray y; public: TwoPhase(const Options&) : x(*this,2,1,2), y(*this,3,1,3) { Symmetries sx; sx << ValueSymmetry(IntArgs(2,1,2)); Symmetries sy; sy << ValueSymmetry(IntArgs(3,1,2,3)); branch(*this, x, INT_VAR_NONE(), INT_VAL_MIN(), sx); branch(*this, y, INT_VAR_NONE(), INT_VAL_MIN(), sy); } // ... } You would get these solutions: x: 1 1 y: 1 1 1 x: 1 1 y: 1 1 2 x: 1 1 y: 1 2 1 x: 1 1 y: 1 2 2 x: 1 1 y: 1 2 3 x: 1 2 y: 1 1 1 x: 1 2 y: 1 1 2 x: 1 2 y: 1 2 1 x: 1 2 y: 1 2 2 x: 1 2 y: 1 2 3 i.e. the symmetry is broken within the "x" and "y" independently. If this is not what you are looking for, could you please explain a bit more? Cheers, Chris _______________________________________________ Gecode users mailing list users@gecode.org https://www.gecode.org/mailman/listinfo/gecode-users