In C++, operator ^ is exclusive OR: 1^1 is 0. You are also not initializing bool1 and bool2 properly; maybe cardinality constraints would be simpler.
On Mon, Dec 30, 2013 at 10:10 PM, inspecteur <inspecteur.r...@gmail.com>wrote: > Hi > > I tried a track but that does not seem to work > I may be wrong on boolean > 1 && 1 =1 > 1 && 0 = 0 > 0 && 0 = 0 > > 1 ^ 0 = 1 > 0 ^ 0 = 0 > 1 ^ 1 = 1 > > Code : > > IntVarArgs d1(4); > BoolVar bool1(*this,0,1); > BoolVar bool2(*this,0,1); > > for (int i = 0; i < n; i++) { > for (int j = 0; j < 4; j++) { > d1[j]=tab(i,j); > } > > // I tested if the value 3 appears at least once > for (int j = 0; j < 4; j++) { > bool1 = expr(*this, (d1[j]==3) ^ (bool1==1)); > } > > // I tested if the value 4 appears at least once > for (int j = 0; j < 4; j++) { > bool2 = expr(*this, (d1[j]==4) ^ (bool2==1)); > } > > //I constrained that the two values 3 et 4 do not appear together > rel(*this, (bool1 + bool2) != 1); > > > > > Le 28/12/2013 14:50, Christian Schulte a écrit : > > Hi, > > > > This is not really a Gecode-specific question but a general constraint > modeling question, so you might want to turn elsewhere for help. > > > > Christian > > > > -- > > Christian Schulte, www.ict.kth.se/~cschulte > > > > *From:* users-boun...@gecode.org > [mailto:users-boun...@gecode.org<users-boun...@gecode.org>] > *On Behalf Of *inspecteur > *Sent:* Tuesday, December 24, 2013 03:59 PM > *To:* users@gecode.org > *Subject:* [gecode-users] Avoid the appearance of several simultaneous > values > > > > Hi > Sorry for my english, I'm french and beginner on gecode. > > I want to create an array of integers (4 * 4) with the constraints: > 1) Possible values between 1 and 6 > 2) no repeating values on lines > 3) The values 3 and 4 must not be on the same line > 4) No more than 2 times the same value on each column > > I stumble on the constraint number 3) > > If someone could put me on the track > > > > Here is my code > > class CarreMagique : public Script { > private: > const int n; > IntVarArray carreMag; > > public: > CarreMagique(const SizeOptions& opt) > : n(opt.size()), carreMag(*this,n*4,1,6) { > > Matrix<IntVarArray> tab(carreMag, n, 4); > IntVarArgs d1(4); > for (int i = 0; i < n; i++) { > for (int j = 0; j < 4; j++) { > d1[j]=tab(i,j); > } > distinct(*this, d1); > } > > IntVarArgs d2(n); > for (int j = 0; j < 4; j++) { > for (int i = 0; i < n; i++) { > d2[i]=tab(i,j); > } > count(*this, d2, IntSet(0,2), IntArgs::create(6,1,1)); > } > > } > branch(*this, carreMag, INT_VAR_NONE(), INT_VAL_SPLIT_MIN()); > } > > CarreMagique(bool share, CarreMagique& s) : Script(share,s), n(s.n) { > carreMag.update(*this, share, s.carreMag); > } > > virtual Space* copy(bool share) { > return new CarreMagique(share,*this); > } > > virtual void print(std::ostream& os) const { > // Pour acceder au tableau comme à une matrice > Matrix<IntVarArray> m(carreMag, n, 4); > for (int i = 0; i < n; i++) { > os << "\t"; > for (int j = 0; j < 4; j++) { > os.width(2); > os << m(i,j) << " "; > } > os << std::endl; > } > } > > }; > > int main(int argc, char* argv[]) { > SizeOptions opt("CarreMagique"); > opt.size(4); > Script::run<CarreMagique,DFS,SizeOptions>(opt); > return 0; > } > > > > _______________________________________________ > Gecode users mailing list > users@gecode.org > https://www.gecode.org/mailman/listinfo/gecode-users > >
_______________________________________________ Gecode users mailing list users@gecode.org https://www.gecode.org/mailman/listinfo/gecode-users