Hi, yes, you should channel your c_a and c_b arrays to BoolVars, then you can simply post the constraints directly using the minimodel abstractions:
BoolVarArgs b_a(...); channel(home, b_a, c_a); BoolVarArgs b_b(...); channel(home, b_b, c_b); for (int j=0; j<n; j++) { rel(home, b_a[j] == (x[j+0] == 1)); rel(home, b_a[j] == (x[j+1] == 2)); ... } Cheers, Guido -- Guido Tack http://www.csse.monash.edu/~guidot/ On 26/05/2013, at 10:06 PM, Uwe Nowak <uwe.no...@itwm.fraunhofer.de> wrote: > Hi! > > Sorry for spamming the mailing list... > At the moment I am focussing on the 3rd ide of modelling. > Then I have to formulate constraints as > > c=j <==> x_{j+u} = v > > By substituting i=j-u I get > > c=i+u <==> x_i = v > > Which looks pretty much like the channel constraint, except that on the right > side there is x_i = v instead of x_i = 1. > Do I need additional (temporary) boolean variables to get rid of this? > > Best Regards, > Uwe Nowak > > > ----------------ursprüngliche Nachricht----------------- > Von: "Uwe Nowak" uwe.no...@itwm.fraunhofer.de > An: users@gecode.org > Datum: Sat, 25 May 2013 23:33:18 +0200 > ------------------------------------------------- > > >> Hi! >> >> Thank you for your answer. As I stated, I am a beginner to gecode and >> constraint >> programming at all. I did not >> try reification, but by this keyword I managed to solve the problem. >> >> >> >> However, I still think, that I am formulating my constraint in a bad way. I >> managed >> to reduce my >> (sub)problem to the following: >> >> I have an one-dimensional array >> ############# >> >> Furthermore, I have patterns such as >> Pattern 1 = aa#a >> Pattern 2 = b#b#b >> where the hash means an empty field. >> >> I want to place these patterns on the array, i.e. possible placements are >> Placement 1: aa#a###b#b#b# >> Placement 2: aabab#b###### >> >> No I want to store the position (i.e. the column) of each pattern in an >> IntVarArray >> c, i.e. in Placement 1 it >> is c=(0; 7) in Placement 2 it is c=(0; 2). However I do not know, how to >> formulate the >> non-overlapping. >> >> >> I have three possible Ideas: >> 1. For each pattern I have an BoolVarArray to indicate if the pattern is >> placed >> there >> For Placement 1 I have two arrays (for pattern 1 = 1101000000000) and (for >> Pattern >> 2 = 0000000101010) >> Then I have constraints >> c_a=j <==> x_{j+0} = x_{j+1} = x_{j+3} = 1 >> c_b=j <==> y_{j+0} = y_{j+2} = y_{j+4} = 1 >> >> >> 2. I have one IntVarArray that stores the pattern placed at this field. >> For Placement 1 this is 1101000202020 >> Then I have constraints >> c_a=j <==> x_{j+0} = x_{j+1} = x_{j+3} = 1 >> c_b=j <==> x_{j+0} = x_{j+2} = x_{j+4} = 2 >> >> >> 3. I assign different numbers to each point of the the pattern, I.e. pattern >> 1 = >> 12#3 and Pattern 2=4#5#6 >> For Placement 1 this is 1203000405060 >> Then I have constraints >> c_a=j <==> x_{j+0} = 1 >> c_a=j <==> x_{j+1} = 2 >> c_a=j <==> x_{j+3} = 3 >> c_b=j <==> x_{j+0} = 4 >> c_b=j <==> x_{j+2} = 5 >> c_b=j <==> x_{j+4} = 6 >> >> However I am somehow lost, how to formulate such constraints efficiently. >> Although this seems a little bit similar to the Pentomino example, with my >> current gecode-skills I am not >> able to transfer the Ideas. >> >> Best Regards, >> Uwe >> >> >> ----------------ursprüngliche Nachricht----------------- >> Von: "Christian Schulte" cschu...@kth.se >> An: "'Uwe Nowak'" uwe.no...@itwm.fraunhofer.de , users@gecode.org >> Datum: Thu, 23 May 2013 17:49:07 +0200 >> ------------------------------------------------- >> >> >>> Hi, >>> >>> Did you try reification? While not great, it should not be too hard to pull >>> this off. Or am I missing something here? >>> >>> Best >>> Christian >>> >>> -- >>> Christian Schulte, Professor of Computer Science, KTH, >>> www.ict.kth.se/~cschulte/ >>> >>> >>> -----Original Message----- >>> From: users-boun...@gecode.org [mailto:users-boun...@gecode.org ] On >>> Behalf >>> Of Uwe Nowak >>> Sent: Thursday, May 23, 2013 3:40 PM >>> To: users@gecode.org >>> Subject: [gecode-users] Problem to formulate a constraint >>> >>> I am a beginner with gecode and have a problem to formulate a constraint. >>> I was looking through all channel constraints, however they do not seem to >>> fit my needs, or I am unable to formulate my needs in the language of the >>> channel constraints. >>> >>> I have the following variables >>> *an IntVar c with a finite set of values {A_1,...,A_n} *an IntVarArray p >>> >>> I have the following fixed parameters >>> For each value A_t I have a finite set of fixed indexed values I_t (e.g, an >>> std::set<int>) >>> A constant B >>> >>> Now I want to formulate the following constraints for(t = 1...n){ >>> c=A_t ==> for all I in I_t: p[i]=B >>> } >>> >>> >>> I thought to create an IntVarArgs of the subset of p with the indices I_t >>> However, than I have tor formulated for an IntVarArgs q_t: >>> for(t = 1...n){ >>> c=A_t ==> For all elements q_t[i]=B >>> } >>> >>> However, I do not find the right expressions to formulate this in gecode... >>> >>> >>> >>> _______________________________________________ >>> 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 >> > > > _______________________________________________ > 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