Example #1
0
 /// Constructor for cloning
 QueenArmies(bool share, QueenArmies& s)
   : MaximizeScript(share,s), n(s.n) {
   U.update(*this, share, s.U);
   W.update(*this, share, s.W);
   w.update(*this, share, s.w);
   b.update(*this, share, s.b);
   q.update(*this, share, s.q);
 }
Example #2
0
 inline std::string
 Comparator::compare(std::string x_n, SetVar x, SetVar y) {
   SetVarGlbRanges xglbr(x), yglbr(y);
   SetVarLubRanges xlubr(x), ylubr(y);
   if (! (Iter::Ranges::equal(xglbr,yglbr) && 
          Iter::Ranges::equal(xlubr,ylubr) &&
          x.cardMin() == y.cardMin() &&
          y.cardMax() == y.cardMax()) ) {
     std::ostringstream ret;
     ret << x_n << "=" << x << " -> " << y;
     return ret.str();
   }
   return "";
 }
Example #3
0
	//int bpfs[1][12];
	/// Actual model
	Profils(const ProfilsOptions& opt) :
	  	Script(opt),
    xs(*this,opt.size(),IntSet::empty,1,opt.nn()) {
# if 0 // was the hamming constrain
		SetVarArray cxs(*this,xs.size());
		for (int i=0; i<xs.size(); i++)
			rel(*this, xs[i], SRT_CMPL, cxs[i]);
		
		for (int i=0; i<xs.size(); i++) {
			SetVar y = xs[i];
			SetVar cy = cxs[i];
			for (int j=i+1; j<xs.size(); j++) {
				SetVar x = xs[j];
				SetVar cx = cxs[j];
				
				SetVar xIntCy(*this);
				SetVar yIntCx(*this);
				
				rel(*this, x, SOT_INTER, cy, SRT_EQ, xIntCy);
				rel(*this, y, SOT_INTER, cx, SRT_EQ, yIntCx);
				IntVar xIntCyCard(*this,0,x.cardMax());
				IntVar yIntCxCard(*this,0,y.cardMax());
				cardinality(*this, xIntCy, xIntCyCard);
				cardinality(*this, yIntCx, yIntCxCard);
				post(*this, xIntCyCard+yIntCxCard >= opt.distance());
			}
		}
#endif
		
		
		for (int i=0; i<(xs.size() - 1); i++)
		{
			IntVar min0(*this,0,120);
			IntVar min1(*this,0,120);
			IntVar max0(*this,0,120);
			IntVar max1(*this,0,120);
			
			
			min(*this,xs[i],min0);
			min(*this,xs[i+1],min1);
			if (opt.profils[0][i] == 1) 
				rel(*this, min1,IRT_GR, min0);
			else
				rel(*this, min1,IRT_LE, min0);
			
			max(*this,xs[i],max0);
			max(*this,xs[i+1],max1);
			if (opt.profils[1][i] == 1) 
				rel(*this, max1,IRT_GR, max0);
			else
				rel(*this, max1,IRT_LE, max0);
			
		}
	
		//contrainte de cardinalité
		IntVar card(*this,opt.densMin,opt.densMax);
		for (int i=0; i<(xs.size()); i++)
			cardinality(*this, xs[i], card);

		
		branch(*this, xs, SET_VAR_NONE(), SET_VAL_MIN_INC());
	}
Example #4
0
 forceinline
 SetVar::SetVar(const SetVar& y)
   : VarImpVar<Set::SetVarImp>(y.varimp()) {}
Example #5
0
 forceinline
 SetVarUnknownRanges::SetVarUnknownRanges(const SetVar& s) {
   iter.init(s.varimp());
 }
Example #6
0
 forceinline
 SetVarLubRanges::SetVarLubRanges(const SetVar& s)
   : iter(s.varimp()) {}